' ************************************************************** 
' ******** TIMER 1 INTERRUPT SETUP *********** 
' ************************************************************** 
' 

TIMER1PRE VAR WORD
TMR1TEMP VAR WORD
Out VAR PORTB.1
TMR1SET VAR WORD
Half VAR BYTE
Seconds VAR BYTE

INTCON = %11000000 	'enable global and peripheral interrupts 
PIE1 = %00000001 	'enable timer1 overflow interrupt 
PIR1.0 = 0 			'reset timer1 interrupt flag 
T1CON = %00110001 	'8:1 prescale, internal clk, timer1 on 

TIMER1PRE=3035				'Preset to give 1/2 sec interrupts
TMR1H=TIMER1PRE.Highbyte	'Save Preset value to Timer 1
TMR1L=TIMER1PRE.Lowbyte
Half=0
Seconds=0

ON INTERRUPT GoTo timer_interrupt 

'main routine 

endloop:
IF Seconds=5 Then
	PORTB.0=1
	Else
	PORTB.0=0
EndIF	 
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
Half=Half+1
IF Half>1 Then
	Half=0
	Seconds=Seconds+1
	IF Seconds>10 Then
		Seconds=0
		PulsOut Out,100	 	'pulse led at each 10 seconds
	EndIF
EndIF


Resume 'return from interrupt 

Enable 'reenable interrupts 
