How do I write interrupt routines in XC8?

This content is for an older version of the MPLAB® XC8 Compiler. Section 5.8.1 of the current MPLAB XC8 C Compiler User Guide for PIC MCUs details the proper way to write interrupt routines today. The User Guide may be downloaded from the MPLAB XC Compilers page of our main website.

The content on this page is in the process of being rewritten to reflect the changes.

In MPLAB® XC8 C source code, a function can be written to act as the Interrupt Service Routine (ISR) by using the interrupt qualifier. Most baseline PIC® devices do not implement interrupts at all; mid-range devices utilize a single interrupt vector. PIC18 devices implement two separate interrupt vector locations and use a simple priority scheme to declare a function qualified with the interrupt keyword and the compiler will place it in the right place and take care of saving any used registers and its restoration.

An interrupt function must be declared as a type void interrupt and cannot have parameters. On PIC18 devices, interrupt functions default to being a high priority. To create a low-priority interrupt function, use the qualifier low_priority in addition to interrupt in the function definition.

Here's an example of a program for a mid-range PIC MCU that uses interrupts:

For an enhanced 8-bit MCU that uses interrupts (Using High and Low priority):

© 2024 Microchip Technology, Inc.
Notice: ARM and Cortex are the registered trademarks of ARM Limited in the EU and other countries.
Information contained on this site regarding device applications and the like is provided only for your convenience and may be superseded by updates. It is your responsibility to ensure that your application meets with your specifications. MICROCHIP MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND WHETHER EXPRESS OR IMPLIED, WRITTEN OR ORAL, STATUTORY OR OTHERWISE, RELATED TO THE INFORMATION, INCLUDING BUT NOT LIMITED TO ITS CONDITION, QUALITY, PERFORMANCE, MERCHANTABILITY OR FITNESS FOR PURPOSE. Microchip disclaims all liability arising from this information and its use. Use of Microchip devices in life support and/or safety applications is entirely at the buyer's risk, and the buyer agrees to defend, indemnify and hold harmless Microchip from any and all damages, claims, suits, or expenses resulting from such use. No licenses are conveyed, implicitly or otherwise, under any Microchip intellectual property rights.