Capítulo 3. PRINCIPALES REGISTROS DE CONTROL Y MANEJO DE LAS ME-
3.4. Registro para controlar las interrupciones
Los PIC16F87x tienen muchas causas que pueden originar una interrupción; 14 posibles causas tie- nen los de 28 patitas y 15 los de 40. Al aceptarse una interrupción se salva el valor del PC en la Pi- la y se carga aquel con el valor 0004h, que es el Vector de Interrupción. La mayoría de los recursos o periféricos de que disponen los PIC16F87x son capaces de ocasionar una interrupción, si se pro- graman adecuadamente los bits de los registros que pasamos a describir a continuación.
El PIC16F84 tenía 4 causas que generaban interrupción: desbordamiento del TMR0, activación de la patita de interrupción RB0/INT, cambio del estado de una de las 4 patitas de más peso de la Puerta B y finalización de la escritura de un byte en la EEPROM. Los nuevos PIC, además de las causas que producen interrupción en el PIC16F84, tienen las siguientes:
1.a Asigna el divisor de frecuencias al Timer0 (TMR0) o al perro guardián.
2.a Elige el rango en el que trabaja el divisor de frecuencia.
3.a Selecciona el tipo de reloj del TMR0, que puede ser interno o externo, a través de la patita T0CKI.
También selecciona el flanco activo.
4.a Selecciona el flanco activo para la interrupción externa por RB0/INT.
5.a Activa o desactiva las resistencias de pull-up de la Puerta B.
bsf STATUS,RP0 bsf STATUS,RP1
1.a Desbordamiento del Timer1.
2.a Desbordamiento del Timer2.
3.a Captura o comparación en el módulo CCP1.
4.a Captura o comparación en el módulo CCP2.
5.a Transferencia en la Puerta Serie Síncrona.
6.a Colisión de bus en la Puerta Serie Síncrona.
7.a Fin de la transmisión en el USART.
8.a Fin de la recepción en el USART.
9.a Fin de la conversión en el Conversor A/D.
10.a Transferencia en la puerta paralela esclava. (Esta causa de interrupción no está disponible en los PIC16F87x de 28 patitas.)
PS2:PS0 Valor con el que actúa el Divisor de Frecuencia.
PS2 PS1 PS0 División del TMR0 División del WDT
0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128
PSA Asignación del divisor de frecuencias.
1 = El divisor de frecuencias se le asigna al WDT 0 = El divisor de frecuencias se le asigna al TMR0
T0SE Tipo de flanco en T0CKI.
1 = Incremento del TMR0 cada flanco descendente 0 = Incremento del TMR0 cada flanco ascendente
T0CS Tipo de reloj para el TMR0.
1 = Pulsos introducidos a través de T0CKI (contador) 0 = Pulsos de reloj interno FOSC/4 (temporizador) INTEDG Flanco activo de la interrupción externa.
1 = Flanco ascendente 0 = Flanco descendente
RBPU# Resistencias de pull-up de la Puerta B.
1 = Desactivadas 0 = Activadas
RBPU# INTEDG T0CS T0SE PSA PS2 PS1 PS0 REGISTRO OPTION
7 0
Figura 3.2. Denominación y asignación de funciones de los bits del registro OPTION. Ocupa la dirección 81h del banco 1 y la 181h del banco 3.
Como los PIC16F87x disponen de más causas que provocan interrupción, también tienen más registros para contener los bits seủalizadores y de permiso o prohibiciún.
3.4.1. Registro de control de interrupciones (INTCON)
Se trata de un registro leíble y escribible que, para facilitar su acceso, se halla duplicado en los cua- tro bancos, ocupando las direcciones 0Bh, 8Bh, 10Bh y 18Bh, respectivamente. Tiene la misión de controlar las interrupciones provocadas por el TMR0, cambio de estado en las 4 líneas de más pe- so de la Puerta B y activación de la patita RB0/INT. Es muy parecido al registro que con el mismo nombre existía en el PIC16F84. Sólo cambia el bit 6 en los nuevos PIC, que es el PEIE (permiso de interrupción de los periféricos) en lugar del EEIE que tenía el PIC16F84 para permitir la interrup- ción cuando finalizase la escritura de un byte en la EEPROM. El bit PEIE actúa como una segunda llave parcial de permiso o prohibición de las causas de interrupción que no están contempladas en INTCON y que las provocan los restantes periféricos del microcontrolador. GIE es el bit de permi- so global de todas las interrupciones. (Figura 3.3.)
3.4.2. Registro de permiso de interrupciones 1 (PIE1)
Contiene los bits que permiten (1) o prohiben (0) las interrupciones provocadas por los periféricos internos del microcontrolador y que no estaban contempladas en INTCON.
Ocupa la dirección 8Ch y para que cumplan su función los bits de PIE1 es necesario que PEIE = 1 en INTCON <6>. El bit PSPIE sólo es válido en los modelos de 40 patitas, manteniéndose a 0 en los que tienen 28 patitas. En la Figura 3.4 se presenta el registro PIE1 con el significado de todos sus bits.
GIE Bit de permiso global de interrupciones.
1 = Permitido 0 = Prohibido
PEIE Bit de permiso de los periféricos que no se controlan con INTCON.
T0IE Bit de permiso de interrupción del TMR0.
INTE Bit de permiso de la interrupción externa por RB0/INT.
RBIE Bit de permiso de la interrupción por cambio en RB4-RB7.
T0IF Seủalizador de desbordamiento en TMR0.
INTF Seủalizador de activaciún de la patita RB0/INT.
RBIF Seủalizador de cambio en RB4-RB7.
REGISTRO INTCON
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
7 0
Figura 3.3. Designación y misión de cada uno de los bits del registro INTCON.
3.4.3. Registro de permiso de interrupciones 2 (PIE2)
Contiene los bits de permiso de interrupción de las causas que no figuraban en PIE1. La de fin de es- critura en la EEPROM, la procedente del comparador, colisión de bus en el modo SSP y producción de una captura o una comparación en el módulo CCP2. La Figura 3.5 presenta la función de estos tres bits. Cuando se leen los bits que no tienen asignada función se obtiene 0.
3.4.4. Registros de los seủalizadores de interrupciones 1 y 2 (PIR1 y PIR2)
En correspondencia con los bits de permiso/prohibición de las causas de interrupción recogidas en los registros PIE1 y PIE2, existen otros dos registros, PIR1 y PIR2, cuyos bits actúan de se- ủalizadores del momento en el que se origina la causa que provoca la interrupciún, independien- temente de si está permitida o prohibida. Ocupan las direcciones 0Ch y 0Dh, respectivamente.
(Figura 3.6.)