;AT90S8515 - _ример применения микроконтроллера для передачи
;		 сообений между микроконтроллерами с помоь_ UART.
.include "8535def.inc"
.CSEG
rjmp init
init:
	ldi r16,low(RAMEND)	;Lстановить нижн__ границу программного стека  
	out SPL,r16
	ldi r16,high(RAMEND)	;Lстановить верхн__ границу программного стека  
	out SPH,r16
				ldi r16,0xff
				out DDRB,r16
	ldi r16,0x18		;_азрешить работу приемника и передатчика
	out UCR,r16			;_адр состоит из 8 бит.
	sbi UCR,CHR9
	ldi r16,255			;Lстановить частоту приема и передачи 115200
	out UBRR,r16		
      ldi ZL,low(ID<<1)		;Lстановить указатель Z на ID    
      ldi ZH,high(ID<<1)   	;Tмеение указать в байтах
      lpm				;_рочитать FLASH память по указател_ Z в r0
	mov r16,r0		
				out PORTB,r0		   
	cpi r16,0x30 		; +сли ID = "0" - прием, иначе передача 
	brne receive	
	rjmp transmit
receive: 
	ldi ZL,0x60			;_адать смеение в SRAM для записи сообения
	ldi ZH,0x00
	ldi r17,20			;_агрузить счетчик байт сообения
loop1: 
	sbic USR,RXC		;+жидать приема байта
	rjmp put
	rjmp loop1
put: 
	in r16,UDR
;-----------------------
; receive parity check
	
	mov r22,r16
	mov r18,r16
	ldi r19,8
	clr r20
	clr r21
loop2:
	lsl r18
	adc r20,r21
	dec r19
	brne loop2
	andi r20,0x01
	in r16,UCR
	lsr r16
	andi r16,0x01
	eor r16,r20
	breq right
	ldi r22,0x3f	
right:
	mov r16,r22
					out PORTB,r22

;-----------------------
	st Z+,r16
	dec r17
	brne loop1
					ldi r16,0xff
					out PORTB,r16
transmit:
      ldi ZL,low(Trn_mes<<1)  ;Lстановить указатель Z на Trn_mes  
      ldi ZH,high(Trn_mes<<1)   
	ldi r17,20			;_агрузить счетчик байт сообения
loop3:
	sbic USR,UDRE		;+жидать освобождения UDRT
	rjmp get
	rjmp loop3
get:
	lpm 				;_рочитать FLASH память по указател_ Z в r0
	adiw ZL,1
	mov r16,r0
;-----------------------
; transmit parity check
	
	mov r18,r16
	ldi r19,8
	clr r20
	clr r21
loop4:
	lsl r18
	adc r20,r21
	dec r19
	brne loop4
	cbi UCR,TXB8		
	andi r20,0x01
	breq next
	sbi UCR,TXB8
next:
;-----------------------
	out UDR,r16			;_ередать очередной байт
	dec r17
	brne loop3
	rjmp receive
Trn_mes: 	.db "Hello! My Name is " 	; Tообение передатчика
ID:		.db "1"		; Lдентификатор контроллера: 1 - для 
; приемника, 0 - для передатчика	
