Sunteți pe pagina 1din 22

CAPÍTULO 4

CONTROL DE
INTERRUPCIONES
ING.VIVIANA PÁRRAGA MSC.

VIVIANA.PARRAGAV@EPN.EDU.EC
SEMESTRE: 2019A
CONTENIDO

Interrupciones

Registros Asociados
INTERRUPCIONES

• Las llamadas a subrutinas mediante la instrucción CALL son desviaciones del flujo de control
del programa originadas por instrucciones, por lo que se consideran Sincrónicas. Se producen
cada vez que se ejecuta dicha instrucción.

• Las Interrupciones son desviaciones del flujo de control del programa originadas de manera
Asincrónica por diversos eventos que no se hallan bajo la supervisión de las instrucciones.

• Estos eventos pueden ser externos al sistema, como la generación de un flanco o nivel activo
en un pin del microcontrolador, o bien internos, como el desbordamiento de un contador
INTERRUPCIONES

Subrutinas Interrupciones

• Instrucción CALL • Sin supervisión de


• Predecibles instrucciones.
• Desviaciones del flujo de • Desviaciones del flujo
control del programa de control del
originadas por programa originadas
instrucciones Sincrónicas. por instrucciones
Asincrónicas.
INTERRUPCIONES

• En Resumen: Una interrupción consiste en un mecanismo por el cual un evento interno o


externo puede interrumpir la ejecución de un programa en cualquier momento.
• A partir de entonces se produce automáticamente un salto a una rutina de atención a la
interrupción , ésta atiende inmediatamente el evento y retoma luego la ejecución del
programa exactamente donde estaba en el momento de ser interrumpido, continuando su
tarea justo donde la dejó.
• La interrupción tiene la característica de la inmediatez, nace de la necesidad de ejecutar
una rutina en el instante preciso y, por tanto, se considera su intervención urgente.
• Este mecanismo es muy útil por ejemplo para el manejo de timers o rutinas que deben
repetirse periódicamente (refresh de display, antirebote de teclado, detección de pulsos
externos, recepción de datos, etc. )
INTERRUPCIONES

Interrumpirá la tarea de ese


Interrupción
momento

Ejecutará una rutina de servicio o


gestión de la interrupción
FUNCIONAMIENTO

• El Comportamiento de las interrupciones es muy similar al de la instrucción “CALL” cuando


se realiza un llamado a subrutina. Se detiene la ejecución del programa en curso, se salva la
dirección actual del contador de programa (PC) en la pila (stack) y se carga el PC con una
nueva dirección que en el caso de una interrupción es una dirección reservada de la memoria
de programa 0x04H, llamado “Vector de Interrupción” donde comienza la Rutina de Atención
a la Interrupción o Rutina de Servicio a la Interrupción (RSI). Ejemplo:
• ORG 0x00 ;Inicia el programa en la posición 0x00
• GOTO INICIO ;Salto a la rutina de programa principal
• ORG 0X04 ;Vector de Interrupción
• GOTO INTERRUPCION ;Salto a la rutina de interrupción
• La idea de colocar la instrucción de salto incondicional (GOTO) es trasladar el flujo de
control a la zona de la memoria de código destinada a contener la Rutina de Servicio de
Interrupción (RSI).
FUNCIONAMIENTO

Termina la ejecución de la instrucción máquina en curso.

Salvar el estado del procesador y el valor del contador


de programa.

Salta a la dirección donde está almacenada la rutina de


servicio de interrupción

Ejecuta rutina para atender al dispositivo que generó la


interrupción.

Se restaura el estado que había guardado en la pila en el


paso 2 y retorna al programa que se estaba usando
anteriormente.
FUNCIONAMIENTO
Programa Normal
Instrucción 1 Rutina de Servicio de
Instrucción 2 Interrupción (0x04h)
Instrucción 3 Instrucción 1
… Instrucción 2
… …
… …
Instrucción 24 …
Instrucción 25 RETFIE

