Проблема с приёмом по UART

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
ladik
Родился
Сообщения: 6
Зарегистрирован: Сб апр 09, 2011 10:15:57

Проблема с приёмом по UART

Сообщение ladik »

Доброго времени суток!) В МК пока чайник( по учёбе появилась необходимость разобраться в UART. Всё как бы насторил. Запустил симуляцию...Выставил RXD=1-прерывание по приёму. В UDR вбил данные, к примеру 0xFF. Нажал F11, выполнилось прерывание по приёму, и сразу очистился регистр UDR, :o т.е. я даже не успел перейти в тело обработчика. Понял, что это происходит из за UDRE=1. Почему он равен 1 не понимаю. :roll: Таким образом, приём как бы и не осуществляется :cry: Ещё вопрос в том, что при моделировании в протеусе, при нажатии клавиши на клавиатуре светодиоды загораются, только их код не соответствует коду клавиши. Подскажите, мне, чайнику в чём тут ошибка.

Файлы AVR Studiuo и Proteus-a прилагаю.

Спасибо, кто откликнется! :)
Вложения
UART.rar
(25.34 КБ) 138 скачиваний
Реклама
Аватара пользователя
SubDia
Держит паяльник хвостом
Сообщения: 995
Зарегистрирован: Сб апр 02, 2011 17:59:22
Откуда: Город-герой Севастополь

Re: Проблема с приёмом по UART

Сообщение SubDia »

UDRE - это флаг готовности к передаче, и в Вашем случае роли он не играет.
После ресета он инициализируется со значением "1", и этому удивляться не следует. :)
Непонятно мне, зачем Вам контроль четности? Это раз. Второе. Посмотрите страницу 166 даташита - там написано, что регистр UCSRC и регистр UBRRL из регистровой пары UBRRL:UBRRH занимают одно и то же адресное пространство. Для их разнесения (и избежания ошибок при инициализации) существует бит URSEL в регистре UCSRC, который нужно устанавливать в единицу при записи в UCSRC.
Со скоростью что-то Вы такое жуткое намудрили... Для скорости приема 9200 пишем в UBRRL число 25 (0x19). У меня Ваша программка запустилась, и нормально работает (специально по ASCII сверялся), маленько только подправил блок инициализации. Передатчик отключил к собачьей бабушке, простоты для. :)
uart_init:
LDI R16,0x90
OUT UCSRB, R16
LDI R16,0x86
OUT UCSRC, R16
LDI R16, 0x00
OUT UBRRH,R16
LDI R16, 0x19
OUT UBRRL,R16
pavel_cydenov: Вобще я праAVRославный человек. Но и про ислARM слышал много хорошего )
MrYuran: Самые ортодоксальные — это PICудеи )
Katz: Не, 51-ники. )
Изображение
Реклама
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Re: Проблема с приёмом по UART

Сообщение Aheir »

Очень часто обсуждаемый вопрос. Воспользуйтесь поиском и пишите в уже имеющихся темах.
Оптимизм х (Опыт + Знания) = const
Аватара пользователя
Aheir
Модератор
Сообщения: 4517
Зарегистрирован: Пн апр 03, 2006 11:43:25
Откуда: Санкт - Петербург
Контактная информация:

Re: Проблема с приёмом по UART

Сообщение Aheir »

Очень часто обсуждаемый вопрос. Воспользуйтесь поиском и пишите в уже имеющихся темах.
Оптимизм х (Опыт + Знания) = const
Реклама
Эиком - электронные компоненты и радиодетали
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»