Указанная выше железяка получает от компа через преобразователь из +-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