… Nota: Una Rutina de Interrupción puede
Instrucción N ser igual de extensa e incluso más que el
Fin de Programa programa principal
CAUSAS DE INTERRUPCIÓN

• El PIC16F870 tiene varias causas o fuentes posibles de interrupción:


 Activación del pin RB0/INT
 Desbordamiento de temporizadores (TMR0,TRM1,TMR2)
 Cambio de estado en uno de los 4 pines de más peso (RB7-RB4) del Puerto B.
 Interrupción por comunicación serial,A/D
 Finalización de la escritura en la EEPROM de datos.
• Cada fuente de interrupción dispone de una bandera o Flag, que es un bit que se pone en 1
automáticamente cuando se produce. Además cuentan con bits de permiso que
dependiendo de su valor permiten o prohíben la realización de la interrupción.
REGISTRO ASOCIADO A INTERRUPCIÓN
• La mayoría de las banderas y bits de permiso de las interrupciones del PIC16F870 están
implementadas sobre los bits del registro INTCON, que ocupa las direcciones 0BH del
banco 0, 8BH del banco1, 10B del banco 2 y 18B del banco 3.
REGISTRO ASOCIADO A INTERRUPCIÓN

• A continuación se detallan las funciones de cada bit del registro INTCON


• GIE: (Global Interrupt Enable), Permiso Global de Interrupciones
1: Habilita todas las interrupciones, cuyos bits de permiso individuales también lo permitan
0: Deshabilita todas las interrupciones
• PEIE: (Peripheral Interrupt Enable bit), Permiso de Interrupción Periférico
1: Habilita la interrupción por un periférico
0: Deshabilita esta interrupción
• T0IE: (TMR0 Overflow Interrupt Enable bit), Permiso de Interrupción por desborde de TMR0
1: Habilita la interrupción por desborde del TMR0
0: Deshabilita esta interrupción
• INTE: (RB0/INT External Interrupt Enable bit), Permiso de Interrupción por activación del pin
RB0/INT
1: Habilita la interrupción al activarse RB0/INT
0: Deshabilita esta interrupción
REGISTRO ASOCIADO A INTERRUPCIÓN

• RBIE: (RB Port Change Interrupt Enable bit), Permiso de Interrupción por cambio de estado en RB7:RB4
1: Habilita la interrupción por cambio de estado en RB7:RB4
0: Deshabilita esta interrupción
• T0IF: (TMR0 Overflow Interrupt Flag bit), Bandera de desborde de TMR0
1: Ha ocurrido un desborde del TMR0 (debe ser restaurado por Programación)
0: No se ha desbordado el TMR0
• INTF: (RB0/INT External Interrupt Flag bit), Bandera de activación del pin RB0/INT
1: Ha ocurrido interrupción externa por RB0/INT (debe ser restaurado por Programación)
0: No ha ocurrido interrupción externa por RB0/INT
• RBIF (RB Port Change Interrupt Flag bit), Bandera de cambio de estado en RB7:RB4
1: Pasa a 1 cuando cambio de estado al menos uno de los bits RB7:RB4 (debe ser restaurado por Programación)
0: No han cambiado de estado ninguno de los bits RB7:RB4
• Los registros PIE1, PIE2, PIR1, PIR2, están asociados a las interrupciones de TMR1, TMR2, A/D,
EEPROM, USART (comunicación serial) los cuales no serán estudiados en este módulo.
HABILITACIÓN DE INTERRUPCIÓN

• Habilite la interrupción por desborde del TMR0


MOVLW b’10100000’
MOVWF INTCON
• Habilite la interrupción por cambio de nivel en RB0/INT
MOVLW b’10010000’
MOVWF INTCON
• Habilite la interrupción por desborde del TMR0 y por cambio nivel en RB0/INT
MOVLW b’10110000’
MOVWF INTCON
CAUSA DE INTERRUPCIÓN

