; S_ora_prog.asm Elkészült: 
; Készítette: Kiss László
; Utolsó módosítás: 2011.10.19
; Óra program
; Ver:0.1
; MCU: 16F887


	include header.inc

	CBLOCK 0X20
	
	ORA_SZ
	PERC_SZ
	MASODP_SZ
	TIZED_SZ
	ORA_A
	PERC_A
	TIZED_A
	IDO_ORA
	IDO_PERC
	IDO_MASODP
	
	ENDC

	CBLOCK 0X70
	Wsave
	Ssave
	ENDC

	ORG 0X00

	goto	S_INI

	org	0x004
	movwf	Wsave
	movf	STATUS,w
	clrf	STATUS
	movwf	Ssave

	btfss	PIR1,TMR2IF
	goto	IntEx

	bcf		PIR1,TMR2IF
S_ORA_SZAMOL
	DECFSZ	TIZED_SZ,F						; csökkentem a tizedmásodperc számlálót
	goto	T2IntEx							; ha még nem 0, vissza a főprogramba
	MOVF	TIZED_A,W						; visszatöltöm a kezdeti értéket,
	MOVWF	TIZED_SZ						; és végigcsinálom a többi számlálóval is.
	
	DECFSZ	MASODP_SZ,F						; csökkentem a másodperc számlálót
	goto	T2IntEx
	MOVF	PERC_A,W
	MOVWF	MASODP_SZ
	
	DECFSZ	PERC_SZ,F						; csökkentem a perc számlálót
	goto	T2IntEx
	MOVF	PERC_A,W
	MOVWF	PERC_SZ
	
	DECFSZ	ORA_SZ,F
	goto	T2IntEx
	MOVF	ORA_A,W
	MOVWF	ORA_SZ

T2IntEx

IntEx
	movf	Ssave,w
	movwf	STATUS
	swapf	Wsave,f
	swapf	Wsave,w
	retfie
	
S_INI
	MOVLW	.60
	MOVWF	PERC_A
	MOVWF	MASODP_SZ
	MOVWF	PERC_SZ
	MOVLW	.250							; 250*4 ms = 1 sec 
	MOVWF	TIZED_A							; 
	MOVWF	TIZED_SZ
	MOVLW	.24
	MOVWF	ORA_A
	MOVWF	ORA_SZ
	CLRF	IDO_MASODP
	CLRF	IDO_PERC
	CLRF	IDO_ORA

	banksel PR2
	MOVLW	.250-1
	MOVWF	PR2								; ~4 ms
	BSF		PIE1,TMR2IE

	banksel T2CON
	MOVLW	B'00100110'						;1:16 előosztó, 1:5 utóosztó
	MOVWF	T2CON

	bsf		INTCON,PEIE
	BSF		INTCON,GIE
;	BSF		T2CON,TMR2ON					; óra indul
	
S_MAIN	
	MOVF	ORA_SZ,W
	SUBWF	ORA_A,W							;kivonom a maradék időt az alapértékből ez adja meg a valós értéket.
	MOVWF	IDO_ORA
	MOVF	PERC_SZ,W
	SUBWF	PERC_A,W
	MOVWF	IDO_PERC
	MOVF	MASODP_SZ,W
	SUBWF	PERC_A,W
	MOVWF	IDO_MASODP
TELIK
	GOTO	S_MAIN
	
	
	
	END
