;Automaticke zapnuti hlavnich svetlometu automobilu po zapnuti motoru, zpozdeni zapnuti 5s.
;volba moznosti funkce - kontrolka dobijeni, nebo mereni napeti komparatorem. 
;Program pro procesor PIC12F629 ( respektive PIC12F675 )
;konfiguracni registr
;rezim INTOSC NOCLKOUT, vnitrni oscilator 4MHz (1cyklus=1us),/MCLR=0 iterni reset,Watchdog neaktivni WDT=0
;kalibrace vnitrniho oscilatoru cislo : 37d tj. 25h zapsat na adresu 3FFh ?????
;Je zde vyuzito preruseni od vnitrniho casovace. 8mi bitovy casovac je nastaven s delickou 1:256, tedy 256 * 256 cyklu.
;Program realizuje zapojeni napetoveho komparatoru na vstupech GP0 a GP1.
 
LIST P=12F629							;nastaveni prekladace
include<p12F629.inc>					;definice procesoru
__config _INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _BODEN_OFF & _CP_OFF & _CPD_OFF & _MCLRE_OFF  ;nastaveni konfiguracniho slova

;deklarace promenych pro vstupy a vystupy
Vplus			equ		00h						;Napetovy vstup komparatoru neinvertujici, pin GP0
Vminus			equ		01h						;Napetovy vstup komparatoru invertujici, pin GP1
Volba			equ		02h						;Spinac pro volbu funkce log.0=Dobijeni,log.1=komparator, pin GP2
LedRele			equ		04h						;Led pro zobrazeni stavu casovace a releoveho vystupu, pin GP4
Rele			equ   	05h                 	;Rele pripojene na pinu GP5, log.1 = rele sepnute
;deklarace promenych pro registry a bity
Delka           equ   	20h          			;registr pro delku casovky 0
Delka1          equ   	21h          			;registr pro delku casovky 1
MojeBity        equ   	22h          			;registr pomocnych bitu
Timer0_Bit      equ   	00h           			;pomocny bit, bezi-li jeste casovka 0
Timer1_Bit      equ   	01h           			;pomocny bit, bezi-li jeste casovka 1
Komparator_Bit	equ		02h						;pomocny bit vystupu z komparatoru
Dobijeni_Bit	equ		03h						;pomocny bit pro aktivaci od dobijeni
Komparator_Vyp	equ		04h						;pomocny bit pro urceni pozice Vypnuti,Zapnuti komparatoru
 
;hlavicka po resetu
ORG       00h       
GOTO      Start 
ORG       04h
GOTO      Preruseni

;podprogram preruseni, kde se musi nejprve rozhodnout, co vyvolalo preruseni
Preruseni       BCF     STATUS,RP0             	;BANKA0
				BTFSS	INTCON,T0IF				;kontrola,bylo-li preruseni od casovace
				GOTO	TjumpEnd
				DECFSZ  Delka,01h              	;dekrementuj registr "Delka"
                GOTO    TJump2
                BCF     MojeBity,Timer0_Bit
TJump2			DECFSZ  Delka1,01h             	;dekrementuj registr "Delka"
                GOTO    TJump3
                BCF     MojeBity,Timer1_Bit
TJump3			BCF     INTCON,T0IF				;vynulovani bitu pro preruseni od casovace
TjumpEnd        RETFIE                         	;navrat z preruseni

;hlavni program
Start          	CLRF	 GPIO					;vynulovani portu GPx
				MOVLW    02h
               	MOVWF    CMCON                  ;GP0 a GP1 Analog komparator,GP2-GP5 digital I/O
				BSF      STATUS,RP0             ;BANKA1
               	MOVLW    07h
               	MOVWF    OPTION_REG             ;8bit casovac 0, delicka 1:256, tj. preruseni za 65,5ms
               	MOVLW    07h
               	MOVWF    TRISIO                 ;konfigurace GP0,GP1,GP2,GP3=vstup,GP4,GP5=vystup			
               	;CALL	 3FFh
				;MOVWF	 OSCCAL					;kalibrace vnitrniho oscilatoru 4MHz
				;MOVLW    03h
               	;MOVWF    ANSEL                 ;GP0,GP1 analog,GP2,GP3,GP4 digital I/O pouze pro PIC12F675
				BCF      STATUS,RP0             ;BANKA0
               	MOVLW    0A0h
               	MOVWF    INTCON					;globalni povoleni preruseni casovace 0