• Si se han activado dos o más causas de interrupción, como desborde del TMR0 y/o cambio de
nivel en RB0/INT, cuando ocurre cualquiera de estas interrupciones, ellas van a la misma rutina de
interrupción.
• Para determinar cuál es la interrupción, se debe testear las banderas, las cuales estarán en nivel
alto (1) cuando se haya activado la interrupción correspondiente.
• Por lo tanto, se debe realizar el testeo dentro de la rutina de servicio de interrupción, para
determinar cuál fue la razón de la interrupción.

• Cada vez que se produce una interrupción el bit GIE se pone en 0 automáticamente para
deshabilitar que se produzca una nueva interrupción durante la ejecución de la misma.
INSTRUCCIÓN RETFIE

• La instrucción RETFIE debe ser utilizada al final de la Rutina de servicio de interrupción, la


cual es idéntica a un retorno de subrutina RETURN.
• Adicionalmente, la instrucción RETFIE coloca automáticamente en “1” el bit GIE, volviendo a
habilitar las interrupciones. Al terminar la rutina de servicio a la interrupción, el programa
principal continúa donde fue interrumpido.
• Es importante recalcar que la rutina de servicio a la interrupción (RSI) debe situarse a partir
de la dirección 0x04H y acabar con la instrucción RETFIE.
EJEMPLO 1

• Usando TMR0 e Interrupciones generar una señal cuadrada de 200Hz por el pin RB0 (usar cristal de
4Mhz)
• Para una frecuencia de 200Hz, tendremos un periodo de:
1 1 1
• 𝐹 = por lo que 𝑇 = = = 5𝑚𝑠𝑒𝑔
𝑇 𝐹 200𝐻𝑧
• Se asume que el ciclo de trabajo es 50% por lo tanto el periodo en bajo y alto son iguales, es decir 2,5 mseg
1
• 2,5𝑚𝑠𝑒𝑔 = 4 ∗ ∗ 𝑉𝑇𝑀𝑅0 ∗ Preescalador
4𝑀ℎ𝑧
1
• 2,5𝑚𝑠𝑒𝑔 = 4 ∗ ∗ 𝑉𝑇𝑀𝑅0 ∗ 64
4𝑀ℎ𝑧

• 𝑉𝑇𝑀𝑅0 = 39,0625 ≅ 39
• 𝑇𝑀𝑅0 = 256 − 𝑉𝑇𝑀𝑅0 = 256 − 39 = 217 Valor a cargar en TMR0
EJEMPLO1
EJEMPLO 1

• Diagrama de flujo
EJEMPLO1
DEBER

1. Usando TMR0 e interrupción por desbordamiento, conseguir que los 8 LEDs


conectados al pórtico B en los pines pares estén inicialmente apagados y los
conectados en los pines impares estén inicialmente encendidos; los LEDs cambian
de estado cada que se produce una interrupción por desbordamiento, misma
ocurre cada 2.5 mseg utilizando el oscilador interno de 4MHz y un preescalador de
64.
2. Realizar un programa que permita controlar el funcionamiento de una máquina de
gaseosa en base a un microcontrolador PIC16F870. Cuando el usuario desea una
gaseosa, oprime un botón que está conectado al pin RA1 del microcontrolador. Al
oprimir el botón, el dispensador que está conectado al pin RC1 permanece activo
(1L) durante 3,2 segundos. Finalizado este tiempo, el dispensador se desactiva
(0L). Se utiliza interrupción por desbordamiento del registro TMR0 para realizar el
control de tiempo. Además, un cristal de 8MHz y se ha programado de modo que
el desbordamiento del TMR0 ocurra cada 16mseg.
DEBER

3. En base a los siguientes estados del registro INTCON,


indique cual es el estado del programa en ejecución.
INTCON ESTADO PROGRAMA
0XB7
0X05
0XF1
0X45
0X17
0X35
0XB6

S-ar putea să vă placă și