;***************************************************************************
;*		7 февраля 2010г. 13-30
;*
;* RFID Reader ATtiny2313 (interrupt OCA Timer0)
;*
;* Автор "kuber" - trio-tv@mail.ru
;*
;* 8.0 MZh int osc 
;* Используется внешний компаратор и усилитель на LM358
;*  
;***************************************************************************
;
.equ	INPUT		=1	;PB1--вход от компаратора
.equ	SYS_ADDR	=0	;
;
;
;
.def	S		=R0
.def	inttemp		=R1
.def	inttemp2		=R2
.def	push_temp	=R3
.def	push_SPL	=R4
;
;
.def	timerL		=R16
.def	timerH		=R17
;
.def	system	  	=R18
.def	command 	=R19
;
.def	bitcnt		=R20
.def	parity		=R21
;
;
;********************************************************************
;
detect:
	sei
	rcall	rfid_input
	cli
	ret
;
rfid_input:
;
	cbr	Flag_R,0b00000001
;
;--
	ldi	command,64	
;
scan_preambula:
;
	clr	timerL
	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
;
;??	mov	command,command
;--
;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
;
	ret	
;
;----------------------------------------------------------------
;
read_byte:
;
	rcall	read_nibl
	eor	parity,system		
	mov	command,system
	rcall	read_nibl
	eor	parity,system
	swap	command
	or	command,system
;
	ret
;
;---------------------------------------------------------------
;
read_nibl:
;
	clr	timerL
	clr	system
	ldi	bitcnt,5		;
;
	rcall	sample
;
	clc
;
	ror	system
;
	ret
;
;----------------------------------------------------------------
;
;
sample:
	cpi	timerL,96	
	brlo	sample
;
;
	sbic	PINB,INPUT
	rjmp	bit_is_a_1
;
bit_is_a_0:	
	sec			
	rol	system
;
bit_is_a_0a:	
	cpi	timerL,144
	brsh	fault
;		
;
	sbis	PINB,INPUT
	rjmp	bit_is_a_0a	

	clr	timerL
	rjmp	nextbit
;
;---------------------------------------
;
bit_is_a_1:	
	clc			
	rol	system
;
bit_is_a_1a:	
	cpi	timerL,144	
	brsh	fault
;		
;
	sbic	PINB,INPUT	
	rjmp	bit_is_a_1a	

	clr	timerL

nextbit:		
	dec	bitcnt		
	brne	sample		
;
	ret
;
;----------------------------------------
;
ready_yes:
;
;Код считан правильно.
;
	lds	system,(ee_paket_byte1)
	tst	system
	brne	r_yd
;
	lds	system,(ee_paket_byte2)
	tst	system
	brne	r_yd
;
	lds	system,(ee_paket_byte3)
	tst	system
	brne	r_yd
;
	lds	system,(ee_paket_byte4)
	tst	system
	brne	r_yd
;
	cbr	Flag_R,0b00000001
;
	ret
;
r_yd:
;
	sbr	Flag_R,0b00000001
;
	ret
;
;----------------------------------------
