Проблемма с работой USART у ATMEGA48

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
jtlex
Открыл глаза
Сообщения: 43
Зарегистрирован: Вт мар 18, 2008 10:29:04
Контактная информация:

Проблемма с работой USART у ATMEGA48

Сообщение jtlex »

Собрал простейшую схему на 2ух ATmega48 один передает, другой принимает днные по UART. Алгоритм принимающей микросхемы построен по принципу: принял данные установил на выходе 1,пауза в 1мкс, сбросил на выходе. Частота передаваемых данных по UART 20мс. НО! Микросхеммы - приемник работает не правильно: приняла данные, установила бит на выходе,пауза,сбросила бит,установила бит,пауза,сбросила бит.
Листинг прерывания принятого по UART:

UART_RXC:
sts RamTemp1,rTemp1
in rSreg,SREG
cbr rSTATUS,1<<IndEnd
lds rTemp1,UCSR0A
cbr rTemp1,1<<RXC0
sts UCSR0A,rTemp1
lds rTemp1,RamTemp1
out SREG,rSreg
reti

Кусок программы по обработе данных:
;инициализация и настройка

Programma:
sbrc rSTATUS,IndEnd
rjmp Programma
sbi PORTD,7
nop
nop
nop
nop
nop
nop
nop
nop
cbi PORTD,7
sbr rSTATUS,1<<IndEnd
rjmp Programma

В чем загвоздка подскажите.
Данные по UART приходят 1 раз в 20мс -я проверял по осцилографу.
Аватара пользователя
Lakshmi
Первый раз сказал Мяу!
Сообщения: 28
Зарегистрирован: Пн сен 01, 2008 21:56:44
Откуда: Балашиха

Сообщение Lakshmi »

Выложите лучше архивы с проектами приемника и передатчика. Схему можно собрать в PROTEUS и проанализировать причину неполадок.
smac
Мучитель микросхем
Сообщения: 459
Зарегистрирован: Вс июн 01, 2008 12:16:38

Re: Проблемма с работой USART у ATMEGA48

Сообщение smac »

jtlex писал(а):Собрал простейшую схему на 2ух ATmega48 один передает, ......
НО! Микросхеммы - приемник работает не правильно: приняла данные, установила бит на выходе,пауза,сбросила бит,установила бит,пауза,сбросила бит.
Листинг прерывания принятого по UART:

UART_RXC:
sts RamTemp1,rTemp1
in rSreg,SREG
cbr rSTATUS,1<<IndEnd
lds rTemp1,UCSR0A
cbr rTemp1,1<<RXC0
sts UCSR0A,rTemp1
lds rTemp1,RamTemp1
out SREG,rSreg
reti

Кусок программы по обработе данных:
;инициализация и настройка

.......
В чем загвоздка подскажите.
Данные по UART приходят 1 раз в 20мс -я проверял по осцилографу.


загвоздка скорее всего в том, что в прерывании по приему байта у вас не сбрасывается флаг RXC0 - посмотрите даташит, для того чтобы этот флаг сбросился необходимо прочитать регистр UDR0. иначе никак.
из-за того, что у вас не сбрасывается этот флаг прерывание вызывается повторно соответственно остальные проблемы по той-же причине
З. Ы. Поправлю ответ как скачается даташит на МЕГУ48, пока под рукой нет.
Боюсь показаться занудой, но желатьно использовать теги code для оформления фрагментов кода

Добавлено позже
Собственно вот отрывок из ДШ про прием байта

19.7.3 Receive Compete Flag and Interrupt
The Receive Complete (RXCn) Flag indicates if there are unread data present in the receive buffer. This flag is one when unread data exist in the receive buffer, and zero when the receive buffer is empty (i.e., does not contain any unread data). If the Receiver is disabled (RXENn = 0), the receive buffer will be flushed and consequently the RXCn bit will become zero.

When the Receive Complete Interrupt Enable (RXCIEn) in UCSRnB is set, the USART Receive Complete interrupt will be executed as long as the RXCn Flag is set (provided that global interrupts are enabled). When interrupt-driven data reception is used, the receive complete routine must read the received data from UDRn in order to clear the RXCn Flag, otherwise a new interrupt will occur once the interrupt routine terminates.
Закрыто

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