	list	p=16f84A, R=DEC
	include	"p16f84A.inc"

;nastaveni oscilatoru 4Mhz,spozdeni pri startu,WDT OFF, CP OFF
	__CONFIG    _XT_OSC & _PWRTE_ON & _WDT_OFF & _CP_OFF


;nastaveni registru
	cblock	0x0C
	POCT1
	POCT2
	POCT3
	endc

;init
	org 0x00
;-------------------- incializace -----------------------
INIT

	BSF		STATUS,5		;banka 1, nastaveni I/O
	MOVLW	b'00000'	;vse vystup
	MOVWF	TRISA		;a je to
	MOVLW	b'00000000'	;bude vystup i na B
	MOVWF	TRISB		;jsou tam
	BCF		STATUS,5		;zpet banka 0, ovladani portu
	
	
	banksel	OPTION_REG		;vyber banky	
	movlw	b'00000000'
	movwf	OPTION_REG
	banksel	0				;vyber banky
	
;-------------------- P R O G R A M --------------------
MAIN
	CALL		Cervena1		;sviti cervena pro smer 1
	CALL		Cervena2		;sviti cervena i pro smer 2

	CALL		Pauza

	CALL		Cervenozluta1		;rozjizdime smer 1
	CALL		PauzaK			;jen chvilku

	CALL		Zelena1			;jede smer 1
	CALL		Pauza

	CALL		Zluta1			;zavirame smer 1
	CALL		PauzaK

	CALL		Cervena1		;zase stoji vsechno
	CALL		Pauza

	CALL		Cervenozluta2		;rozjizdime druhy smer
	CALL		PauzaK

	CALL		Zelena2			;jede druhy smer
	CALL		Pauza

	CALL		Zluta2			;zastavujeme
	CALL		PauzaK

	;ted nasleduji znovu cervene v obou smerech
	;takovou situaci mame uz na zacatku programu
	;odkazeme tedy jen na zacatek

	GOTO 		MAIN

;------------------- R U T I N Y ---------------------------
	
Zelena1					;SVITI ZELENA VE SMERU 1
	MOVLW		b'00001'	;zelena na port RA0
	MOVWF		PORTA		;je tam
	RETURN

Cervenozluta1				;SVITI ZELENOZLUTA VE SMERU 1
	MOVLW		b'00110'	;zelenozluta na RA0, RA1
	MOVWF		PORTA		;je tam
	RETURN

Cervena1				;SVITI CERVENA VE SMERU 1
	MOVLW		b'00100'	;bude cervena
	MOVWF		PORTA		;a je tam
	RETURN

Zluta1					;SVITI ZLUTA VE SMERU 1
	MOVLW		b'00010'	;bude zluta
	MOVWF		PORTA		;je tam
	RETURN

Zelena2					;SVITI ZELENA VE SMERU 2
	MOVLW		b'00000001'	;bude zelena 2
	MOVWF		PORTB		;je tam (?)
	RETURN

Cervenozluta2				;SVITI ZELENOZLUTA VE SMERU 2
	MOVLW		b'00000110'	;bude zelenozluta 2
	MOVWF		PORTB		;je tam (?)
	RETURN

Cervena2				;SVITI CERVENA VE SMERU 2
	MOVLW		b'00000100'	;bude zelena 2
	MOVWF		PORTB		;je tam (?)
	RETURN

Zluta2					;SVITI ZLUTA VE SMERU 2
	MOVLW		b'00000010'	;bude zelena 2
	MOVWF		PORTB		;je tam (?)
	RETURN

Pauza					;RUTINA PAUZA, DELSI

	MOVLW		h'FF'		;předplnění W 255ti
	MOVWF		POCT1		;předání 255 z W do smyckovaciho registru 1
	MOVWF		POCT2		;předání 255 z W do smyčkovacího registru 2
	MOVLW		h'08'		;zpoždění, kvůli rychlému oscilátoru, tady někde bych hledal problém
	MOVWF		POCT3		;třetí, oscilátorová smyčka

SMYCKA1
	DECFSZ		POCT1,1		;zpoždění
	GOTO 		SMYCKA1		
	DECFSZ		POCT2,1		
	GOTO		SMYCKA1		
	DECFSZ		POCT3,1		
	GOTO		SMYCKA1		
	
	RETURN

PauzaK					;RUTINA PAUZA, KRATSI

	MOVLW		h'FF'		;předplnění W 255ti
	MOVWF		POCT1		;předání 255 z W do smyckovaciho registru 1
	MOVWF		POCT2		;předání 255 z W do smyčkovacího registru 2
	MOVLW		h'08'		;zpoždění, kvůli rychlému oscilátoru, tady někde bych hledal problém
	MOVWF		POCT3		;třetí, oscilátorová smyčka

SMYCKA2
	DECFSZ		POCT1,1		;zpoždění
	GOTO 		SMYCKA2		
	DECFSZ		POCT2,1		
	GOTO		SMYCKA2		
	DECFSZ		POCT3,1		
	GOTO		SMYCKA2		
	
	RETURN

	
	END
