Está en la página 1de 29

INTERRUPCIONES Microcontroladores

INTRODUCCIN
o Una solicitud de interrupcin (comnmente conocida solo como interrupcin) es un evento
externo o interno que cuando es atendida hace que el microcontrolador interrumpa la
ejecucin del programa actual y ejecuta otro programa.
o En general cuando el programa que atiende la solicitud de interrupcin termina, el
microcontrolador continua ejecutando las instrucciones del programa que estaba siendo
ejecutada antes de que ocurriera la interrupcin.
o Las interrupciones son eventos asncronos al programa que es ejecutado por el MCU.
o En un microcontrolador hay varias fuentes de interrupcin, una internas y otras externas.
o Las interrupciones internas tienen su origen en los mdulos de E/S del MCU; la memoria o
la CPU, temporizadores, etc.
o Las interrupciones externas se originan en un perifrico y llegan al microcontrolador por
alguno de sus terminales.
o Los MCUs tienen recursos para recibir y procesar las solicitudes de interrupcin.
INTRODUCCIN
INTRODUCCIN
o Cada dispositivo que es fuente de una posible interrupcin tiene asociados dos bits (Gama
media y baja) y tres bits (Arquitectura PIC 18), estos pueden estar en el mismo registros o
en distintos registros.
1. El primer bit tiene una funcin informativa: Es un indicador que es activado (puesto a 1) por el dispositivo
que solicita la interrupcin.
o Este Bit se puede consultar por el programa con el fin de atender al dispositivo.
o Los bits con esta funcin tiene la terminacin IF (Interrupt Flag).
2. El segundo bit tiene una funcin de control: Se usa para permitir o impedir el paso de la solicitud de
interrupcin hacia la CPU, lo que equivale a habilitar o deshabilitar la interrupcin, tambin son
denominados como mascaras.
o Este bit de control se puede manejar dentro del programa.
o Los Bits que tienen esta funcin llevan la terminacin IE (Interrupt Enable).
3. El tercer bit (exclusivo de la Familia PIC 18), se utiliza para indicar la prioridad de la interrupcin.
o Este bit permite indicar la prioridad de la fuente de interrupcin, se manejan dos niveles alto (Direccin 0008h) y bajo (Direccin
00018h).
o Los Bits que tienen esta funcin llevan la terminacin IP (Interrupt Priority).
INTRODUCCIN
o Los MCU tambin tiene un bit
global de control de
interrupciones.
o Este habilita o deshabilita cualquier solicitud de
interrupcin que llega a la CPU.
o En el caso de los MCUs PIC es el bit GIE (Global
Interrupt Enable).
o Este bit solo puede controlar las interrupciones
enmascarables, a las que no son enmascarables
ocurren aun cuando este bit esta deshabilitado.

o Cuando ocurre una interrupcin lo


normal es deshabilitar el GIE hasta que
se termine el programa de la
interrupcin y despus se vuelva a
habilitar, esto se realiza dentro del
programa.
FUENTES DE INTERRUPCIN EN EL PIC 18F4520.
o En el caso del 18F4520 existen una gran variedad de fuentes de interrupcin de tipo externo e interno.
o Fuentes de interrupcin Internas (Enmascarables).
o Por desbordamiento de Temporizador.
o TIMER 0, 1 y 3.
o Por comparacin del valor del temporizador.
o TIMER 2.
o Conversor Analgico Digital.
o Memoria EEPROM.
o Detector de Voltaje Alto/Bajo (HLVD).
o Fallo en el oscilador.

o Fuentes de interrupcin Internas (No Enmascarables).


o Watchdog Timer.
o Power On Reset.
o Power Down Reset.
o Brown Out Reset.
FUENTES DE INTERRUPCIN EN EL PIC 18F4520.
o En el caso del 18F4520 existen una gran variedad de fuentes de interrupcin de tipo externo e interno.
o Fuentes de interrupcin Externas (Enmascarables).
o Interrupciones externas en terminales (PORTB 0, 1 y 2).
o Cambios en niveles lgicos de terminales (PORTB 4, 5, 6 y 7)
o Escritura/Lectura del puerto paralelo (Modo Esclavo).
o Recepcin en la USART.
o Transmisin en la USART.
o Transmisin/Recepcin del puerto serial sncrono (Modo Maestro).
o Captura o Comparacin de los mdulos CCP (1 y 2).

