Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: UART в меге 128
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
VladimirYU
Почему при чтении из UART mega 128?

Код
[/code]
BYTE result = UDR;
[code]


Все хорошо, а
Код
[/code]
BYTE result = UDR;
result = UDR;
[code]


все плохо, нигде в DS не нашел, что нельзя два раза подряд читать UDR.
Результат втрого чтения какая то фигня. Это так и должно быть?
_Pasha
Цитата(VladimirYU @ Feb 16 2009, 10:16) *
Результат втрого чтения какая то фигня. Это так и должно быть?

Конечно: он же с двойной буферизацией

Цитата
A second buffer register has been added. The two buffer registers operate as a circular FIFO buffer. Therefore the UDR must only be read once for each incoming data! More important is the fact that the error flags (FE and DOR) and the ninth data bit (RXB8) are buffered with the data in the receive buffer.



Такшта, перед UDR рекомендуется еще и статус почитать. 
MrYuran
Цитата(VladimirYU @ Feb 16 2009, 10:16) *
Результат втрого чтения какая то фигня. Это так и должно быть?

Что за фигня? По какому критерию оценивается, фигня или нет?
Вообще УАРТ в мегах организован как очередь, поэтому при первом чтении вы снимаете значение с верхушки, при втором - получаете следующее значение.

Во втором случае вы теряете значение с верхушки очереди, т.к. нигде его не используете, а при повторном чтении UDR получаете уже следующее значение
VladimirYU
Цитата(_Pasha @ Feb 16 2009, 10:23) *
Therefore the UDR must only be read once for each incoming data!  

Да налетел случайно
_Pasha a14.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.