' ************************************************************** 
' ******** TIMER 1 INTERRUPT SETUP *********** 
' ************************************************************** 
' 

TIMER1PRE VAR WORD
TMR1TEMP VAR WORD
Drive VAR PORTB.1
TMR1SET VAR WORD
Quarter VAR BYTE
Sec VAR BYTE
Tick VAR BIT

INTCON = %11000000 'enable global and peripheral interrupts 
PIE1 = %00000001 'enable timer1 overflow interrupt 
PIR1.0 = 0 'reset timer1 interrupt flag 
TIMER1PRE=3035				'Preset to give 1/4 sec interrupts
TMR1H=TIMER1PRE.Highbyte	'Save Preset value to Timer 1
TMR1L=TIMER1PRE.Lowbyte
T1CON = %00110001 '8:1 prescale, internal clk, timer1 on
Quarter=0
Sec=0


ON INTERRUPT GoTo timer_interrupt 

'main routine 

endloop: 


GoTo endloop 

' 
'Timer1 interrupt routine 
' 
' 
'note 
' "disable" and "enable" are compiler directives that say 
'"do not insert interrupt checking between these two statements" 
' so basically they just need to bracket the interrupt routine 

Disable 'disable further interrupts 

timer_interrupt: 

	PIR1.0 = 0 				'reset timer1 interrupt flag 
	TMR1TEMP.Lowbyte = TMR1L
	TMR1TEMP.Highbyte = TMR1H
	TMR1SET=TIMER1PRE+TMR1TEMP
	TMR1L=TMR1SET.Lowbyte
	TMR1H=TMR1SET.Highbyte
	Quarter=Quarter+1
	IF Quarter>3 Then
	Quarter=0
	Sec=Sec+1
		IF Sec>59 Then
		Sec=0
		EndIF
	EndIF
	IF (Sec>3) AND(Sec<=13) Then
	Drive=1
	Else
	Drive=0
	EndIF
	PulsOut PORTB.0,50	 'pulse led at each interrupt
	T1CON = %00110001 		'8:1 prescale, internal clk, timer1 on
	Resume 'return from interrupt!
	
Enable 'reenable interrupts 


End

 


 