o Fuentes de interrupcin Externas (No Enmascarables).


o Botn de RESET.
FUENTES DE INTERRUPCIN EN EL PIC 18F4520.
o Para realizar la configuracin, inspeccin y control de las interrupciones el 18F4520 utiliza
un total de 10 registros:
o RCON.
o INTCON.
o INTCON1.
o INTCON2.
o PIR1, PIR2.
o PIE1, PIE2.
o IPR1, IPR2.
EL PROCESO DE UNA INTERRUPCIN
1. Programar el MCU para reaccionar a las interrupciones.
o El MCU debe estar programado para habilitar las fuentes de interrupcin a ocurrir.
o Se configura el Global Interrupt Enable (GIE) [Se habilitan en general todas las fuentes de interrupcin] y
en muchos casos el Peripheral Interrupt Enable (PEIE) [Se habilitan las interrupciones proveniente de
perifricos].
o Estos dos bits se encuentran en el registro INTCON.

2. Habilitar las interrupciones desde las fuentes seleccionadas.


o Cada perifrico en el MCU tiene un bit individual de habilitacin.
o Un bit de habilitacin individual para cada perifrico debe ser activado adicionalmente al GIE y el PEIE
antes del que el perifrico puede generar una interrupcin.
o Los bits individuales de habilitacin se encuentran en los registros INTCON, INTCON2, PIE1 y PIE2.

3. Solicitud de Interrupcin de un Perifrico.


o Cuando un perifrico alcanza un estado donde se programa la intervencin es necesario que el
perifrico ponga a 1 la bandera de solicitud de interrupcin (Interrupt Request Flag [xxIF]).
EL PROCESO DE UNA INTERRUPCIN
3. Confirmacin de Solicitud de Interrupcin de un Perifrico.
o Estas banderas de interrupcin son puestas a 1 a pesar de el estado de GIE, PEIE y los bits de
habilitacin individuales.
o Las banderas de interrupcin estn localizadas en los registros INTCON, INTCON2, PIR1 y PIR2.
o La mayora de las banderas de solicitud de interrupcin son latcheadas en estado alto cuando son
puestas a 1 y deben ser borradas por la rutina de servicio de interrupcin creada por el usuario.
4. La interrupcin ocurre.
o Cuando la bandera de solicitud de interrupcin es puesta a 1 y la interrupcin esta habilitada de forma
correcta, el proceso de interrupcin inicia.
1. Interrupciones globales son deshabilitadas mediante la puesta a 0 del bit GIE.
2. El contexto (Registro W, STATUS, BSR, PCLATH, etc.) del programa actual es guardado en registros sombra.
3. El valor del contador de programa (PC) es guardado en la pila de regreso (Return Stack).
4. El control de programa es transferido a la direccin vector de interrupcin.
o En caso de no activar niveles de prioridad la direccin del vector de interrupcin es 0008h.
o Si se encuentran activos los niveles de prioridad la direccin del vector 0008h para las de alto nivel y 0018h para las de bajo
nivel.
EL PROCESO DE UNA INTERRUPCIN
5. Se activa la rutina de servicio de la interrupcin (ISR).
o La rutina de servicio de la interrupcin es una funcin creada por el usuario que se encuentra situada en los vectores
de interrupcin (0008h o 0018 segn sea el caso).
o La rutina de servicio de la interrupcin hace lo siguiente:
1. Se revisan los perifricos habilitados para generar interrupcin con el fin de determinar la fuente de interrupcin.
2. Se realizan las tareas necesarias.
3. Se limpia la bandera apropiada de interrupcin (la que genero la interrupcin).
4. Se ejecuta el regreso desde una interrupcin (RETFIE) como el final de la funcin ISR.

6. El control es devuelto al programa principal.


o Cuando la instruccin RETFIE es ejecutado:
1. Las interrupciones globales son habilitadas (GIE=1).
2. El contexto del programa (registro W, STATUS, BSR, PCLATH, etc.) debe ser restaurado desde los registros sombra.
3. La direccin de regreso es cargada desde la pila (stack) hacia el contador de programa (PC).
4. La ejecucin continua desde el punto en el cual fue interrumpida.
REGISTROS USADOS EN EL PROCESO DE INTERRUPCIN
o Registros para el control de interrupciones:

o GIE/GIEH Habilitacin global de interrupciones / Habilitacin global de interrupciones de alta prioridad.


