Init_usart:
ldi temp,(1<<TXEN | 1<<RXEN)
out UCSRB,temp ;разрешение передачи по каналу USART (в регистр
;TXEN и RXEN записываем 1)
clr temp
out UBRRH,temp
ldi temp,0x05
out UBRRL,temp ;задается скорость передачи 38400 бод
ldi temp, ((1<<URSEL)|(3<<UCSZ0))
out UCSRC,temp ; 1 стоп бит - 0 в USBS,
;контроль четности отсутсвует UPM1,UPM0 = 0
;USZ=3(USZ0-0,USZ1-1,USZ2-1) - посылается 8 бит за 1 раз
ret
;********************************************************************* BUTTON1_ON:
ldi button,BUTTON_1_ON
ldi zl,low(text*2) ;загрузка начального адреса передаваемого текста
ldi zh,high(text*2)
rjmp USART_TRANSMIT
BUTTON2_ON:
ldi button,BUTTON_2_ON
ldi zl,low(text1*2) ;загрузка начального адреса передаваемого текста
ldi zh,high(text1*2)
rjmp USART_TRANSMIT
;*********************************************************************;передача байта по USART
USART_TRANSMIT:
clr flag
ldi count,29 ;число символов первой последовательности
clr temp
out TCNT1H,temp
out TCNT1L,temp
ldi temp,(1<<OCIE1A)
out TIMSK,temp ;устанавливает 7 бит, чтобы разрешить прерывания
rjmp loop
TRANSMIT: ;цикл ожидания установления UDRE в 1, т. е. ждем ;когда будет полностью передан предыдущий байт
sbis UCSRA,UDRE
rjmp TRANSMIT
lpm
out UDR,r0 ;передача данных по USART
clr temp
out TCNT1H,temp
out TCNT1L,temp
mov temp,r0
inc zl
cpi button,BUTTON_2_ON
breq BUTTON2_END
BUTTON1_END:
dec count
breq END_POSL
rjmp END_TR
BUTTON2_END:
cpi temp,0x0D
breq END_POSL
END_TR:
reti
END_POSL:
ldi flag,0x01
rjmp END_TR
;*********************************************************************
RECEIVE:
in temp, UDR ; считываем данные, переданные по USART
;(байт содержаться в регистре UDR)
out PORTB,temp ; выводим полученное значение на светодиоды)
ret
; определили константы в памяти программы
text: .db 'I',' ','L','O','V','E',' ','T','H','I','S',' ','W','O','N','D','E','F','U','L','L',' ','W','O','R','L','D',0x0A,0x0D
text1:.db 'S','O','M','B','O','D','Y',' ','P','L','E','A','S','E',' ','K','I','L','L',' ','M','E',0x0A,0x0D
.eseg
