I need to add an Interrupt Service Routine (ISR) to existing code in C for a PIC18F4620 and a PIC18F46K22. As you can see in section 9 (of both datasheets), these devices have multiple interrupt vectors: 0x0008
for high priority interrupts, 0x0018
for low priority interrupts.
I'd like to have an answer which is useful in many cases, so the question would be: how can I make a function on a specific program memory address? For the ISR, this address would be 0x0008
or 0x0018
.
If it's of any use, I'm using the MPLAB C18 compiler, v3.44.
Related: C coding design – function pointers?
Best Answer
You'll find the information you need in the compiler's manual: MPLAB C18 C COMPILER USER'S GUIDE.
From page 37 of the user's guide:
When implementing a high priority ISR, you cannot use the
interrupthigh
pragma as you would expect. You'll have to use theinterrupt
pragma instead, as is described here.If you can change the compiler: using interrupts is easier in the Microchip XC8 or HI-TECH PICC compilers.