;******************************************************************************
;* Program pro Bluetooth Car												  *
;*																			  *
;* v1.0																		  *
;* 16.9.2008																  *
;* Petr Gabrlik																  *	
;* www.pier.own.cz, petrgabrlik-email.cz									  *
;*																			  *
;* --vyuzite porty															  *
;* PC0-1 	= motor vpred/vzad												  *
;* PC2-3 	= zataceni vpravo/vlevo											  *
;* PC4	= bile ledky														  *
;* PC5	= cervene ledky														  *	
;*																			  *
;******************************************************************************


;------------------------------------------------------------------------------
;----------- inicializace -----------------------------------------------------
;------------------------------------------------------------------------------

	.NOLIST	
	.INCLUDE "m8def.inc"	
	.LIST	

	.CSEG
	rjmp reset


reset:

;**** nastaveni portu ****
	ser r16
	out DDRC,r16	;port C cely vystupni
	clr r16
	out PORTC,r16	;pocatecni nastaveni pinu portu C

;**** inicializace pameti ****
	ldi r16,LOW(RAMEND)
	out SPL,r16	
	ldi r16,HIGH(RAMEND)
	out SPH,r16

;**** nastaveni uart ****
	LDI  R16,LOW(0)
	OUT  UCSRA,R16
	LDI  R16,low(24)
	OUT  UCSRB,R16
	LDI  R16,low(134)
	OUT  UCSRC,R16
	LDI  R16,LOW(0)
	OUT  UBRRH,R16
	LDI  R16,LOW(51)
	OUT  UBRRL,R16


;------------------------------------------------------------------------------
;----------- hlavni program ---------------------------------------------------
;------------------------------------------------------------------------------

prijem:
	sbis usr,rxc	;cekani na prijem dat
    rjmp prijem

prijato:
    in   r16,udr	;nacteni prijatych dat

vpr:
	cpi r16,48		;** 48=vpred
	brne vza
	;-------------------
		sbi PORTC,0		;1
		cbi PORTC,1		;0
		cbi PORTC,2		;0
		cbi PORTC,3		;0
		rcall _cekej
		cbi PORTC,0
		rjmp prijem
	;-------------------
	
vza:
	cpi r16,49		;** 49=vzad
	brne vprvle
	;-------------------
		cbi PORTC,0		;0
		sbi PORTC,1		;1
		cbi PORTC,2		;0
		cbi PORTC,3		;0
		rcall _cekej
		cbi PORTC,1
		rjmp prijem
	;-------------------
	
vprvle:
	cpi r16,50		;** 50=vpred vlevo
	brne vprvpr
	;-------------------
		sbi PORTC,0		;1
		cbi PORTC,1		;0
		sbi PORTC,2		;1
		cbi PORTC,3		;0
		rcall _cekej
		cbi PORTC,0
		cbi PORTC,2
		rjmp prijem
	;-------------------	

vprvpr:
	cpi r16,51		;** 51=vpred vpravo
	brne vzavle
	;-------------------
		sbi PORTC,0		;1
		cbi PORTC,1		;0
		cbi PORTC,2		;0
		sbi PORTC,3		;1
		rcall _cekej
		cbi PORTC,0
		cbi PORTC,3
		rjmp prijem
	;-------------------

vzavle:
	cpi r16,52		;** 52=vzad vlevo
	brne vzavpr
	;-------------------
		cbi PORTC,0		;0
		sbi PORTC,1		;1
		sbi PORTC,2		;1
		cbi PORTC,3		;0
		rcall _cekej
		cbi PORTC,1
		cbi PORTC,2
		rjmp prijem
	;-------------------

vzavpr:
	cpi r16,53		;** 53=vzad vpravo
	brne svetlaon
	;-------------------
		cbi PORTC,0		;0
		sbi PORTC,1		;1
		cbi PORTC,2		;0
		sbi PORTC,3		;1
		rcall _cekej
		cbi PORTC,1
		cbi PORTC,3
		rjmp prijem
	;-------------------

svetlaon:
	cpi r16,54		;** 54=svetla zapnuta
	brne svetlaoff
	;-------------------
		sbi PORTC,4
		sbi PORTC,5
		
		ldi  r16,54
		rcall _odesli
				
		rjmp prijem
	;-------------------

svetlaoff:
	cpi r16,55		;** 55=svetla vypnuta
	brne stuj
	;-------------------
		cbi PORTC,4
		cbi PORTC,5	
		
		ldi  r16,55
		rcall _odesli
			
		rjmp prijem

	;-------------------

stuj:				;prijat neplatny prikaz, nic neprovadej
	cbi PORTC,0		;0
	cbi PORTC,1		;0
	cbi PORTC,2		;0
	cbi PORTC,3		;0

	rjmp prijem


;------------------------------------------------------------------------------
;----------- podprogramy ------------------------------------------------------
;------------------------------------------------------------------------------


;------------------- cekej ----------------------
_cekej:
	ldi r19,15		; počet opakování časovače (0,033s) 15

casovac:	
	ldi r17,1		; uložení konstanty periody do registru
	ldi r18,$05		; uložení nastavení předděličky do registru
	out tccr0,r18	; nastavení předděličky
	out tcnt0,r17	; nastavení periody

opak:	in r17,tcnt0	; načtení načítaného stavu, při přetečení =0
		sbic usr,rxc	; cekani na prijem dat
        rjmp prijato
		cpi r17,0	
		brne opak
	
	dec r19			;|
	cpi r19,0		;|-> opakovani časovače
	brne casovac	;|
	
	ret
;------------------- /cekej ---------------------



;------------------- odesli ---------------------
_odesli:			; podprogram pro odeslání byte uloženého v r16
	sbis usr,udre
   	rjmp _odesli

   	out  udr,r16

	ret
;------------------- /odesli --------------------
