Vous êtes sur la page 1sur 23

INTERRUPCIONES,

RESET Y RECURSOS
AUXILIARES
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
síncronas.
• Se producen cada vez que se ejecuta dicha instrucción.
• Las interrupciones son desviaciones del flujo de control
del programa originadas asíncronamente por diversos
sucesos que no se hallan bajo la supervisión de las
instrucciones.
• Dichos sucesos pueden ser externos al sistema, como la
generación de un flanco o nivel activo en una patita del
microcontrolador, o bien internos, como el
desbordamiento de un contador.
INTERRUPCIONES

• El comportamiento del microcontrolador ante la


interrupción es similar al de la instrucción CALL de
llamada a subrutina.
• En ambos casos se detiene la ejecución del programa
en curso, se salva la dirección actual del PC en la Pila y
se carga el PC con una dirección, que en el caso de
CALL viene acompañando a la propia instrucción, y en
el caso de una interrupción es una dirección “reservada”
de la memoria de código, llamada Vector de
Interrupción.
INTERRUPCIONES

• En los PIC16X8X, el Vector de Interrupción se halla


situado en la dirección 0004 H, en donde comienza
la Rutina de Servicio a la Interrupción (RSI).
• En general, en dicho Vector se suele colocar una
instrucción de salto incondicional (GOTO) que
traslada el flujo del programa a la zona de la
memoria de programa destinada a contener la
rutina de atención a la interrupción.
CAUSAS DE INTERRUPCION

• Los PIC16X8X tienen 4 posibles causas de interrupciones:


• Activación de la patita RB0/INT.
• Desbordamiento del temporizador TMR0.
• Cambio de estado en una de las 4 patitas de más
peso (RB4 – RB7) de la puerta B.
• Finalización de la escritura en la EEPROM de datos.
• Cada fuente de interrupción dispone de un señalizador
o flag, que es un bit que se pone automáticamente a 1
cuando se produce.
• Además, cada fuente de interrupción tiene otro bit de
permiso, que según su valor permite o prohíbe la
realización de la interrupción.
EL REGISTRO DE CONTROL DE
INTERRUPCIONES: INTCON
• La mayor parte de los señalizadores y bits de permiso de
las fuentes de interrupción en los PIC16X8X están
implementados sobre los bits del registro INTCON, que
ocupa la dirección 0B H del banco 0, hallándose
duplicado en el banco 1.
EL REGISTRO DE CONTROL DE
INTERRUPCIONES: INTCON
EL REGISTRO DE CONTROL DE
INTERRUPCIONES: INTCON
EL REGISTRO DE CONTROL DE
INTERRUPCIONES: INTCON
• Cuando GIE = 0 no se acepta ninguna de las
interrupciones. Si GIE = 1 sólo se aceptan aquellas
fuentes de interrupción cuyo bit de permiso se lo
consienta.
• Siempre que se produzca una interrupción por cualquier
causa, GIE = 0 y el PC se carga con el valor 0004 H, que
es el Vector de Interrupción.
• Para conocer qué causa ha provocado la interrupción
se exploran los señalizadores, tres de los cuales se ubican
en el registro INTCON y el cuarto, EEIF, que se pone a 1
cuando finaliza la escritura de la EEPROM, se halla en el
bit 4 del registro EECON1.
INTERRUPCION EXTERNA INT

• Esta fuente de interrupción es sumamente importante


para atender acontecimientos externos en tiempo real.
Cuando ocurre alguno de ellos, se activa la patita RB0/
INT y se hace una petición de interrupción. Entonces, de
forma automática, el bit INTF = 1 y, si el bit de permiso
INTE = 1, se autoriza el desarrollo de la interrupción.
• Mediante el bit 6, llamado INTDEG, del registro OPTION se
puede seleccionar cuál será el flanco activo en RB0/INT.
Si se desea que sea el ascendente se escribe un 1 en
dicho bit, y si se desea que sea el descendente se
escribe un 0.
INTERRUPCION EXTERNA INT

• Si INTE = 1 y se aplica un flanco activo en RB0/INT, el


