Usart В Mega48Pa Принимает И Передает даже не мусор. Смотреть внутри.
В место любых данных передает только 0 или 128.
Программа просто передает известные значения но получаем в место отправленных только 0 или 128.
Код можно пропустить и прочитать до конца сообщение для понимания проблемы.
Настраеваю вот так
;================================================= ================================================== =======================
;===================== Константы UART ================================================== ===================================
.equ ON_UCSR0A = (0‹‹RXC0 | 0‹‹TXC0 | 0‹‹UDRE0 | 0‹‹FE0 | 0‹‹DOR0 | 0‹‹UPE0 | 0‹‹U2X0 | 0‹‹MPCM0)
.equ ON_UCSR0B = (1‹‹RXCIE0 | 0‹‹TXCIE0 | 0‹‹UDRIE0 | 1‹‹RXEN0 | 1‹‹TXEN0 | 0‹‹UCSZ02 | 0‹‹RXB80 | 0‹‹TXB80)
.equ ON_UCSR0C = (0‹‹UMSEL01 | 0‹‹UMSEL00 | 0‹‹UPM01 | 0‹‹UPM00 | 1‹‹USBS0 | 1‹‹UCSZ01 | 1‹‹UCSZ00 | 0‹‹UCPOL0)
; Настройка скорости
.equ ON_UBRR0H = 0
.equ ON_UBRR0L = 25
;===================== константы UART ================================================== ===================================
;================================================= ================================================== =======================
макрос выкладую чтобы видно было че за команда "uout"
.macro uout
.if @0‹0x40
out @0,@1
.else
sts @0,@1
.endif
.endm
потом записую так
//************************************************** ***********************************
;===================== Настройка UART =================================================
ldi temp, ON_UCSR0A
uout UCSR0A, temp
ldi temp, ON_UCSR0B
uout UCSR0B, temp
ldi temp, ON_UCSR0C
uout UCSR0C, temp
; Настройка скорости
ldi temp, ON_UBRR0H
uout UBRR0H, temp
ldi temp, ON_UBRR0L
uout UBRR0L, temp
;===================== настройка UART =================================================
//************************************************** ***********************************
специально для проверки организовал такой цикл.
main:
ldi temp, 255
inc time1
cp time1, temp
brne main
ldi temp, 255
inc time2
cp time2, temp
brne main
inc temp2
uout udr0, temp2
rjmp main
он отправляет раза два за секунду байты каждый раз больше на единицу но приходит в место данных только 128 и 0
вот копи паст 128 0 128 128 0 128 128 128 128 128 128 128 0 128 128 128 128 128 128 0 128 128 128 128 128 0 128 128 0 128 0 0 128 128 0 128 0 128 128 128 128 128 128 0 128 128 128 128 128 0 128 128 0 128 0 128 128 128 128 128 0 128 128 128 128
а должно быть
1 2 3 4 5 6 и так далее по кругу.
До этого организовывал передачю на контроллер который в прерывании приема отправлял байт назад.
И было замечено что при отправке байта примерно 190 и больше по светодиоду было видно что контроллер вообще ниче не отправляет да и принятых в компе байт не добавлялось.
Предположение что не принимает старт бит а прием байтов с маленьким значением из за большого числа нулей воспринимается как старт бит.
скорости вроде правильные.
кварц 8МГц
ошибка 0.2%
скорость порта
serialPort1.BaudRate = 19200;
Хочю отметить что прием передачю на мега8 я уже организовывал таких проблем небыло.
|