o PEIE/GIEL Habilitacin de interrupcin de perifricos / Habilitacin global de interrupciones de baja prioridad.
o TMR0IE Habitacin de interrupcin por desborde del TIMER (Temporizador) 0.
o INT0IE Habilitacin de interrupcin externa 0.
o RBIE Habilitacin de la interrupcin por cambios en el Puerto B.
o TMRIF Bandera de interrupcin por desborde del TIMER 0 (Debe ser limpiada mediante software).
o INT0IF Bandera de interrupcin externa 0 (Debe ser limpiada mediante software).
o RBIF Bandera de interrupcin cambios en el Puerto B (Debe ser limpiada mediante software).
REGISTROS USADOS EN EL PROCESO DE INTERRUPCIN
o Registros para el control de interrupciones:

o RBPU Habilitacin de Pull-Up en el Puerto B.


o INTEDG0 Seleccin de flanco de la interrupcin externa 0.
o INTEDG1 Seleccin de flanco de la interrupcin externa 1.
o INTEDG2 Seleccin de flanco de la interrupcin externa 2.
o TMR0IP Nivel de prioridad de la interrupcin por desborde del TIMER 0.
o RBIP - Nivel de prioridad de la interrupcin por cambios en el Puerto B.
REGISTROS USADOS EN EL PROCESO DE INTERRUPCIN
o Registros para el control de interrupciones:

o INT2IP Nivel de prioridad de la interrupcin externa 2.


o INT1IP Nivel de prioridad de la interrupcin externa 1.
o INT2IE Habilitacin de interrupcin externa 2.
o INT1IE Habilitacin de interrupcin externa 1.
o INT2IF Bandera de interrupcin externa 2 (Debe ser limpiada mediante software).
o INT1IF Bandera de interrupcin externa 1 (Debe ser limpiada mediante software).
REGISTROS USADOS EN EL PROCESO DE INTERRUPCIN
o Registros para la habilitacin de interrupciones por perifricos:

o PSPIE Habilitacin de interrupcin por escritura/lectura de puerto paralelo esclavo.


o ADIE Habilitacin de interrupcin por el convertidor analgico digital (ADC).
o RCIE Habilitacin de interrupcin por recepcin en USART.
o TXIE Habilitacin de interrupcin por transmisin en USART.
o SSPIE Habilitacin de interrupcin por el puerto serial sncrono maestro (MSSP).
o CCP1IE Habilitacin de interrupcin por el modulo CCP1.
o TMR2IE Habilitacin de interrupcin por comparacin del TIMER 2 con el registro PR2.
o TMR1IE Habilitacin de interrupcin por desbordamiento del TIMER 1.
REGISTROS USADOS EN EL PROCESO DE INTERRUPCIN
o Registros para la habilitacin de interrupciones por perifricos:

o OSCFIE Habilitacin de interrupcin por falla en el oscilador.


o CMIE Habilitacin de interrupcin por el comparador.
o EEIE Habitacin de interrupcin por operacin de escritura de datos en memoria EEPROM/Flash.
o BCLIE Habilitacin de interrupcin por colisin en BUS del MSSP.
o HLVDIE Habilitacin de interrupcin por deteccin de voltaje alto/bajo.
o TMR3IE Habilitacin de interrupcin por desbordamiento del TIMER 3.
o CCP2IE Habilitacin de interrupcin por el modulo CCP2.
REGISTROS USADOS EN EL PROCESO DE INTERRUPCIN
o Registros de solicitud de interrupciones:

o PSPIF Bandera de interrupcin por escritura/lectura de puerto paralelo esclavo (Debe ser limpiada mediante
software).
o ADIF Bandera de interrupcin por el convertidor analgico digital (ADC) (Debe ser limpiada mediante software).
o RCIF Bandera de interrupcin por recepcin en USART (Debe ser limpiada mediante software).
o TXIF Bandera de interrupcin por transmisin en USART (Debe ser limpiada mediante software).
o SSPIF Bandera de interrupcin por el puerto serial sncrono maestro (MSSP) (Debe ser limpiada mediante software).
o CCP1IF Bandera de interrupcin por el modulo CCP1 (Debe ser limpiada mediante software).
o TMR2IF Bandera de interrupcin por comparacin del TIMER 2 con el registro PR2 (Debe ser limpiada mediante
software).
o TMR1IF Bandera de interrupcin por desbordamiento del TIMER 1 (Debe ser limpiada mediante software).
REGISTROS USADOS EN EL PROCESO DE INTERRUPCIN
o Registros de solicitud de interrupciones:

