On_Hardware_Interrupt
Source: Positron8 Compiler User Manual, PDF page 466
Syntax
On_Hardware_Interrupt Label
Overview
Point to the subroutine that will be called when an interrupt occurs. It is used for a High Priority interrupt if using an 18F device.
Parameters
Label is a valid label name that points to where the interrupt handler routine is located in the BASIC listing.
Example
' Flash an LED on PORTB.0 at a different rate to the LED on PORTB.1
'
Device = 16F1829
' Select the device to compile for
Declare Xtal = 16
' Tell the compiler the device will be operating at 16MHz
On_Hardware_Interrupt GoTo ISR_Flash
'---------------------------------------------------
' The main program loop starts here
'
Main:
Low PORTB = 0
' Make PORTB all outputs and pull it low
'
' Initiate the interrupt
'
OPTION_REG = 0b00101111
' Setup Timer0
TMR0 = 0
' Clear TMR0 initially
INTCONbits_T0IE = 1
' Enable a Timer0 overflow interrupt
INTCONbits_GIE = 1
' Enable global interrupts
Do
' Create an infinite loop
Clear PORTB.1
' Extinguish the LED
DelayMs 500
' Wait a while
Set PORTB.1
' Illuminate the LED
DelayMs 500
' Wait a while
Loop
'---------------------------------------------------
' Timer0 overflow interrupt handler starts here
' Xor PORTB with 1, which will turn on the LED connected to PORTB.0
' with one interrupt and turn it off with the next interrupt
'
ISR_Flash:
Context Save
' Save any variables or SFRs before the interrupt starts
If INTCONbits_T0IF = 1 Then ' Is it TMR0 that caused the interrupt?
PORTB = PORTB ^ 1
' Yes. So. Xor PORTB.0
INTCONbits_T0IF = 0
' Clear the TMR0 overflow flag
EndIf
Context Restore ' Restore any variables or SFRs and exit the interrupt