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

 
 
> Помогите забодать 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
 
Start new topic
Ответов
VladislavS
сообщение Sep 22 2005, 04:20
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 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 - 08:36
Рейтинг@Mail.ru


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