o OSCIF Bandera de interrupcin por falla en el oscilador (Debe ser limpiada mediante software).
o CMIF Bandera de interrupcin por el comparador (Debe ser limpiada mediante software).
o EEIF Bandera de interrupcin por operacin de escritura de datos en memoria EEPROM/Flash (Debe ser limpiada
mediante software).
o BCLIF Bandera de interrupcin por colisin en BUS del MSSP (Debe ser limpiada mediante software).
o HLVDIF Bandera de interrupcin por deteccin de voltaje alto/bajo (Debe ser limpiada mediante software).
o TMR3IF Bandera de interrupcin por desbordamiento del TIMER 3 (Debe ser limpiada mediante software).
o CCP2IF Bandera de interrupcin por el modulo CCP2 (Debe ser limpiada mediante software).
REGISTROS USADOS EN EL PROCESO DE INTERRUPCIN
o Registros de nivel de prioridad de interrupciones:
HABILITANDO UNA INTERRUPCIN.
o Interrupciones primarias:
o Cinco fuentes de interrupcin tienen sus bits de habilitacin localizados en los registros INTCON.
o Estas fuentes de interrupcin son referidas como interrupciones primarias.
o Para habilitar estas interrupciones solo es necesario poner a 1 el bit GIE/GIEH del registro INTCON.
HABILITANDO UNA INTERRUPCIN.
o Interrupciones primarias:
o Limpiar una bandera de interrupcin antes de habilitar las interrupciones, previene de activar solicitudes de interrupcin
pendientes y que esto desencadene una interrupcin de forma inmediata.
HABILITANDO UNA INTERRUPCIN.
o Interrupciones de perifricos:
o El PIC 18F4520 es capaz de generar
solicitudes de interrupcin para cada
una de sus banderas de interrupcin
localizadas en los registros PIE.
o Para habilitar una interrupcin por
perifrico adems de habilitar el
GIE/GIEH se debe poner a 1
tambin el bit PEIE/GIEL ambos en el
registros INTCON.
ATENDIENDO UNA INTERRUPCIN.
o Rutina de servicio de
interrupcin (ISR).
o La ISR es un programa
generado por el usuario el
cual realiza las tareas
necesarias cuando la
interrupcin ocurre.
o El usuario es el responsable La direccin del vector de interrupcin
de programar la ISR y corresponde a un PIC 16f1xxx.
colocarla en el vector de
interrupcin (0008h o
0018h).
o La ultima instruccin
ejecutada debe ser RETFIE
(Return From Interrupt).
o Las ISRs pueden ser escritas
en lenguaje ensamblador o
C.
ATENDIENDO UNA INTERRUPCIN.
o Verificando la fuente de la interrupcin.
o Hay uno o dos ISR (depende si se programan
prioridades) que atienden a todas las fuentes de
interrupcin de la aplicacin.
o Debido a lo anterior la ISR o las ISRs deben ser
capaz de identificar la fuente (bandera) de
interrupcin que solicito la ISR.

o Limpiando las banderas de interrupcin.


o Las banderas de solicitud de interrupcin son
latcheadas cuando son puestas a 1.
o Deben ser limpiadas dentro de la ISR.
o De no hacerlo estas generaran de nuevo una
interrupcin justo despus de salir de la ISR.
INTERRUPCIONES EN EL COMPILADOR XC8.
o En MPLAB XC8 una funcin puede ser escrita para actuar como una ISR usando el calificador de
interrupcin (interrupt).
o Se declara la funcin con el calificador interrupt y el compilador automticamente colocara la
funcin en la direccin del vector de interrupcin.
o Adems el compilador se encarga de respaldar y restaurar los registros usados.
o Las interrupciones deben declararse como void ya que no pueden tener parmetros.
o En el caso de los PIC 18 para crear una ISR de las interrupciones de bajo nivel se debe declarar
como low_priority.
INTERRUPCIONES EN EL COMPILADOR XC8 (SIN
PRIORIDADES EN INTERRUPCIN).
INTERRUPCIONES EN EL COMPILADOR XC8 (CON
PRIORIDADES EN INTERRUPCIN).
INTERRUPCIONES EN EL COMPILADOR XC8 (CON
PRIORIDADES EN INTERRUPCIN).