Tema 8 Interrupciones
Prof.: Yoel Pire
ypire@[Link]
2020
Contenido:
1. Introducción
2. Fuentes o causas de interrupciones en el PIC16F877
3. Registros asociados a las interrupciones.
4. Lógica del diagrama de bloque de las interrupciones
5. Fase en la Gestión de interrupciones
Microcontroladores – Tema 8
Interrupciones 2
Introducción
Una interrupción se produce a causa de un evento interno o externo en el microcontrolador que
obliga a realizar un salto a la posición de memoria del vector reset; en el caso del PIC16F877 posee
14 fuentes de interrupciones y al producirse una de ellas salta a la posición 04h de la memoria de
programa (vector reset)
Las interrupciones son de gran utilidad ya que el programador las puede usar como una forma de
apoyo para aprovechar al máximo la capacidad del microcontrolador. Por ejemplo en el manejo de
teclados matriciales, pulsadores, comunicación con otros dispositivos, conversión AD, control de
temporizadores y contadores, entre muchas otras.
Es de aclarar que las interrupciones en algunos casos pueden ser opcionales, pero el empleo de
estas pueden lograr hacer un programa mas eficiente, en la mayoría de los casos se utilizan para
liberar a la CPU del microcontrolador y de esa forma se podrá usar a la CPU en otra rutina. Existen
casos en que, para realizar el control de un proceso, se tiene que emplear obligatoriamente una
interrupción, ya que de lo contrario para lograr controlar el proceso se tendría que usar otro
microcontrolador u otro circuito integrado o compuertas lógicas, que sirvan como circuitos de
apoyo del microcontrolador principal, y usar dos microcontroladores o mas circuitos supone un
alto costo, entonces las interrupciones lograrían resolver de manera eficiente, cómoda y lógica un
programa que involucre varias acciones de manera simultanea con un solo microcontrolador y sin
la necesidad de agregar otro elemento de control.
En la mayoría de programas hay que esperar que ocurra algo para que el microcontrolador proceda
a realizar las acciones que le fueron programadas. Por ejemplo: si queremos encender un LED con
un pulsador, se tendría que testear ese pulsador todo el tiempo hasta que ocurra el «evento» de
que alguien presione el pulsador, a través de las interrupciones se tiene la opción de no tener que
testear todo el tiempo, lo cual permitiría aprovechar en ejecutar otras instrucciones del programa
mientras se espera que alguien presione la tecla. En este caso el papel que juega la interrupción es
de avisar a la CPU de que alguien presiono el botón y que proceda a encender el LED.
Otro ejemplo seria en el caso de un programa que controle un proceso que involucre varias
acciones a la vez, como el control de la velocidad de un motor, y al mismo tiempo tiene que
detectar si se pulsa una tecla de una teclado y además tiene que controlar el flujo de datos en una
comunicación serial…. Evidentemente el microcontrolador solo puede ejecutar una instrucción a la
vez, y para lograr hacer varias tareas el programador puede valerse de las interrupciones para que
estas le avisen a la CPU el momento en que debe atender cada una de esas tareas y colocar las
instrucciones necesarias para cada caso según las condiciones que el proceso amerite.
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 3
Fuente: Libro Fundamentos y Aplicaciones con PIC Valdez [Link] Pagina 218
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 4
Fuentes o causas
El PIC16F877 tiene 14 causas posibles que producen interrupciones:
01- Desbordamiento del Timer 0
02- Desbordamiento del Timer 1
03- Desbordamiento del Timer 2
04- Activación del pin RB0
05- Cambio de estado de los pines RB4-RB7
06- Captura o Comparación del Modulo CCP1
07- Captura o Comparación del Modulo CCP2
08- Fin de la conversión del Convertidor AD
09- Escritura de un Byte en la EEPROM
10- Comunicación serial síncrona
11- Colisión en el bus de la comunicación serial síncrona
12- Fin de la Transmisión en la USART
13- Fin de la Resección en la USART
14- Transferencia en la puerta Paralela esclava
El programador puede habilitar las interrupciones individualmente y usar las que necesite.
Son 14 causas o eventos que, al ocurrir una de ellas producirían una interrupción. El efecto
que tienen las interrupciones es la capacidad de detener la ejecución del programa principal
y harían que el PIC salte automáticamente al vector RESET (posición 04h), el programador
debe colocar las instrucciones que gestionen las interrupciones justamente en esa posición
(04h) de la memoria de programa, luego deberá revisar quien provoco la interrupción y
proceder a «atender» la causa. Al finalizar la interrupción el microcontrolador continuara
ejecutando el programa principal justamente en donde se quedo.
Para revisar quien produjo la interrupción se tiene que testear las banderas (flags) asociadas a
las interrupciones las cuales se pondrán automáticamente a uno cuando ocurra el evento. Es
de aclarar que:
1. Las banderas se activan (a uno lógico) automáticamente por hardware y se tienen
que limpiar (poner a cero lógico) por software (manualmente en el programa).
2. las banderas siempre se activan al ocurrir el evento independientemente si la
interrupción fue o no habilitada.
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 5
Registros Asociados a las Interrupciones
Son 5 los principales registros que se utilizan en la habilitación y gestión de las interrupciones, los
cuales se resumen en la siguiente tabla:
REGISTRO POSICIÓN EN MEMORIA DE DATOS RAM
INTCON 0Bh – 8Bh – 10Bh – 18Bh
PIE1 8Ch – banco 1
PIE2 8Dh – banco 1
PIR1 0Ch – banco 0
PIR2 0Dh – banco 0
Nota: en el caso de INTCON esta repetido en todos los bancos
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 6
Registro INTCON
INTCON
GIE PEIE T0IE INTE RBIE T0IF INTF RBIF
<bit 7> GIE: Permiso global de todas las interrupciones
0: Deshabilitado
1: Habilitado
<bit 6> PEIE: Permiso de Interrupciones Periféricas
0: Deshabilitado
1: Habilitado
<bit 5> TOIE: Permiso de Interrupción del timer 0
0: Deshabilitado
1: Habilitado
<bit 4> INTE: Permiso de la Interrupción externa RB0/INT
0: Deshabilitado
1: Habilitado
<bit 3> RBIE: Permiso de la Interrupción por cambio de estado en RB4-RB7
0: Deshabilitado
1: Habilitado
<bit 2> T0IF: Señalizador de desbordamiento del Timer 0
0: El timer 0 no se ha desbordado
1: El timer 0 se desbordo
<bit 1> INTF: Señalizador de activación del pin RB0/INT
0: El pin RB0/INT no ha sido activado
1: El pin RB0/INT ha sido activado
<bit 0> RBIF: Señalizador de cambio de estado en RB4-RB7
0: El pin RB4-RB7 no ha sido activado
1: El pin RB4-RB7 ha sido activado
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 7
Registro INTCON
Fuente: Libro Fundamentos y Aplicaciones con PIC Valdez [Link] Pagina 226
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 9
Registro PIE1
PIE1
PSPIE ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE
<bit 7> PSPIE: Permiso de interrupción para la puerta paralela esclava al realizar una operación de
lectura/escritura.
<bit 6> ADIE: Permiso de interrupción para el convertidor analógico digital A/D al finalizar la conversión.
<bit 5> RCIE: Permiso de interrupción para el receptor del USART cuando el buffer se llena.
<bit 4> TXIE: Permiso de interrupción para el transmisor del USART cuando el buffer se vacía.
<bit 3> SSPIE: Permiso de interrupción para la puerta seria síncrona.
<bit 2> CCP1IE: Permiso de interrupción para el módulo CCP1 cuando se produce una captura o
comparación
<bit 1> TMR2IE: Permiso de interrupción para el timer 2 cuando se produce un desbordamiento.
<bit 0> TMR1IE: Permiso de interrupción para el timer 1 cuando se produce un desbordamiento.
Para todos los bits
0: Deshabilitado
1: Habilitado
Este registro se utiliza para habilitar o deshabilitar las interrupciones de cada uno de los
periféricos mencionados
observe que los nombre de todos los bit termina en la letra E que proviene de la palabra
Enable (habilitar)
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 10
Registro PIR1
PIR1
PSPIF ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF
Corresponden a los bit de Señalización (banderas) que se activan al momento de producirse la causa del
evento.
<bit 7> PSPIF: Señalizador de la puerta paralela esclava al realizar una operación de lectura/escritura.
<bit 6> ADIF: Señalizador para el convertidor analógico digital A/D al finalizar la conversión.
<bit 5> RCIF: Señalizador para el receptor del USART cuando el buffer se llena.
<bit 4> TXIF: Señalizador para el transmisor del USART cuando el buffer se vacía.
<bit 3> SSPIF: Señalizador para la puerta seria síncrona.
<bit 2> CCP1IF: Señalizador para el módulo CCP1 cuando se produce una captura o comparación
<bit 1> TMR2IF: Señalizador para el timer 2 cuando se produce un desbordamiento.
<bit 0> TMR1IF: Señalizador para el timer 1 cuando se produce un desbordamiento.
Este registro se utiliza para consultar si la bandera correspondiente fue activada, es decir si
vale 1 significa que ocurrió el evento independientemente si las interrupciones están o no
habilitadas
Observe que los nombre de todos los bit termina en la letra F que proviene de la palabra Flag
(bandera)
Si la interrupción esta habilitada y ocurre el evento, entonces el microcontrolador se
interrumpe (salta al vector reset)
Si la interrupción esta deshabilitada y ocurre el evento, entonces el microcontrolador NO se
interrumpe
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 11
Registro PIE2
PIE2
- - 0 EEIE BCLIE - - CCP2IE
<bit 4> EEIE: Permiso de interrupción por fin de escritura en la EEPROM.
<bit 3> BCLIE: Permiso de interrupción por colisión de bus en el modo SSP cuando dos o mas maestros
tratan de transmitir al mismo tiempo.
<bit 0> CCP2IE: Permiso de interrupción para el modulo CCP2 cuando se produce una Captura o
Comparación.
Para todos los bits
0: Deshabilitado
1: Habilitado
Este registro se utiliza para habilitar o deshabilitar las interrupciones de cada uno de los
periféricos mencionados
observe que los nombre de todos los bit termina en la letra E que proviene de la palabra
Enable (habilitar)
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 12
Registro PIR2
PIR2
- - 0 EEIF BCLIF - - CCP2IF
Corresponden a los bit de Señalización (banderas) que se activan al momento de producirse la
causa del evento.
<bit 4> EEIF: Señalizador por fin de escritura en la EEPROM.
<bit 3> BCLIF: Señalizador por colisión de bus en el modo SSP cuando dos o mas maestros
tratan de transmitir al mismo tiempo.
<bit 0> CCP2IF: Señalizador para el modulo CCP2 cuando se produce una Captura o Comparación.
Este registro se utiliza para consultar si la bandera correspondiente fue activada, es decir si
vale 1 significa que ocurrió el evento independientemente si las interrupciones están o no
habilitadas
Observe que los nombre de todos los bit termina en la letra F que proviene de la palabra Flag
(bandera)
Si la interrupción esta habilitada y ocurre el evento, entonces el microcontrolador se
interrumpe (salta al vector reset)
Si la interrupción esta deshabilitada y ocurre el evento, entonces el microcontrolador NO se
interrumpe
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 13
Lógica del diagrama de bloque de las interrupciones
Fuente: DataSheet PIC16F877 Figura 12-9 Pagina 129
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 14
Lógica del diagrama de bloque de las interrupciones
Explicación:
Tanto en el cuadro rojo como en el azul: Corresponde a los bit de permiso de interrupción (los bit que
terminan en la letra E) junto con los bit de señalización (los bit que terminan en la letra F).
En el cuadro rojo se encuentran los bits de los registros PIE1, PIE2, PIR1 y PIR2 . En el cuadro azul hace
referencia a los bits que se encuentra en el registro INTCON
Observe que para todos los casos ambos bit pasan por una compuerta lógica AND y según la tabla de la verdad
al haber un cero lógico en cualquiera de las entrada, la salida es cero, y en cambio la salida tomara el valor
lógico uno al menos que ambas entradas sean uno; de acuerdo a esa lógica significa que la compuerta se
pondrá a uno siempre y cuando la interrupción este habilitada y la señalización se halla activado por la causa
que lo produce. En otras palabras, si la interrupción esta habilitada (1) y la bandera se activo (1) entonces se
producirá un estado alto (1) en la salida de la compuerta. Este hecho ocurre con cada una de las compuertas
AND que están el recuadro rojo y azul
Las compuertas AND del cuadro Rojo corresponden a la lógica de 11 de las 14 causas o fuentes de
interrupciones del PIC16F877. las otras 3 causas se encuentran en las compuertas AND del cuadro Azul. En
ambos casos la salida de las compuertas AND se conectan a la entrada de una compuerta OR (ver diagrama) y
según la tabla de la verdad de la compuerta OR, al haber un alto (1) en cualquiera de las entrada, la salida se
pondrá a uno (1) luego la salida de cada una de las compuertas OR se conectan a otra compuerta AND…
(continuara en la siguiente pagina)
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 15
Lógica del diagrama de bloque de las interrupciones
Explicación: (continuación)
Las compuertas AND que están en el cuadro anaranjado y verde son consideradas como «llaves» que permiten
habilitar o deshabilitar las interrupciones.
En el caso de la compuerta AND del recuadro anaranjado, es una llave que permite deshabilitar parcialmente
las interrupciones periféricas que se encuentran en los registros PIE1 y PIE2 ,PIR1 y PIR2 a través del bit PEIE
que se encuentra en el <bit 6> del registro INTCON
Y en el caso de la compuerta AND del recuadro verde, es la encargada de habilitar o deshabilitar todas las
interrupciones de manera global. La cual depende del bit GIE que se encuentra en el registro INTCON <bit 7>
En el caso de que el bit GIE sea cero, significa que el microcontrolador jamás se interrumpirá,
independientemente si las otras interrupciones están habilitadas y halla ocurrido el evento de la causa que lo
produce.
En resumen, para trabajar con las interrupciones, hay que habilitar el bit GIE y en el caso de las periféricas hay
que habilitar el bit PEIE y por supuesto habrá que habilitar el bit que corresponde a la interrupción que se
desea usar. Y finalmente habrá que esperar que ocurra el evento que active la señalización de la bandera
correspondiente; y cuando todas estas condiciones ocurren el microcontrolador se interrumpirá, haciendo que
el PC se cargue con 04h y forzara a la CPU a que ejecute las instrucciones que están en esa posición de
memoria.
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 16
Fuente: Libro Fundamentos y Aplicaciones con PIC Valdez [Link] Pagina 218
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 17
Fase en la operación de interrupciones
Cuando ocurre una interrupción, ocurre lo siguiente:
1. El valor actual del PC (contador de programa) se guarda
2. Se deshabilitan las interrupciones globales
3. El PC es cargado con la dirección 0004h
4. El microcontrolador ejecuta las instrucciones que el programador haya puesto de manera
estratégica en esta posición de memoria. Luego de atender la interrupción se debe de colocar la
instrucción RETFIE
5. Al ejecutarse la instrucción RETFIE el valor del PC se restaurara y el microcontrolador continuara
con la ejecución del programa en donde se había quedado.
Nota:
el paso 1,2,3 y 5 lo realiza el microcontrolador automáticamente de manera transparente al
programador.
El paso 4 depende de las instrucciones puestas por el programador, las cuales debe de seguir un
patrón que se explicara en la próxima pagina
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 18
Fase en la operación de interrupciones
Fuente: Libro Fundamentos y Aplicaciones con PIC Valdez [Link] Pagina 221
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 19
Fase en la Gestión de interrupciones
1. Guardar el registro de trabajo W en un registro auxiliar
2. Guardar el registro STATUS en un registro auxiliar
3. Guardar el registro PCLACH en un registro auxiliar (solo en caso de trabajar en la pagina 1,2 ó 3)
4. Limpiar el registro PCLACH (solo en caso de trabajar en la pagina 1,2 ó 3)
5. Identificar la causa que produjo la interrupción, testeando las banderas de los registros
correspondientes
6. Atender la interrupción
7. Limpiar o borrar únicamente la bandera (flag) relacionada con la interrupción que fue atendida
8. Restaurar el registro PCLACH (solo en caso de trabajar en la pagina 1,2 ó 3)
9. Restaurar el registro STATUS
10. Restaurar el registro W
11. Ejecutar la instrucción RETFIE
A continuación se presenta un ejemplo que traduce a lenguaje ensamblador los pasos anteriores, tomados
del DataSheet.
Fuente: DataSheet PIC16F877 Pagina 130
Nota: observe que se emplea la instrucción SWAPF para guardar al registro STATUS, se utiliza esta
instrucción con el propósito de no alterar al registro STATUS, ya que la instrucción SWAPF no altera a
ninguna bandera (C, DC, Z)
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 20
Fase en la Gestión de interrupciones
Fuente: Libro Fundamentos y Aplicaciones con PIC Valdez [Link] Pagina 230
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 21
Fase en la Gestión de interrupciones
;* Salva información de contexto previo a la rutina de atención a la
interrupción
MOVWF W_TEMP ;Salva el registro W en un registro temporal
SWAPF STATUS,W ;Copia STATUS en W
CLRF STATUS ;Banco cero, sin importar banco actual
MOVWF STATUS_TEMP ;Salva STATUS en STATUS_TEMP (Banco 0)
MOVF PCLATH,W ;sólo se si se están usando las páginas 1,2,y/o 3
MOVWF PCLATH_TEMP ;salva PCLATH
CLRF PCLATH ;página 0 sin importar página actual
;aquí se escribe el código de la rutina de atención a la interrupción
;* A continuación restablece la información de contexto que salvó al inicio
MOVF PCLATH_TEMP,W ;rescata PCLATH
MOVWF PCLATH ;si se usan las paginas 1,2 y/o 3
SWAPF STATUS_TEMP,W ;rescata el STATUS original
MOVWF STATUS ;restablece banco original
SWAPF W_TEMP,F ;rescata el W original
SWAPF W_TEMP,W ;sin alterar el STATUS ya rescatado.
RETFIE
Nota:
Es necesario realizar este procedimiento para asegurar que los datos de los registros W, STATUS y PCLATH
no se alteren durante el servicio de interrupción. De tal manera que cuando el microcontrolador salga de la
interrupción, el contexto en que se encontraba sea exactamente el mismo y pueda continuar el programa
sin alteraciones.
Por ejemplo: si se esta haciendo una comparación y justamente cuando se esta testeando la bandera c ó Z
en ese momento se interrumpe el microcontrolador, entonces es de vital importancia que los datos de los
registros W ó STATUS no se pierdan para así al retornar se pueda continuar con la comparación, ya que si las
banderas C ó Z cambian, entonces la comparación podría alterarse debido al efecto de la interrupción.
Con este procedimiento se asegura que los datos serán guardados al comienzo de la interrupción y
restaurados al final de la interrupción.
Prof.: Yoel Pire
Microcontroladores – Tema 8
Interrupciones 22
Fase en la Gestión de interrupciones
Fuente: Libro Fundamentos y Aplicaciones con PIC Valdez [Link] Pagina 233-234
Prof.: Yoel Pire
Actividad
Actividad
1. Investigue todo lo relacionado con la interrupción RB0/INT y la interrupción RB4-RB7 del
microcontrolador PIC16F877.
2. Busque ejemplos de programas que hagan uso de estas interrupciones y observe como las
configuraron y cual fue el uso que le dieron. También preste atención en como gestionaron
las interrupciones.
Prof.: Yoel Pire