• 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