LIST P=16F627
#INCLUDE "P16F627.INC"
__CONFIG _INTRC_OSC_NOCLKOUT & _CP_OFF & _WDT_OFF & _MCLRE_OFF & _LVP_OFF

; Változók deklarálása
CBLOCK	0x70
	MPERC1		; másodperc első számjegye
	MPERC10		; másodperc második számjegye
	PERC1		; perc első számjegye
	PERC10		; perc második számjegye
	ORA1		; óra első számjegye
	ORA10		; óra második számjegye
	; Időzítéshez használt változók
	COUNT1
	COUNT2
	; TIMER
	it_cnt						;1 sec counter
	second						;second counter
	min							;minute counter
	hour						;hour counter
	flag						;for tick & other flags
	W_TEMP						;W temp while It
	STATUS_TEMP					;Status temp while It
ENDC
#define tick flag,0	

ORG	0
	GOTO	START

ORG	4
	Inter
	movlw	low .15542
	movwf	TMR1L			;Load  TMR1L Low part of TMR1 value
	movlw	high .15542
	movwf	TMR1H			;Load  TMR1L High part of TMR1 value
	bcf		PIR1,TMR1IF		;Clear TMR1 IT Flag
	bsf		tick			; Set Tick bit
	retfie

START
	; PORTA
	MOVLW	B'00000111'
	MOVWF	CMCON
	BSF		STATUS,RP0
	MOVLW	B'10000'
	MOVWF	TRISA
; TIMER bekapscolása
bsf		PIE1,TMR1IE		;enable TMR1IT
	; PORTB
	MOVLW	B'11000000'
	MOVWF	TRISB
	BCF 	STATUS,RP0
; TIMER bekapcsolása
movlw	.20
movwf	it_cnt			;load IT counter
clrf	second			; clear second cntr
clrf	flag			; clear tick bit
movlw	low .15542		;Load  TMR1L Low part
movwf	TMR1L
movlw	high .15542
movwf	TMR1H			;Load  TMR1L High part
movlw	b'00000001'		;TMR1 Clk intern, prescaler 1, enable 
movwf	T1CON			;
movlw	b'11000000'
movwf	INTCON			;Enable GIE, PIE

	; Változók nullázása
	CLRF	MPERC1
	CLRF	MPERC10
	CLRF	PERC1
	CLRF	PERC10
	CLRF	ORA1
	CLRF	ORA10

KIIR
	CALL	KIIR1
	; Timeres rész
	btfss	tick			;Tick = 1?
	goto	KIIR			;	
	bcf		tick			;clear tick bit
	decfsz	it_cnt,f		;decrement IT cntr
	goto	KIIR
	movlw	.20
	movwf	it_cnt			;load IT counter
	;incf	second,f		;increment second cntr
	CALL	NOVEL
GOTO	KIIR

KIIR1		; Adatok kiírása
	; másodperc
	call	TORLES
	MOVLW	B'11111110'
	MOVWF	PORTB
	MOVF	MPERC1,W
	MOVWF	PORTA
	call	TORLES
	MOVLW	B'11111101'
	MOVWF	PORTB
	MOVF	MPERC10,W
	MOVWF	PORTA
	; perc
	call	TORLES
	MOVLW	B'11111011'
	MOVWF	PORTB
	MOVF	PERC1,W
	MOVWF	PORTA
	call	TORLES
	MOVLW	B'11110111'
	MOVWF	PORTB
	MOVF	PERC10,W
	MOVWF	PORTA
	; óra
	call	TORLES
	MOVLW	B'11101111'
	MOVWF	PORTB
	MOVF	ORA1,W
	MOVWF	PORTA
	call	TORLES
	MOVLW	B'11011111'
	MOVWF	PORTB
	MOVF	ORA10,W
	MOVWF	PORTA
	RETURN

TORLES		; kijelző törlése, hogy ne legyen áthallás
	MOVLW	B'111111'
	MOVWF	PORTB
	MOVLW	B'0000'
	MOVWF	PORTA
	return

NOVEL		; Idő növelése
	MOVFW	MPERC1
	XORLW	B'1001'
	BTFSS	STATUS,Z
	GOTO	KISEBBMPERC1
	GOTO	NAGYOBBMPERC1
	KISEBBMPERC1
	INCF	MPERC1,F
	GOTO	TOVABB1
	NAGYOBBMPERC1
	CLRF	MPERC1
	MOVFW	MPERC10
	XORLW	B'0101'
	BTFSS	STATUS,Z
	GOTO	KISEBBMPERC10
	GOTO	NAGYOBBMPERC10
	KISEBBMPERC10
	INCF	MPERC10,F
	GOTO	TOVABB1
	NAGYOBBMPERC10
	CLRF	MPERC10
	MOVFW	PERC1
	XORLW	B'1001'
	BTFSS	STATUS,Z
	GOTO	KISEBBPERC1
	GOTO	NAGYOBBPERC1
	KISEBBPERC1
	INCF	PERC1,F
	GOTO	TOVABB1
	NAGYOBBPERC1
	CLRF	PERC1
	MOVFW	PERC10
	XORLW	B'0101'
	BTFSS	STATUS,Z
	GOTO	KISEBBPERC10
	GOTO	NAGYOBBPERC10
	KISEBBPERC10
	INCF	PERC10,F
	GOTO	TOVABB1
	NAGYOBBPERC10
	CLRF	PERC10
	MOVFW	ORA10
	XORLW	B'0010'
	BTFSS	STATUS,Z
	GOTO	ORA10NULLAEGY
	GOTO	ORA10KETTO
	ORA10NULLAEGY
	MOVFW	ORA1
	XORLW	B'1001'
	BTFSS	STATUS,Z
	GOTO	ORA1KISEBB1
	GOTO	ORA1NAGYOBB1
	ORA1KISEBB1
	INCF	ORA1,F
	GOTO	TOVABB1
	ORA1NAGYOBB1
	CLRF	ORA1
	INCF	ORA10,F
	GOTO	TOVABB1
	ORA10KETTO
	MOVFW	ORA1
	XORLW	B'0100'
	BTFSS	STATUS,Z
	GOTO	ORA1KISEBB2
	GOTO	ORA1NAGYOBB2
	ORA1KISEBB2
	INCF	ORA1,F
	GOTO	TOVABB1
	ORA1NAGYOBB2
	CLRF	MPERC1
	CLRF	MPERC10
	CLRF	PERC1
	CLRF	PERC10
	CLRF	ORA1
	CLRF	ORA10
	GOTO	TOVABB1
	TOVABB1
	RETURN

; Itt lesz a gombok vizsgálata

END