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

 
 
> Прерывание для 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
Ответов
Nekromant
сообщение Apr 6 2009, 11:00
Сообщение #2


Участник
*

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



сделал следующим образом:
1-UBRR поставил в самое начало инициализации
2а-попробовал считать без функции GetChar(); просто сразу выдать занчение UDR на дисплей и отправить назад ПК
2б-попробовал считать без функции GetChar(); просто сразу выдать занчение UDR на дисплей
2в-попробовал считать без функции GetChar(); просто сразу занчение UDR отправить назад на ПК
результат один и тот же
провел эксперимент по поводу того что МК будет вечно сидеть в прерывании если UDR не считать-хм результат можно оченить так:
1-либо он воообще прерывания не заметил и не пошел по нему
2- либо зашел и вышел
Потому что основная программа не зависла а отрабатывала свой код без нареканий
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 2nd August 2025 - 05:49
Рейтинг@Mail.ru


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