Capítulo 7: Interrupciones externas

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:

interrupt_port_B.pdf

INTCON: Interrupt control register

intcon2

INTCON2: Interrupt control register 2

intcon3

INTCON3: Interrupt control register 3

Marcar el Enlace permanente.

No se admiten más comentarios