señalizador INTF se pone a 1 automáticamente y se
solicita una interrupción, que es aceptada cuando GIE =
1.
• Antes de regresar al programa principal hay que borrar
INTF por programa, puesto que en caso contrario al
ejecutar la instrucción de retorno RETFIE se volvería a
desarrollar el mismo proceso de interrupción.
INTERRUPCION POR
DESBORDAMIENTO DEL TMR0
• Cuando TMR0 se desborda y pasa del valor FF H al
00 H, el señalizador T0IF se pone automáticamente a 1.
Si, además, el bit de permiso de la interrupción del TMR0,
T0IE = 1 y el bit de Permiso Global de Interrupciones GIE =
1, se produce una interrupción.
• Si no se recarga el TMR0 cuando se desborda, sigue
contando desde 00 H a FF H.
• En cualquier momento se puede leer y escribir este
registro, pero cada vez que se escribe se pierden dos
ciclos de reloj para la sincronización.
INTERRUPCION POR CAMBIO DE ESTADO
EN LAS LINEAS RB4-RB7 DE LA PUERTA B
• Esta interrupción está diseñada específicamente para
detectar la pulsación de una tecla correspondiente a un
teclado matricial, que se explora con 4 líneas de E/S.
• Para esta función se destinan las líneas RB4 : RB7 de la
Puerta B, que cada vez que cambia el estado lógico de
una de ellas se fuerza al señalizador RBIF a ponerse a 1, y
si los bits de permiso RBIE = GIE = 1 se autoriza la
interrupción.
INTERRUPCION POR FINALIZACION DE LA
ESCRITURA EN LA EEPROM DE DATOS
• El tiempo típico que tarda en desarrollarse una
operación de escritura en la EEPROM de datos de los PIC
16X8X es de 10 ms, que es considerable comparado con
la velocidad a la que el procesador ejecuta
instrucciones.
• Para asegurarse de que se ha completado la escritura y
puede continuarse con el flujo de control del programa
es aconsejable manejar la interrupción que se origina al
finalizar la escritura, que pone automáticamente el
señalizador EEIF a 1, y se autoriza siempre que los bits de
permiso EEIE = GIE = 1.
MODO DE REPOSO O DE BAJO
CONSUMO
• Este modo de funcionamiento de los PIC está
caracterizado por el reducido consumo de energía que
requiere y está muy recomendado en aquellas
aplicaciones en las que hay largos períodos de espera
hasta que se produzca algún suceso asíncrono, como la
pulsación de una tecla. En dichos períodos el
procesador está inactivo.
• El consumo típico del PIC es de 2 mA,
aproximadamente, reduciéndose a menos de 10 uA en
el Modo de Reposo, lo que permite alimentarle con una
pequeña pila durante casi dos años.
MODO DE REPOSO O DE BAJO
CONSUMO
• Para entrar en el modo de Reposo hay que ejecutar la
instrucción SLEEP y se produce una situación muy especial de
funcionamiento que parece como si el sistema se ha
«congelado», requiriendo el mínimo suministro de energía para
mantener el estado del procesador sin ninguna actividad.
• Para salir del estado de Reposo (despertar) existen tres
alternativas:
• 1. Activación externa de MCLR# para provocar un Reset.
• 2. Desbordamiento del Perro Guardián si quedó operativo
en el modo de Reposo.
• 3. Generación de una interrupción. En este caso, como
TMR0 está parado sólo pueden producirse los otros tres tipos
de interrupción.
RESET

• Los PIC16X8X tienen cinco causas que provocan la


reinicialización del sistema, consistente en cargar al PC
con el valor 0000 H (Vector de Reset) y poner el estado de
los bits de los registros específicos (SFR) con un valor
conocido.
• 1° Conexión de la alimentación, POR (Power On Reset)
• 2° Activación de la patita MCLR# (Master Clean Reset)
en funcionamiento normal.
• 3° Activación de la patita MCLR# en estado de Reposo.
• 4° Desbordamiento del Watchdog en funcionamiento
normal.
• 5° Desbordamiento del Watchdog en estado de
Reposo.
RESET
• En la Tabla se presenta el estado lógico que adquieren
los registros SFR de la memoria de datos cuando se
provoca un Reset por una de las cinco causas posibles.
RESET POR FALLO EN LA
ALIMENTACION (BROWN OUT)
• Se produce un fallo en la alimentación cuando el voltaje
de alimentación VDD desciende por debajo del valor
mínimo, sin llegar a cero, y luego se recupera. En esta
situación es preciso provocar un Reset.
• Para generar un Reset en un PIC16X8X cuando hay un
fallo en la alimentación hay que colocar un circuito
externo de protección, como el que se muestra en la
figura siguiente.
RESET POR FALLO EN LA
ALIMENTACION (BROWN OUT)
PROGRAMACION EN SERIE DE LOS
PIC16X8X
• Los PIC 16X8X permiten que se grabe en su memoria de
código el programa sobre el mismo circuito de la
aplicación.
• La programación en serie de los PIC 16X8X requiere 5
líneas, dos de las cuales se destinan a soportar los impulsos
de reloj de la transmisión (RB6) y los bits de información
(RB7), mientras que las otras tres soportan VDD, tierra y la
tensión especial de programación Vpp, que oscila entre 12
y 14 V.
• El microcontrolador pasa al modo de programación
colocando a nivel bajo las líneas RB6 y RB7 y aplicando la
tensión de programación Vpp a la patita MCLR#/Vpp.
• A partir de ese momento por RB6 se transmiten los impulsos
de reloj y por RB7 se transfieren los bits de datos en serie.
PROGRAMACION EN SERIE DE LOS
PIC16X8X