TRY
Code:
@ __CONFIG _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON
CMCON=7
TRISA=0
TRISB=0
PORTA=0
PORTB=0
PIE1 = %00000010
'0------- Disable EE write complete interrupt
'-0------ Disable comparator interrupt
'--0----- Disable USART receive interrupt
'---0---- Disable USART transmit interrupt
'----x--- unimplemented
'-----0-- Disable CCP1 interrupt
'------1- Enable TMR2 to PR2 match interrupt
'-------0 Disable TMR1 overflow interrupt
T2CON = %00000010
'X------- Unimplemented
'-0000--- postscale 1:1
'-----0-- Timer2 off
'------10 prescaler 1:16
GIE VAR INTCON.7
PEIE VAR INTCON.6
TMR2IF VAR PIR1.1
TMR2ON VAR T2CON.2
RELOAD CON 131
ON INTERRUPT GOTO ISR
TMR2 = RELOAD
PR2 = 0
PEIE = 1 ' Enable peripheral interupt
GIE = 1 ' enable Global interrupt
TMR2ON = 1 ' TMR2 ON
GOTO LOOP
disable
ISR:
TOGGLE PORTB.0
TMR2ON = 0
TMR2 = RELOAD
TMR2ON = 1
TMR2IF = 0 ' Clear interrupt flag
resume
enable
LOOP:
'TOGGLE PORTB.1
GOTO LOOP
or another variant of
Code:
@ __CONFIG _INTRC_OSC_NOCLKOUT & _MCLRE_ON & _LVP_OFF & _WDT_OFF & _PWRTE_ON & _BODEN_ON
CMCON=7
TRISA=0
TRISB=0
PORTA=0
PORTB=0
PIE1 = %00000010
'0------- Disable EE write complete interrupt
'-0------ Disable comparator interrupt
'--0----- Disable USART receive interrupt
'---0---- Disable USART transmit interrupt
'----x--- unimplemented
'-----0-- Disable CCP1 interrupt
'------1- Enable TMR2 to PR2 match interrupt
'-------0 Disable TMR1 overflow interrupt
T2CON = %00000010
'X------- Unimplemented
'-0000--- postscale 1:1
'-----0-- Timer2 off
'------10 prescaler 1:16
GIE VAR INTCON.7
PEIE VAR INTCON.6
TMR2IF VAR PIR1.1
TMR2ON VAR T2CON.2
ON INTERRUPT GOTO ISR
PR2 = 124 ' load period register for 2mSec
PEIE = 1 ' Enable peripheral interupt
GIE = 1 ' enable Global interrupt
TMR2ON = 1 ' TMR2 ON
GOTO LOOP
disable
ISR:
TOGGLE PORTB.0
TMR2IF = 0 ' Clear interrupt flag
resume
enable
LOOP:
'TOGGLE PORTB.1
GOTO LOOP
The second one is probably the best method to deal with Timer2. have a look to section 6.0 of your datasheet.
Bookmarks