// Interrupt Handler
void interrupt()
{
// Timer1 Interrupt - Freq = 254.97 Hz - Period = 0.003922 seconds
if (PIR1.TMR1IF == 1) // timer 1 interrupt flag
{
PORTB.F1 = ~PORTB.F1; // Toggle PORTB bit1 LED
PIR1.TMR1IF = 0; // interrupt must be cleared by software
PIE1.TMR1IE = 1; // reenable the interrupt
TMR1H = 240; // preset for timer1 MSB register, Value TMR1 = 61614
TMR1L = 174; // preset for timer1 LSB register
}
}
// code starts here...
void main()
{
// setup portb to show the interrupts by blibking LEDs
TRISB = 0x00; // PORT is all output...to show the interrupts
PORTB = 0; // start with all outputs low
//Timer1 Registers Prescaler= 1 - TMR1 Preset = 61614 - Freq = 254.97 Hz - Period = 0.003922 seconds
T1CON.T1CKPS1 = 0; // bits 5-4 Prescaler Rate Select bits
T1CON.T1CKPS0 = 0; // bit 4
T1CON.T1OSCEN = 1; // bit 3 Timer1 Oscillator Enable Control bit 1 = on
T1CON.T1SYNC = 1; // bit 2 Timer1 External Clock Input Synchronization Control bit...1 = Do not synchronize external clock input
T1CON.TMR1CS = 0; // bit 1 Timer1 Clock Source Select bit...0 = Internal clock (FOSC/4)
T1CON.TMR1ON = 1; // bit 0 enables timer
TMR1H = 240; // preset for timer1 MSB register
TMR1L = 174; // preset for timer1 LSB register
// Interrupt Registers
INTCON = 0; // clear the interrpt control register
INTCON.TMR0IE = 0; // bit5 TMR0 Overflow Interrupt Enable bit...0 = Disables the TMR0 interrupt
PIR1.TMR1IF = 0; // clear timer1 interupt flag TMR1IF
PIE1.TMR1IE = 1; // enable Timer1 interrupts
INTCON.TMR0IF = 0; // bit2 clear timer 0 interrupt flag
INTCON.GIE = 1; // bit7 global interrupt enable
INTCON.PEIE = 1; // bit6 Peripheral Interrupt Enable bit...1 = Enables all unmasked peripheral interrupts
while(1) //endless loop
{
}
}