Tema 14 Las Interrupciones C. F. G.S. D.P.E. Módulo de Proyectos 1 Las Interrupciones En los PIC Los PIC de la familia 16F8X poseen 4 fuentes de interrupción: • Interrupción externa a través del pin RB0/INT • Interrupción por overflow del timer TMR0 • Interrupción por cambio de estado en alguno de los pines RB7a RB4 del PORTB • Interrupción por finalización de escritura en la memoria de datos EEPROM. C. F. G.S. D.P.E. Módulo de Proyectos 2 Las Interrupciones En los PIC Cuando se produce cualquiera de los sucesos anteriormente mencionados, se produce una petición de interrupción, y si está habilitada (permitida), se desencadenan los siguientes sucesos: 1. Se guarda el valor del PC actual en la pila. 2. Se pone a cero el bit GIE (Global Interrupt Enable), prohibiéndose cualquier otra interrupción. 3. Se carga el PC con el valor 0004h, que es la posición del vector de interrupción del PIC, comenzándose a ejecutar el programa de atención a la interrupción que se encuentra a partir de dicha dirección. 3 Las Interrupciones En los PIC Cada causa de interrupción está controlada por 2 bits. Uno de ellos hace de señalizador, bandera o flag, que indica si la interrupción se ha producido, o no, mientras que el otro funciona bit de habilitación (permiso) o prohibición de dicha interrupción. Existe un tercer bit que puede bloquear (prohibir) todas las interrupciones, este bit es GIE. La lógica de control de interrupciones es la siguiente: C. F. G.S. D.P.E. Módulo de Proyectos 4 Las Interrupciones En los PIC • Lógica de gobierno de las interrupciones C. F. G.S. D.P.E. Módulo de Proyectos 5 El Registro De Interrupciones INTCON Los bits de control de las interrupciones excepto el bit EEIF se encuentran en el registro INTCON (dirección 0Bh del banco 0 y 8Bh del banco 1 y de memoria RAM). Bit 0 RBIF: Flag de estado del puerto B 1:Cuando cambia de estado cualquier línea del puerto B (RB4 :RB7). 0: Ninguna línea ha cambiado Se pone a cero por software Las Interrupciones En los PIC Bit 3 RBIE: Habilitación de la interrupción del puerto B 1:Interrupción permitida 0:Interrupción prohibida. Bit 1 INTF: Flag de estado de la interrupción externa INT, Se pone a cero por software 1: La entrada de la Interrupción se ha activado 0: No hay interrupción externa Bit 4 INTE: Habilitación de la interrupción externa 1:Interrupción permitida 0:Interrupción prohibida C. F. G.S. D.P.E. Módulo de Proyectos 7 Las Interrupciones En los PIC Bit 2 TOIF: Flag de desbordamiento del TMR0 1: El timer 0 se ha desbordado 0: El timer 0 no se ha desbordado Se borra por software Bit 5 TOIE: Habilitación de la interrupción del TMR0 1:Interrupción permitida 0:Interrupción prohibida Bit 6 EEIE: Habilitación de la interrupción de la memoria EEPROM 1:Interrupción permitida 0:Interrupción prohibida C. F. G.S. D.P.E. Módulo de Proyectos 8 Las Interrupciones En los PIC Bit 7 GIE: Habilitación global de interrupciones 1: Todas las Interrupciónes permitidas 0:Todas las Interrupción prohibidas Evidentemente aunque GIE se encuentre a 1 , para que una interrupción se pueda producir, deberá poseer su habilitación específica también a 1. Este bit se pone a 0 automáticamente cada vez que se reconoce una interrupción, para que evitar que se produzca una nueva. Es decir no se permite el anidamiento automático de interrupciones. C. F. G.S. D.P.E. Módulo de Proyectos 9 Las Interrupciones En los PIC Al retornar de una interrupción mediante la instrucción RETFIE, el bit GIE ,se vuelve a activar posicionándose a 1 (permitiendo interrupciones). Para el resto de los FLAG no se ha previsto mecanismo de puesta a cero, por lo que deben ser situados por software. Si esta acción no es llevada a cabo no se podría salir de la interrupción. C. F. G.S. D.P.E. Módulo de Proyectos 10 Las Interrupciones En los PIC El flag EEIF, es el bit 4 del registro EECON1 (dirección 88h) y cuyo interpretación es: 1: La operación de escritura en EEPROM se ha completado con éxito. 0:La operación no se ha completado Este bit se debe poner a 0 por software. C. F. G.S. D.P.E. Módulo de Proyectos 11 Las Interrupciones En los PIC El microcontrolador solo dispone de un vector de interrupciones en la dirección 0004h. Por lo tanto debe ser la propia rutina de atención a las interrupciones la que detecte cual de las posibles causas ha sido la que ha provocado dicha interrupción, derivando a la rutina específica. Al atenderse una interrupción, el único registro que se salva en la pila es el PC, y de idéntica manera a como ocurría en las subrutinas, deberá ser el programador el que debe salvar en la pila aquellos registros de interés, y devolverlos posteriormente a su ubicación. C. F. G.S. D.P.E. Módulo de Proyectos 12 Las Interrupciones En los PIC Resumiendo, el proceso normal cuando trabajemos con interrupciones debe ser: 1. Si se activa un FLAG de interrupción y además GIE y el permiso particular de dicha interrupción se encuentran a 1, se procederá a atender dicha interrupción. CON LO CUAL 2. Automáticamente GIE pasa a valer 0 evitando que se puedan generar nuevas interrupciones. 3. El valor del PC es guardado en la pila C. F. G.S. D.P.E. Módulo de Proyectos 13 Las Interrupciones En los PIC 4 El PC se carga con el valor 0004h, que es el vector de interrupciones. 5 El programador debe comenzar escribiendo en la posición 0004h de memoria de programa un salto a la rutina de atención a la interrupciones. 6 Dentro de la rutina de atención a las interrupciones, lo primero que hay que hacer es salvaguardar los registros que no deseamos que se modifiquen. 7 En esta rutina se debe comprobar la causa que generó la interrupción, testando los flag. C. F. G.S. D.P.E. Módulo de Proyectos 14 Las Interrupciones En los PIC 8. Una vez detectada la causa de interrupción se deberá bifurcar a la rutina específica de tratamiento de esa interrupción. 9. Las últimas acciones de la rutina específica serán: A/ Devolver a los registros sus valores originales B/ Poner a cero el Flag que provocó la interrupción. C. F. G.S. D.P.E. Módulo de Proyectos 15 Las Interrupciones En los PIC 10. La última instrucción que se ejecutará es RETFIE, que hará que se cargue el PC con la dirección que se salvó en la pila (automáticamente), además GIE se posiciona a 1 también automáticamente para permitir nuevas interrupciones. C. F. G.S. D.P.E. Módulo de Proyectos 16 Las Interrupciones En los PIC En las siguientes transparencias se da un ejemplo de cómo determinar cual ha sido la causa de una interrupción, que es lo primero que deberemos hacer, tras haber salvado los registros que no queremos que se corrompan. Es importante que se de cuenta que la prioridad de las interrupciones se establece por el orden en que aparecen en dicho programa. C. F. G.S. D.P.E. Módulo de Proyectos 17 Las Interrupciones En los PIC C. F. G.S. D.P.E. Módulo de Proyectos 18 Las Interrupciones En los PIC