
		
		List	p=16F628A		;Processor Type
		include	"P16F628A.INC"	;



			__config _CP_OFF&_LVP_OFF&_WDT_OFF&_XT_OSC

		cblock 0x70      						;variables
		it_cnt								;1 sec counter
		second								;second counter
		flag
		W_TEMP								;W temp while It
		STATUS_TEMP							;Status temp while It
		endc
#define tick flag,0		

			org	0x00				; RESET	vector
			goto	Init
			org	0x04
			goto	Inter			; IT Vector

;IT rutin							; This function is called every time
									; if the timer1 overflows (65535->0).

Inter		movlw	low .15542
			movwf	TMR1L			;Load  TMR1L Low part
			movlw	high .15542
			movwf	TMR1H			;Load  TMR1L High part
			bcf		PIR1,TMR1IF		;Clear TMR1 IT Flag
			bsf		tick			; Set Tick bit
			retfie

;Main program

Init		movlw	0x07
			movwf	CMCON
			clrf 	PORTB			;Clear RB
			bsf		STATUS,RP0		;Bank 1 select
			clrf	TRISB			;RB output
			bsf		PIE1,TMR1IE		;enable TMR1IT
			bcf		STATUS,RP0		;Bank 1 select
			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

Loop		nop
			btfss	tick			;Tick = 1?
			goto	Loop			;	
			bcf		tick			;clear tick bit
			decfsz	it_cnt,f		; decrement IT cntr
			goto	Loop
			incf	second,f		;increment second cntr
			movfw	second			;
			movwf	PORTB			; same display
			movlw	.20
			movwf	it_cnt			;load IT counter
			goto	Loop
			end						;The end