;konec konfigurace
				CLRF	MojeBity				;vynulovani pomocnych bitu.
				CLRF	Delka					;vynulovani registru pro delku casovky 0
				CLRF	Delka1					;vynulovani registru pro delku casovky 1
				BCF		GPIO,Rele				;vypnuti rele
				BSF		GPIO,LedRele			;zhasnuti led diody
				BSF		MojeBity,Komparator_Bit	;nastaveni pomocneho bitu komparatoru pro prvni provedeni....

Mereni			BTFSS	GPIO,Volba				;volba funkce vstupu
				GOTO	Dobijeni				;pin GP2 v log.0....vstup od kontrolky dobijeni
				GOTO	Komparator				;pin GP2 v log.1....vstup od mereni napeti komparatorem
;podprogram pro volbu od funkce kontrolky dobijeni
Dobijeni		BTFSC	MojeBity,Dobijeni_Bit
				GOTO	D_Zap_Rele				;skok pokud dobehla casovka1 (5s)
				BSF		GPIO,LedRele			;zhasnuti led diody
				BCF		GPIO,Rele				;vypnuti rele
				MOVLW  	03h						;konstanta 3d tj. 3h pro casovku
				MOVWF   Delka                  	;nastaveni delky casovky 0,2s (3 x 65ms)
               	BSF     MojeBity,Timer0_Bit 
				MOVLW  	4Ch						;konstanta 76d tj. 4Ch pro casovku
				MOVWF   Delka1                 	;nastaveni delky casovky 5s (76 x 65ms)
               	BSF     MojeBity,Timer1_Bit      
D_Zap_BlikLed	BTFSC	MojeBity,Timer0_Bit		;bezi-li casovka, preskoc nastaveni casovky
				GOTO	D_Blik_Led
				MOVLW  	03h						;konstanta 3d tj. 3h pro casovku
				MOVWF   Delka                  	;nastaveni delky casovky 0,2s (3 x 65ms)
               	BSF     MojeBity,Timer0_Bit 
				BTFSC	GPIO,LedRele
				GOTO	D_ClearBit
				BSF		GPIO,LedRele			;zhasnuti Led diody
				GOTO	D_Blik_Led
D_ClearBit		BCF		GPIO,LedRele 			;rozsviceni Led diody
D_Blik_Led		BTFSC	MojeBity,Timer1_Bit		;pokud dobehla casovka 1 (5s), preskoc
				GOTO	D_Zap_BlikLed
D_Zap_Rele		BSF		GPIO,Rele				;sepnuti vystupu pro rele
				BCF		GPIO,LedRele			;rozsviceni led diody
				BSF		MojeBity,Dobijeni_Bit	;nastaveni pomocneho bitu od dobijeni
				BSF		MojeBity,Komparator_Bit	;nastaveni pomocneho bitu pro provedeni nastaveni ...
				GOTO	Mereni					;zpet na mereni	
;konec podprogramu pro volbu od funkce kontrolky dobijeni
	
;podprogram pro volbu od funkce mereni napeti komparatorem				
Komparator		BCF		MojeBity,Dobijeni_Bit	;vynulovani pomocneho bitu pro funkci vstupu dobijeni
				BTFSS	CMCON,COUT				;podle stavu vystupu komparatoru skoc ...
				GOTO	Vypnuti					;je-li vystup komparatoru v log.0
				GOTO	Zapnuti					;je-li vystup komparatoru v log.1
								
Vypnuti			MOVLW  	01h						;konstanta 1d tj. 01h pro casovku pro zakmity vstupniho signalu
				MOVWF   Delka1                  	;nastaveni delky casovky 1s (1 x 65ms)
               	BSF     MojeBity,Timer1_Bit
				BTFSC	MojeBity,Timer1_Bit
				GOTO	$-1						;cekej dokud nedobehne casovka pro zakmit vstupniho signalu	
				BTFSC	CMCON,COUT				;podle stavu vystupu komparatoru skoc ...
				GOTO	Mereni
				BTFSC	MojeBity,Komparator_Vyp	;testovani, v kterem modu byl komparator
				BSF		MojeBity,Komparator_Bit	;nastaveni pomocneho bitu pro provedeni nastaveni ...
				BTFSS	MojeBity,Komparator_Bit	;bylo-li jiz provedeno nastaveni, preskoc
				GOTO	Vyp_BlikLed				;jinak cekej na mereni komparatoru
				BCF		GPIO,Rele				;deaktivace vystupu na rele
				BSF		GPIO,LedRele			;zhanuti led
				BCF		MojeBity,Komparator_Bit	;vynulovani pomocneho bitu komparatoru po provedeni nastaveni ...
               	BCF     MojeBity,Timer0_Bit     ;vynulovani pomocneho bitu casovky 0
				BCF		MojeBity,Komparator_Vyp	;vynulovani pomocneho bitu pro urceni komparatoru vypnuto,zapnuto
