Un pulsador en pull-up conectado al PIN_B7 interrumpe el bucle infinito while(1) para encender un LED (PIN_C6) cuando lo pulsamos y apagarlo cuando lo soltamos.
Código fuente: interrupcion_externa.c
En el puerto B tenemos varios tipos de interrupciones externas:
Interrupciones por flanco: INT0 (PIN_B0), INT1 (PIN_B1) y INT2 (PIN_B2). Cada una se puede configurar de manera independiente, es decir, cada una tiene su propio «flag», que puede saltar en el flanco de subida o en el de bajada, según se quiera.
Interrupciones por nivel: la interrupción saltaría ante cualquier cambio de nivel en cualquiera de los 4 puertos: RB4-RB7. Por eso es importante comprobar dentro de la subrutina de interrupción qué puerto es el que ha cambiado.
Registros a tener en cuenta para configurar interrupciones por nivel:
INTCONbits.GIE: Habilita las interrupciones.
INTCONbits.RBIE: Habilita interrupciones por nivel, RB4-RB7.
INTCONbits.RBIF: Indicador de bandera (flag), se pone a uno cuando salta la interrupción de nivel.
Apuntes detallados de cómo configurar interrupciones externas, tanto las de flanco como las de nivel: