REGISTROS DE INTERRUPCIÓN Y BANDERAS
Cada causa de interrupción actúa con dos señales. Una de ellas actúa como
señalizador o bandera que indica si se ha producido o no la interrupción, mientras que la
otra funciona como permiso o prohibición de la interrupción en sí. Los PIC 16C84 y
16C71 disponen de 4 fuentes de interrupción válidas o no por la puesta a 1 de los
correspondientes bits del registro INTCON (0x0B ó 0x8B).
GIE
EEIE/
ADIE
T0IE
INTE
RBIE
T0IF
INTF
Bit 0
registro INTCON
RBIF
Bit 7
El bit GIE (Global Interrupt Enable) habilita todas las interrupciones. Cada tipo de interrupción
tiene, a su vez, otro bit que la habilita o deshabilita. Las interrupciones son capaces de despertar al chip de
su estado de reposo. El bit GIE se borra en cuanto se está atendiendo una interrupción, para evitar que se
atienda otra. Volverá a valer 1 si se vuelve de la interrupción mediante RETFIE, como ya ha sido
explicado varias veces. Preferimos reiterarnos por ser motivo de posibles problemas.
Todas las interrupciones saltan a la dirección 0x04, por lo que será labor del programador
identificar la causa de interrupción.
El bit RBIE habilita la interrupción RB, es decir, interrupción ante cambios en las patas RB4-RB7.
RBIF es la bandera que indica que se ha producido esta interrupción.
El bit INTE activa la interrupción por la pata INT/RB0. El bit INTF es la bandera que indica si se
ha producido esta interrupción.
El bit T0IE habilita la interrupción por desbordamiento del TMR0. El bit T0IF es la bandera que
indica si se ha producido la interrupción.
El bit 6 del registro INTCON es distinto para el 16C71 (ADIE) y para el 16C84 (EEIE). En el
16C71 activa las interrupciones procedentes del conversor A/D, y el 16C84 las procedentes de la
E2PROM. Sus respectivas banderas están en el registro ADCON1 ó EECON1.
EJEMPLO DEL MANEJO DE INTERRUPCIONES. EL TMR0.
Vamos a hacer en el programa parpadeo.asm que, gracias a la interrupción del
TMR0, que un LED parpadee con una frecuencia de 200 ms. Una vez inicializadas las
puertas, el predivisor de TMR0 se carga con 78 y se habilita la interrupción (GIE+T0IE)
El número de cuentas es FF-N, siendo N el número con el que se carga TMR0.
Como se carga con 78, N= 256-78=178. Si ponemos el divisor de frecuencia del TMR0
a 128 (bit PS0, PS1 y PS2 del registro OPTION a 1 1 0) y con un oscilador de 4 MHz,
donde el ciclo de instrucción es de un µsegundo, ocurre que...
Tiempo Total = N * valor predivisor * ciclo instrucción
65