Professional Documents
Culture Documents
INTERRUPCIONES
Microcontroladores: Tema 6
Interrupciones
Las interrupciones incrementan la eficiencia de un
sistema permitiendo que un dispositivo de
Entrada-Salida reclame un servicio cuando
requiere atencin inmediata. Los programas
pueden ser escritos sin necesidad de checar
continuamente sus puertos polling.
Ronald L. Baldrige
Interrupts and Power, Complexity to uC-System Design
EDN Vol. 22 No 14. August 5, 1977
Microcontroladores: Tema 6
Interrupciones
Una interrupcin es una llamada a una
subrutina iniciada por hardware interno o
externo
Las excepciones exceptions son
interrupciones provocadas por el CPU para
indicar una condicin extraordinaria como
una divisin entre cero etc..
Microcontroladores: Tema 6
MAIN
A? B?
MAIN
A? B?
PROC
B
Tiempo
MAIN
A?
B?
PROC
A
MAIN
A? B?
Microcontroladores: Tema 6
ISR
A
MAIN
Tiempo
MAIN
ISR
A
ISR
B
ISR
A
Microcontroladores: Tema 6
Porqu interrupcin?
Coordinacin de actividdades de entrada salida
Procesos crticos en tiempo como el salvamento de
variables en una falla de energa etc.
Aborto gracioso del programa bajo condiciones
anmalas de operacin
Realizar actividades perodicas como la
actualizacin de un RTC o el muestreo de una seal
analgica.
Enmascaramiento de
interrupciones
Microcontroladores: Tema 6
Microcontroladores: Tema 6
Prioridad
Si mas de una interrupcin ocurre al mismo
tiempo, la prioridad permite definir cual
interrupcin ser ejectudada primero.
La prioridad puede dedinir tambin si una
interrupcin en servicio puede ser
interrumpitda por una de menor prioridad.
El PIC18 maneja tres niveles:
Ninguna, alta y baja
8
Microcontroladores: Tema 6
Priorizacin de Interrupciones
Ocurrencia de eventos simultneos
EVENTO A
EVENTO B
PRIORIDAD: EVENTO A > EVENTO B
MAIN
MAIN
ISRA
ISRB
ISRA
ISRB
MAIN
ISRB
MAIN
Microcontroladores: Tema 6
Servicio de la interrupcin
El CPU le da servicio a la interrupcin
ejecutando una seccin de cdigo asociado a
la interrupcin.
Se le conoce como rutina de servicio de
interrupcin o ISR
Como al finalizar la interrupcin se debe de
regresar al flujo normal del programa, se
deben de realizar acciones especiales.
10
Microcontroladores: Tema 6
11
Microcontroladores: Tema 6
12
Microcontroladores: Tema 6
Vector de Interrupcin
El PIC18 utiliza el esquema de vector
predefinido.
Es una direccin de la memoria de programa
asignada a la interrupcin (o grupo de
interrrupciones) relacionadas
En el vector de interrupcin tipicamente se
almacena una instruccin de salto o la
direccin especfica donde reside la
subturina de servicio.
13
Microcontroladores: Tema 6
Vector de Interrupcin
El PIC18 utiliza el esquema de vector
predefinido.
Es una direccin de la memoria de programa
asignada a la interrupcin (o grupo de
interrrupciones) relacionadas
En el vector de interrupcin tipicamente se
almacena una instruccin de salto o la
direccin especfica donde reside la
subturina de servicio.
14
Microcontroladores: Tema 6
Vector de Interrupcin
15
Microcontroladores: Tema 6
Vector de Interrupcin
RESET
0X0000
0X0008
3
EVENTO
MAIN
5
ISR
16
Microcontroladores: Tema 6
Vector de Interrupcin
Varias interrupciones puede compartir el
mismo vector de interrupcin
Si este es el caso, en la subrutina de ISR se
identifica el origen de la fuente y se ejecuta
el proceso relacionado con esa interrupcin
en particular
17
Microcontroladores: Tema 6
Microcontroladores: Tema 6
Latencia de interrupcin
A
MAIN
MAIN
Li
ISR
A
Latencia
Tiempo
19
Lf
Microcontroladores: Tema 6
Reset
Es una forma de interrupcin que coloca al
procesador en un estado conocido
incluyendo el contador de programa
Las fuentes de reset son
Maual mediante seal RESET
POR
Otros
20
Microcontroladores: Tema 6
Interrupciones
Se cuenta con 13 registros para controlar la
operacin de las interrupciones:
21
Microcontroladores: Tema 6
Interrupciones
En general las interrupciones tienen
asociados 3 bits para controlar su operacin
Flag Bit: Indica que el evento de interrupcin
ocurri
Enable Bit: Permite que el control del programa
brinque al vector de interrupcin cuando la
bandera est encendida.
Prority Bit: Para seleccionar si es de alta o baja
prioridad
22
Microcontroladores: Tema 6
23
Microcontroladores: Tema 6
Microcontroladores: Tema 6
Operacin de interrupciones
Cuando se responde a una interrupcin,
automticamente se deshabilitan en forma
global el resto de las interrupciones pero
puede volverse a habilitar por cdigo.
Las interrupciones de alta prioridad pueden
interrumpir a las de baja priorida
Las interrupciones de baja prioridad no son
procesadas mientras se ejecute una de alta
prioridad
25
Microcontroladores: Tema 6
Operacin de interrupciones
La direccin de retorno se almacena en el
stack (pila)
El contador de programa (PC) es cargado
con la direccin 0x0008 o 0x0018
Una vez dentro del ISR se puede determinar
el causante especfico de la interrupcin
indagando las banderas en los registros
INTCONx y PIRx
26
Microcontroladores: Tema 6
Operacin de interrupciones
La bandera que gener la interrupcin debe
de ser limpiada por el usuario para evitar que
la interrupcin se vuelva a ejecutar al salir
del ISR
La instruccin RETFIE (Return From
Interrupt) re-habilita las interrupciones )
Par eventos externos (INTx o PORTB) la
latencia de la interrupin ser de entre dos o
tres ciclos de instruccin
27
Microcontroladores: Tema 6
Inportante
28
Microcontroladores: Tema 6
Lgica de interrupcin
29
Microcontroladores: Tema 6
Registros
INTCON: Contienen bits de habilitacin,
prioridad y banderas de interrupcin
PIR: Banderas de interrupcin de los
perifricos (PIR1 a PIR5)
PIE: Bits de habilitacin de las
interrupciones de los perifricos
IPR:Contienen los bits de control de
prioridad (cuando activo IPEN)
30
Microcontroladores: Tema 6
31
Microcontroladores: Tema 6
32
Microcontroladores: Tema 6
33
Microcontroladores: Tema 6
34
Microcontroladores: Tema 6
35
Microcontroladores: Tema 6
36
Microcontroladores: Tema 6
37
Microcontroladores: Tema 6
38
Microcontroladores: Tema 6
39
Microcontroladores: Tema 6
40
Microcontroladores: Tema 6
41
Microcontroladores: Tema 6
42
Microcontroladores: Tema 6
Interrupciones en PIC18
Tres asignadas a un puerto, seales son INT0
a INT2. Se puede configurar con flanco
positivo o negativo
FALLING
EDGE
43
RISING
EDGE
Microcontroladores: Tema 6
Interrupciones en PIC18
Cambio en cualquiera de las seales
asociadas al puerto PORTB/C cuando esas
seales han sido configuradas como entrada
Interrupciones del temporizador TMR0
Interrupciones generadas por los perifricos
internos del microcontrolador, la mayora de
los perifricos tienen asociada una
interrupcin.
44
Microcontroladores: Tema 6
Programacin de interrupciones
en lenguaje C (Compilador C18)
La declaracin de la interrupcin de manejo
de la interrucin se realiza por medio de
#pragma
Debido a que exisen interrupciones de alta y
baja prioridad se requiere hacer las
siguientes declaraciones:
El #pragma antecede a un directivo de compilador que
es particular a un CPU determinado o sistema
operativo
45
Microcontroladores: Tema 6
46
Microcontroladores: Tema 6
47
Microcontroladores: Tema 6
goto startup
goto high_priority_ISR
goto low_priority_ISR
0x0008
0x0018
main
high_priority_ISR
low_priority_IS
R
48
Microcontroladores: Tema 6
Salvamento de contexto
Al ocurrir una interrupcin el PIC18 salva
automticamente WREG, BSR y STATUS y se
puede definir su restauracin al retornar de un ISR
Cuando una interrucin de baja prioridad es
interrumpida por una de baja prioridad los registros
se pueden corromper
Se pueden agregar directivos en el #pragma para
proteger casos de doble interrupcin (ver 6.6.3)
49
Microcontroladores: Tema 6
Programacin de Interrupcin
compilador XC8
El compilador XC8 facilita la definicin de las
rutinas de interrupcin.
Basta declarar dos funciones con la siguiente
estructura para la atencin de alta y baja prioridad
50
Microcontroladores: Tema 6
Reset
51
Microcontroladores: Tema 6
Reset
52
Microcontroladores: Tema 6
Reset
53
Microcontroladores: Tema 6
Supervisorios de voltaje
54
Microcontroladores: Tema 6
55
Microcontroladores: Tema 6
Supevisorio mixto
56
Microcontroladores: Tema 4
Banda Transportadora
TORRETA
SENSOR
CONTENEDOR
MOTOR
BOTON DE
ARRANQUE
CONTROLADOR
BASADO EN PIC18
57
Microcontroladores: Tema 4
Banda Transportadora
El programa de control deber de realizar lo
siguiente:
Esperar el botn de arranque
Contar el nmero de cajas
Si el nmero llega a un MAXIMO parar la
banda transportadora
Encender una torreta
Esperar de nuevo el botn de arranque.
58
Microcontroladores: Tema 4
Banda Transportadora
Seales en sensores y actuadores (las
entradas sern configuradas como
interrupcin).
DETECTAREMOS
TRANSICIN
POSITIVA
RB0 (INT0)
RD0
BOTON
PRESIONADO
MOTOR
ENCENDIDO
1
0
RB2 (INT2)
0
RD1
SENSOR
CAJA PRESENTE
TORRETA
ENCENDIDA
1
0
59
Microcontroladores: Tema 6
Ejemplo
INCIO
INICIALIZAR
ISR INT2
(CAJAS)
ISR INT0
(BOTN)
DEBOUNCE
DEBOUNCE
CUENTA=
CUENTA + 1
ENCENDER MOTOR
APAGAR TORRETA
FIN
FIN
No
CUENTA =
MAXIMO ?
APAGAR MOTOR
ENCENDER TORRETA
CUENTA = 0
60
Microcontroladores: Tema 6
Ejemplo
Configurar INT0 para generar interrupcin
en transicin positiva (termin de pasar la
caja)
Configurar INT2 para generar interrupcin
en transicin positiva (depresin del botn)
Asuma que no existe ninguna otra
interrupcin dada de alta en el sistema
61
Microcontroladores: Tema 6
Compilador C8
62
Microcontroladores: Tema 6
63
Microcontroladores: Tema 6
64
Microcontroladores: Tema 6
65
Microcontroladores: Tema 6
66