Vyp_BlikLed    	BTFSC	MojeBity,Timer0_Bit		;bezi-li casovka, preskoc nastaveni casovky
				GOTO	Mereni
				MOVLW  	0Fh						;konstanta 15d tj. 0Fh pro casovku
				MOVWF   Delka                  	;nastaveni delky casovky 1s (15 x 65ms)
               	BSF     MojeBity,Timer0_Bit      
				BTFSC	GPIO,LedRele
				GOTO	K_ClearBit
				BSF		GPIO,LedRele
				GOTO	Mereni
K_ClearBit		BCF		GPIO,LedRele  				
				GOTO	Mereni					;opakuj mereni a hlidani vystupu z komparatoru	

Zapnuti			MOVLW  	01h						;konstanta 1d tj. 01h pro casovku pro zakmity vstupniho signalu
				MOVWF   Delka                  	;nastaveni delky casovky 1s (1 x 65ms)
               	BSF     MojeBity,Timer0_Bit
				BTFSC	MojeBity,Timer0_Bit
				GOTO	$-1						;cekej dokud nedobehne casovka pro zakmit vstupniho signalu	
				BTFSS	CMCON,COUT				;podle stavu vystupu komparatoru skoc ...
				GOTO	Mereni
				BTFSS	MojeBity,Komparator_Vyp	;testovani, v kterem modu byl komparator
				BSF		MojeBity,Komparator_Bit	;nastaveni pomocneho bitu pro provedeni nastaveni ...
				BTFSS	MojeBity,Komparator_Bit	;bylo-li jiz provedeno nastaveni, preskoc
				GOTO	Mereni					;jinak cekej na mereni komparatoru
				BSF		MojeBity,Komparator_Vyp	;nastaveni pomocneho bitu pro urceni komparatoru vypnuto,zapnuto
				MOVLW  	03h						;konstanta 3d tj. 3h pro casovku
				MOVWF   Delka                  	;nastaveni delky casovky 0,2s (3 x 65ms)
               	BSF     MojeBity,Timer0_Bit 
				MOVLW  	4Ch						;konstanta 76d tj. 4Ch pro casovku
				MOVWF   Delka1                 	;nastaveni delky casovky 5s (76 x 65ms)
               	BSF     MojeBity,Timer1_Bit      
Zap_BlikLed		BTFSC	MojeBity,Timer0_Bit		;bezi-li casovka, preskoc nastaveni casovky
				GOTO	Blik_Led
				MOVLW  	03h						;konstanta 3d tj. 3h pro casovku
				MOVWF   Delka                  	;nastaveni delky casovky 0,2s (3 x 65ms)
               	BSF     MojeBity,Timer0_Bit 
				BTFSC	GPIO,LedRele
				GOTO	K_ClearBit1
				BSF		GPIO,LedRele			;zhasnuti Led diody
				GOTO	Blik_Led
K_ClearBit1		BCF		GPIO,LedRele 			;rozsviceni Led diody
Blik_Led		BTFSC	MojeBity,Timer1_Bit		;pokud dobehla casovka 1 (5s), preskoc
				GOTO	Zap_BlikLed				
				BTFSS	CMCON,COUT				;kontrola vystupu komparatoru pro aktivaci led a rele
				GOTO	Mereni
				BSF		GPIO,Rele				;aktivace vystupu na rele.
				BCF		GPIO,LedRele			;rozsviceni led
				BCF		MojeBity,Komparator_Bit	;vynulovani pomocneho bitu komparatoru po provedeni....
				GOTO	Mereni					;opakuj mereni a hlidani vystupu z komparatoru	
;konec podprogramu pro volbu od funkce mereni napeti komparatorem		

END
