Добрый день! И с большими праздниками!!!
Попробовал написать маааленькую программу, которая бы принимала строку по прерыванию по USART и записывала ее в RAM. Проверку записи выполняю в основном теле программы. Кристалл ATtiny2313. Симулирую в Протеусе.
1) Что такое непонятные символы по приему, чередующиеся с отправленными?
Строгое появление символов не зависит от скорости набора на клавиатуре.
https://yadi.sk/i/iqytb96G3Hs9mu
Порт отражает не те данные, что записаны. Или не то записывает. Или не туда смотрю...
Сам, собственно, урезанный Код:
.DSEG
RX_Count: .byte 1
.CSEG
; ***** INTERRUPT VECTORS ************************************************
rjmp reset
rjmp RX_OK ;URXCaddr = 0x0007 ; USART, Rx Complete
Main:
sei
NOP ; Любой произвольный код главной программы
rcall long_delay
;После чего спокойно выполняем любой другой код.
;??????? Проверка факта записи в RAM????????????????????????????????
clr ZH
ldi ZL,RamStart
ldi temp3,8 ;Проверка 8 символов
v:
ld temp5,Z+
out PortB,temp5 ;вывод в порт
rcall long_delay
dec temp3 ;Is temp3 zero?
brne v ;if not, read next byte.
rjmp Main
RX_OK: ;ISR по приему
clr XH
ldi XL,RamStart ;Адрес RAM куда складываем строку
lds temp,RX_Count ;Скопируем смещение
add XL,temp ;Прибавляем смещение к адресу RAM
;clr temp2
;adc XH,temp2
cbi UCSRB, RXCIE ;Clear Interrupts
in temp2,UDR
st X,temp2
inc temp
sts RX_Count,temp
sbi UCSRB, RXCIE
reti
Где ошибка порылась?
Возможно ли на 2313 реализовать буфер для приема по USART?
Благодарен за ответы.
Попробовал написать маааленькую программу, которая бы принимала строку по прерыванию по USART и записывала ее в RAM. Проверку записи выполняю в основном теле программы. Кристалл ATtiny2313. Симулирую в Протеусе.
1) Что такое непонятные символы по приему, чередующиеся с отправленными?
Строгое появление символов не зависит от скорости набора на клавиатуре.
https://yadi.sk/i/iqytb96G3Hs9mu
Порт отражает не те данные, что записаны. Или не то записывает. Или не туда смотрю...
Сам, собственно, урезанный Код:
.DSEG
RX_Count: .byte 1
.CSEG
; ***** INTERRUPT VECTORS ************************************************
rjmp reset
rjmp RX_OK ;URXCaddr = 0x0007 ; USART, Rx Complete
Main:
sei
NOP ; Любой произвольный код главной программы
rcall long_delay
;После чего спокойно выполняем любой другой код.
;??????? Проверка факта записи в RAM????????????????????????????????
clr ZH
ldi ZL,RamStart
ldi temp3,8 ;Проверка 8 символов
v:
ld temp5,Z+
out PortB,temp5 ;вывод в порт
rcall long_delay
dec temp3 ;Is temp3 zero?
brne v ;if not, read next byte.
rjmp Main
RX_OK: ;ISR по приему
clr XH
ldi XL,RamStart ;Адрес RAM куда складываем строку
lds temp,RX_Count ;Скопируем смещение
add XL,temp ;Прибавляем смещение к адресу RAM
;clr temp2
;adc XH,temp2
cbi UCSRB, RXCIE ;Clear Interrupts
in temp2,UDR
st X,temp2
inc temp
sts RX_Count,temp
sbi UCSRB, RXCIE
reti
Где ошибка порылась?
Возможно ли на 2313 реализовать буфер для приема по USART?
Благодарен за ответы.

