// PIC18 in C - Versione 0.2 - Ottobre 2014 // Copyright (c) 2014, Vincenzo Villa // Creative Commons | Attribuzione-Condividi allo stesso modo 3.0 Unported. // Creative Commons | Attribution-Share Alike 3.0 Unported // https://www.vincenzov.net/tutorial/PIC18/interrupt.htm // Reference: PIC18F14K50 data sheet (note: page as DS41350C printed edition) // [1] REGISTER 9-12: TRISC: PORTC TRI-STATE REGISTER - Page 90 // [2] REGISTER 7-10: RCON: RESET CONTROL REGISTER - Page 74 // [3] REGISTER 7-3: INTCON3: INTERRUPT CONTROL 3 REGISTER - Page 67 // [4] REGISTER 7-2: INTCON2: INTERRUPT CONTROL 2 REGISTER - Page 66 // [5] REGISTER 9-11: PORTC: PORTC REGISTER - Page 90 // [6] REGISTER 9-15: ANSEL: ANALOG SELECT REGISTER 1 - Page 94 #include "configurationsbits.h" void interrupt __high_priority my_isr_h(void) { if (INTCON3bits.INT1F == 1) { // INT1 external interrupt occurred ? [3] PORTCbits.RC0 = 0; // Turn off RC0 pin [5] INTCON3bits.INT1F = 0; // Clear INT1 flag [3] } // if (XXX.flag == 1) { // XXX interrupt occurred ? NOT USED HERE // ... // XXX.flag = 0; // Clear XXX flag [3] // } return; } // Low priority interrupt - NOT USED HERE // void interrupt __low_priority my_isr_l(void) { // if (...) { // ... // } // return; // } void main(void) { TRISCbits.RC0 = 0; // Set RC0 pin as output [1] PORTCbits.RC0 = 1; // Turn on RC0 pin [5] TRISCbits.RC1 = 1; // Set RC1 pin as input [1] ANSELbits.ANS5 = 0; // Digital input buffer of RC1 is enabled [6] RCONbits.IPEN = 1; // Enable priority levels on interrupts [2] INTCON3bits.INT1IP = 1; // INT1 External Interrupt Priority set to High [3] INTCON2bits.INTEDG1 = 0; // INT1 on falling edge [4] INTCON3bits.INT1E = 1; // Enables the INT1 external interrupt [3] INTCON3bits.INT1F = 0; // Clear INT1 flag [3] INTCONbits.GIEL = 1; // Enables all low priority interrupts while (1); // Do nothing, forever }