реклама на сайте
подробности

 
 
> Прерывание для RS232 на AtMega128
Nekromant
сообщение Apr 5 2009, 14:57
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 21-03-07
Пользователь №: 26 369



Добрый день, уважаемые форумчане.
Возникла задача реализовать общение между контроллером и ПК.
Сама передача работает. т.е контроллер принимает символы и отправляет, но при попытке организовать прерывание по приему символа-оно просто не срабатывает. вот фрагменты кода на строгий суд:
используется отладочная плата STK500
CODE
extern THD44780Service Lcd;
extern char c;

void TDebugSerial::Init() //инициализация USART
{
/* Enable double speed */
UCSR1A = (1 << U2X);
/* Enable receiver, transmitter and interrupts */
UCSR1B = (1 << RXEN1) | (1 << TXEN1) | (1 << RXCIE1);
/* 8 bit data */
UCSR1C = (1 << UCSZ11) | (1 << UCSZ10) ;
/* high byte of UART speed */
UBRR1H = (8000000 /(19200 * 8L) - 1) >> 8;
/* low byte of UART speed */
UBRR1L = (uint8_t)(8000000 / (19200 * 8L)-1);

}
......
ISR(USART1_RX_vect)//организация прерывания по приему символа
{
uint32_t i=98765432; //проверка срабатывания прерывания
Lcd.WriteInt(i); //проверка срабатывания прерывания


}



Lcd.WriteInt(i)---функция вывода на дисплей жк-индикатора-в главных циклах и других функция срабатывает. В этом же прерывании просто молчание и никакой реакции. вместо нее даже пытался менять состояние светодиодов-все равно молчание.
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Master_MW
сообщение Apr 28 2009, 20:57
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 202
Регистрация: 18-12-08
Из: Беларусь, Минск
Пользователь №: 42 590



Доброго времени суток, чатяне. Некогда сталкивался с той же проблемой, что и автор топика, на том же микроконтроллере. Как показал опыт, - да, действительно, включать USART0 (я использовал USART0, а не USART1 в своём дипломном проекте ) можно только по завершению инициализации скорости передачи и разрешения прерываний по завершению приёма и передачи (другие параметры настройки порта по умолчанию). Код всей программы седующий:

Сей код прекрасно ведет себя как в железе, так и в Proteus'е. Частота внешнего кварца - 1 МГЦ. Скорость передачи 4800 Бод.
Прошу прощения, что поздно, но, возможно кому-то это поможет. Предположу, что исходный код автора статьи не работал из-за неправильно выбранного уровня оптимизации. (Я предпочитаю использовать уровень 0s).

Модератор. Из сообщения удалены огромные цитаты исходного текста потому, что это является грубым нарушением п.3.4. Правил форума. Значительные по объему исходные тексты следует прикреплять к сообщению в виде файлов.
С уважением, rezident


Сообщение отредактировал Master_MW - Apr 28 2009, 21:54
Прикрепленные файлы
Прикрепленный файл  RS232.rar ( 1.99 килобайт ) Кол-во скачиваний: 16
 


--------------------
Отсуствие единых стандартов всегда будет мучать человечество.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 08:59
Рейтинг@Mail.ru


Страница сгенерированна за 0.01389 секунд с 7
ELECTRONIX ©2004-2016