;***************************************************************************
;* RFID Reader ATtiny13 (interrupt OCA Timer0)
;* 9.6 MZh int osc 
;* В программе не используется контроль по строкам, только по столбцам
;*
;***************************************************************************

.equ	INPUT		=4	;PB4--вход от компаратора
.equ	SYS_ADDR	=0	;
;
.def	S		=R0
.def	inttemp		=R1
.def	inttemp2	=R2
.def	push_temp	=R3
.def	push_SPL	=R4
;
;
.def	timer_Lo		=R16
.def	timer_Hi		=R17
;
.def	system	  	=R18
.def	command 	=R19
;
.def	bitcnt		=R20
.def	parity		=R21
;
;
;********************************************************************
;
detect:
	in	push_SPL,SPL
;
hig_lin:
	sbic	PINB,INPUT
	rjmp	hig_lin
;
low_lin:
	sbis	PINB,INPUT
	rjmp	low_lin
;
	cbr	Flag_R,0b00000001
;
;--
	ldi	command,64	;кол-во чтитываемых бит
;
scan_preambula:
;
	clr	timer_Lo
	ldi	bitcnt,9		;Preambula 
;
	clr	system
;
	rcall	sample
	brcc	no_prbl
	cpi	system,0xff
	breq	preambula_yes
no_prbl:
	dec	command
	brne	scan_preambula
;
	rjmp	fault
;
preambula_yes:
;
	clr	parity
;
;Групповой идентификатор
;
	rcall	read_byte
;
;--
;1
	rcall	read_byte
;
	sts	(ee_paket_byte1),command
;--
;2
	rcall	read_byte
;
	sts	(ee_paket_byte2),command
;--
;3
	rcall	read_byte
;
	sts	(ee_paket_byte3),command
;--
;4
	rcall	read_byte
;
	sts	(ee_paket_byte4),command
;--
;контроль столбцов на чётность 4 бита + 0 стоп бит.
;
	rcall	read_nibl
	brcs	fault
	cp	parity,system
	brne	fault
;
	rjmp	ready_yes
;
;----------------------------------------------------------------
;Выход по ошибкам
;
fault:
;
	ldi	system,15
;
	out SPL,push_SPL
;
	ret	
;
;----------------------------------------------------------------
;
read_byte:
;
	rcall	read_nibl
	eor	parity,system		
	mov	command,system
	rcall	read_nibl
	eor	parity,system
	swap	command
	or	command,system
;
	ret
;
;---------------------------------------------------------------
; чтение 5 бит
read_nibl:
;
	clr	timer_Lo
	ldi	bitcnt,5	;Preambula ;Receive 55 bits
	clr	system
;
	rcall	sample
;
	clc
;
	ror	system
;
	ret
;
;----------------------------------------------------------------
;
;
sample:
		cpi	timer_Lo,96	;число прерываний (int osc 9,6Mhz)
		brlo	sample

		sbic	PINB,INPUT
		rjmp	bit_is_a_1
;
bit_is_a_0:	sec			
		rol	system
;
bit_is_a_0a:	cpi	timer_Lo,144	;число прерываний (int osc 9,6Mhz)
		brsh	fault		
		sbis	PINB,INPUT	
		rjmp	bit_is_a_0a	

		clr	timer_Lo
		rjmp	nextbit
;
;---------------------------------------
;
bit_is_a_1:	clc			
		rol	system
;
bit_is_a_1a:	cpi	timer_Lo,144	;число прерываний (int osc 9,6Mhz)	
		brsh	fault		
		sbic	PINB,INPUT	
		rjmp	bit_is_a_1a	

		clr	timer_Lo

nextbit:		dec	bitcnt		
		brne	sample		
;
	ret
;
;----------------------------------------
;
ready_yes:
;
;All bits sucessfully received!
;
;Код считан правильно.
;
	sbr	Flag_R,0b00000001
;
	out SPL,push_SPL
;
		ret
;
;----------------------------------------
