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

 
 
 
Reply to this topicStart new topic
> Помогите забодать UART, at90s2313, 5 MHz кварц
M_A
сообщение Sep 21 2005, 13:16
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 27-12-04
Из: г. Иркутск
Пользователь №: 1 689



Указанная выше железяка получает от компа через преобразователь из +-12 в ТТЛ постоянно с периодом неск. милисекунд один и тот же байт, который благополучно доходит до ноги RXD контроллера (проверял осцилом). Я сделал прогу, которая при получении чего-то отличного от нуля должна дрыгать ногой контроллера. Результат - нога постоянно в 1. BaudRate на компе и контроллере совпадают (9600). Я думаю я по неумению неправильно настроил UART контроллера. Посмотрите плз, чего не так. Или посоветуйте чего-нить, у меня варианты кончились, и чтение даташита ничего не дает.... мож плохо читаю... Заранее благодарен!!!
Код
.include "2313def.inc"
.def data = r16
.def baudrate = r17
ldi r18, 0b00010000    
out UCR, r18          ;выставляю бит RXEN (Reciever enable)
ldi r18, 0b01000000  ;
ldi r19, 0b01000000  ;два одинаковых регистра, будут нужны для вывода
out DDRD, r18        ;говорю седьмой ноге порта D что она будет выходом
ldi baudrate, 32      ;9600 at 5 MHz посчитал по формуле из даташита...
out UBRR, baudrate    ;...и записываю в Baud Rate Register

recieve:
in data, UDR              ;считываю значение регистра данных UARTа
ser r20                  ;далее проверяю, получил ли чего-нить
ser r21                  ;r20 = r21
eor r21, data            ;если в data что-то было, r21 изменится...
and r20, data            ;...и станет не равно r20...
brne troggle              ;...и произойдет прыжок на переключение ноги
rjmp recieve              ;а если останется равно, значит data = 0, повторяем считывание

troggle:                    ;дрыгалка для ноги

eor r18, r19                ;переключаю состояние r18
out PORTD, r18              ;и сбрасываю на выход

rjmp recieve                ;и все поновой...
.exit
Go to the top of the page
 
+Quote Post
mse
сообщение Sep 21 2005, 13:49
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Чё-то странное. А зачем постоянно вычитывать УДР? Вычитывай из флагового регистра состояние и смотри на RXC. Или через sbiс(s) UCR,RXC. Не помню как там у 2313 мона.
Ну и анализ на "0" тоже кривоват.
Код
rx_wait:
    sbis   usr,rxc
    rjmp  rx_wait
    in      data,udr
    cpi    data,0
    brne  rx_wait
   ;шлёп-нога;О)
Go to the top of the page
 
+Quote Post
M_A
сообщение Sep 22 2005, 02:02
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 153
Регистрация: 27-12-04
Из: г. Иркутск
Пользователь №: 1 689



Цитата(mse @ Sep 21 2005, 13:49)
Чё-то странное. А зачем постоянно вычитывать УДР? Вычитывай из флагового регистра состояние и смотри на RXC. Или через sbiс(s) UCR,RXC. Не помню как там у 2313 мона.
Ну и анализ на "0" тоже кривоват.
Код
rx_wait:
    sbis   usr,rxc
    rjmp  rx_wait
    in      data,udr
    cpi    data,0
    brne  rx_wait
   ;шлёп-нога;О)

*



И правда заработало, спасибо!!! cheers.gif Только не понял, в чем же была моя ошибка. Хоть все и кривовато и некрасиво было, но работать то по моему должно было... huh.gif
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Sep 22 2005, 04:20
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Команда чтения из UDR влияет на конечный автомат USARTа и там что-то сбрасывается при этом. Читай даташит - там английским по белому написано, что признаком приема байта является флаг и генерируемое им прерывание. Зачем изобретать другой механизм, если разработчики чипа тебе все написали. AVR еще очень простой кристалл. Если такие вольности позволять себе на более сложном железе, то ничего никогда не заработает!

А сосвсем "попацановски" будет поместить код считывания UDR и дергания ноги в прерывание и освободить проц от опроса USR.
Go to the top of the page
 
+Quote Post

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

 


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


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