T1C3.
Interrupciones
Microcontroladores
7° “B”
Gutiérrez Cruz Juan Israel - 191112
Interrupción
Una interrupción es un evento que hace que el
microcontrolador deje de ejecutar la tarea que está
realizando para atender dicho acontecimiento y luego
regrese y continue la tarea que estaba realizando antes
de que se presentara la interrupción.
Estos dispositivos tienen desde 10 hasta 15 fuentes de
interrupción dependiendo del tipo específico de PIC.
El manejo de las interrupciones se programa por medio
de registros especiales que controlan el
comportamiento del microcontrolador bajo
determinadas circunstancias.
El microcontrolador PIC16F88 tiene hasta 12 fuentes de interrupciones.
El microcontrolador PIC16F628A tiene 10.
El microcontrolador PIC16F877A tiene 15.
2
Hay dos tipos de interrupciones posibles, una es mediante una
acción externa (es decir por la activación de uno de sus pines), y la
otra es interna (por ejemplo, cuando ocurre el desbordamiento de
uno de sus registros).Al aceptarse una interrupción se salva el valor
del PC contador de programa en la pila y se carga aquel con el
valor 0004h, que es el vector de interrupción
Manejo de interrupciones
Las banderas de interrupciones se activan
independientemente del estado de sus bits de habilitación
o del bit de habilitación global GIE. El bit GIE del registro
INTCON permite habilitar o deshabilitar la generación de
interrupciones. Cuando están habilitadas (GIE=1) y el bit de
habilitación particular y la bandera correspondiente se
activan, se produce un salto al vector de interrupción
(dirección 0x0004). Las interrupciones individuales pueden
habilitarse/deshabilitarse a través de sus bits de
habilitación en diferentes registros.
El registro INTCON contiene las banderas de interrupciones generadas por
diferentes eventos. También contiene los bits de habilitación global y particular
de las distintas fuentes de interrupciones
El bit GIE se borra al producirse un reset, por lo tanto la
generación de interrupciones está deshabilitada
normalmente. La instrucción RETFIE se emplea para salir
de la rutina de servicio a la interrupción (ISR), así como
rehabilitar la generación de interrupciones. Las banderas
de las interrupciones INT, RB y del Timer0 se encuentran en
el registro INTCON. Las banderas de interrupción de los
periféricos están contenidas en los registros PIR1 y PIR2
(microcontrolador PIC16F877A), mientras que los bits de
habilitación correspondientes se encuentran en los
registros PIE1 y PIE2 (16F877A). El bit de habilitación de
interrupciones de periféricos (PEIE) está en el registro
INTCON.
Cuando se brinda atención a una interrupción, el bit GIE es
borrado para deshabilitar cualquier interrupción adicional, la
dirección de retorno es guardada (pushed) en la pila (stack) y el
contador de programa (PC) es cargado con el valor 0x0004. Una
vez dentro de la ISR, la fuente de la interrupción se puede
determinar analizando las banderas de interrupción. Las
banderas tienen que ser borradas por software antes de
rehabilitar las interrupciones, para evitar interrupciones
repetitivas.
Las interrupciones externas INT o RB4 RB7 pueden generarse cada
cierto tiempo como mínimo, que va desde los tres a cuatro ciclos
de instrucción, esto depende del instante en que se genera la
interrupción. Las banderas de interrupción se activan
independientemente del bit de habilitación particular, del bit PEIE
o del bit GIE.
Interrupciones INT del microcontrolador PIC
La interrupción externa en el pin RB0/INT se activa por flanco ascendente o
descendente, dependiendo del bit INTEDG del registro OPTION_REG. Cuando
aparece una transición válida en el pin RB0/INT, la bandera INT0IF del
registro INTCON toma un valor de 1. Esta interrupción puede ser
habilitada/deshabilitada con el bit INT0IE del registro INTCON. La bandera
INT0IF tiene que ser borrada por software dentro de la ISR antes de
rehabilitar esta interrupción. La interrupción INT puede despertar al PIC, si el
bit INT0IE se programó en 1 antes de ingresar al modo Sleep. El estado del bit
GIE determina si se produce o no el salto al vector de interrupción después
del despertar.
8
Interrupciones del Timer 0
El desbordamiento del registro TMR0 (desde 0xFF a 0x00)
genera una interrupción, lo cual hace que el bit TMR0IF
del registro INTCON sea igual a 1. La generación de esta
interrupción se puede habilitar/deshabilitar con el bit
TMR0IE del registro INTCON. El bit TMR0IF tiene que ser
borrado por software dentro de la ISR antes de rehabilitar
esta interrupción. Esta interrupción no puede despertar al
microcontrolador PIC, ya que el temporizador está
apagado durante el modo Sleep.
9
Interrupciones RB4 RB7
Un cambio de estado en cualquiera de los pines RB<7:4> genera una
interrupción y hace que la bandera RBIF del registro INTCON tome un
valor de 1. Esta interrupción puede habilitarse/deshabilitarse con el
bit RBIE del registro INTCON. Únicamente los pines configurados
como entradas pueden producir esta interrupción. Los pines de
entrada RB<7:4> se comparan con el estado anterior que tenían en la
última lectura del puerto B. Si no hay coincidencia en todos los pines,
se genera la interrupción.
Esta interrupción puede despertar al microcontrolador PIC.
10
El usuario, dentro de la ISR, puede borrar la bandera de
interrupción con cualquiera de los métodos siguientes:
- Lectura o escritura del registro PORTB. Esto concluye la
condición de falta de coincidencia.
- Borrar la bandera RBIF.
Esta interrupción se recomienda para despertar al PIC en caso de
presionar una tecla o en el caso de que el puerto B se emplee
únicamente para la interrupción RB4 RB7. La lectura continua
(Polling) del puerto B no se recomienda mientras se usa la función
de interrupción RB.
Manejo de interrupciones en mikroC PRO
Las interrupciones se pueden manipular fácilmente por medio de la palabra reservada interrupt. En
mikroC PRO se ha declarado de manera implícita la función interrupt, la cual no puede ser
redeclarada. Su prototipo es:
void interrupt(void);
Lo único que el usuario tiene que hacer es escribir la definición de esta función (rutina de servicio a
la interrupción ISR) para manejar interrupciones en la aplicación que esté desarrollando. mikroC
PRO se encarga de salvar y recuperar de la pila (stack) los registros W, STATUS, FSR y PCLATH.
Se pueden realizar llamadas a funciones desde la función interrupt. El compilador mikroC PRO
toma en cuenta los registros que se están empleando tanto en la función interrupt como en la
función main, y salva únicamente los registros que se emplean en ambas funciones.
En caso de que haya múltiples interrupciones habilitadas, se debe detectar la fuente de la
interrupción por medio de las banderas de interrupción (flags) y proceder a la ejecución del código
apropiado.
12
Interrupciones del PIC16F877A
El microcontrolador PIC16F877A tiene la particularidad de manejar 13 fuentes de
interrupciones los de 28 pines y 14 los de 40 pines.
1. Activación de la patita de interrupción RB0/INT.
2. Desbordamiento del timer 0 (TMR0).
3. Cambio de estado de estado lógico en el puerto B (pines RB7 a RB4).
4. Finalización de la escritura de un byte en la EEPROM.
5. Desbordamiento del timer 1 (TMR1).
6. Desbordamiento del timer 2 (TMR2).
7. Captura o comparación en el módulo CCP1.
8. Captura o comparación en el módulo CCP2.
9. Transferencia en la puerta serie Síncrona.
10. Colisión de bus en la puerta serie Síncrona.
11. Fin de la transmisión en el USART.
12. Fin de la recepción en el USART.
13. Fin de la conversión en el convertidor A/D.
13
Referencias
• T. (2017, 23 marzo). Interrupciones de los microcontroladores PIC. TECKmicro. Recuperado 13 de
noviembre de 2021, de [Link]
• Manejo de interrupciones en los microcontroladores PIC. (2011, 10 marzo). CIRCUITOS
ELECTRONICOS. Recuperado 13 de noviembre de 2021, de
[Link]
• [Link]
toluca/microcontroladores/interrupciones-del-microcontrolador-pic16f877a/10484991
14