Sunteți pe pagina 1din 4

Interrupciones PIC16F84A

Una de las caractersticas ms importantes de los microcontroladores es que tienen la posibilidad de manejar interrupciones.

1. Definicin
Pero, qu es una interrupcin? En trminos simples, se trata de un acontecimiento que hace que el microcontrolador deje de lado lo que se encuentra realizando, atienda ese suceso y luego regrese exactamente donde se qued y contine con lo suyo. La interrupcin tiene la caracterstica de la inmediatez, nace de la necesidad de ejecutar una subrutina en el instante preciso y, por tanto, se considera su intervencin urgente.

2. Tipos
Hay dos tipos de interrupciones posibles, una es mediante una accin externa (es decir por la activacin de uno de sus pines), la otra es interna (por ejemplo cuando ocurre el desbordamiento de uno de sus registros) En el PIC16F84 hay 4 fuentes de interrupciones: Interrupcin INT. Por activacin del pin RB0/INT, que regresa al PIC del modo SLEEP (interrupcin externa). Interrupcin RBI. Por los pines RB4 a RB7, configurados como entrada y en caso de que alguno de ellos cambie de estado (interrupcin externa). Interrupcin T01. Por desbordamiento del registro del Timer 0 (TMR0), cuando este registro pasa de 255 a 0 en decimal 0xFF a 0x00 en hexadecimal (interrupcin interna).

Interrupcin EEI. Al completar la escritura de la EEPROM de datos (interrupcin interna).

3. Funcionamiento
Al momento en que se produzca alguna de las interrupciones mencionadas, se origina una peticin de interrupcin, que der ser aceptada, produce el siguiente mecanismo hardware: 1. Guarda el valor actual del contador de programa (PC) almacenando su contenido en la pila. 2. El bit GIE (Global Interrupt Enable) del registro INTCON es puesto a cero, lo que prohbe que se genere otra interrupcin. 3. El contador de programa (PC) se carga con el valor 004h, que es la posicin del vector de interrupcin. 4. Comienza a ejecutarse el programa de atencin a la interrupcin que se encuentra a partir de la direccin 004h.

4. Flags o banderas Debe haber algo que nos indique la fuente de interrupcin que se ha producido, y estas son las banderas de interrupciones, cada interrupcin tiene su propia bandera y es un bit del registro INTCON, que cambia de estado de 0 a 1 cuando se produce la interrupcin, salvo la ltima que se encuentra en el registro EECON1. Ahora veamos cules son esas banderas: Para la interrupcin INT, la bandera es INTF (Bit1) Para la interrupcin RBI, la bandera es RBIF (Bit0) Para la interrupcin T0I, la bandera es T0IF (Bit2) Para la interrupcin EEI, la bandera es EEIF (Bit4) en el registro EECON1. Si prestas atencin, todas estas banderas terminan en F es decir FLAG. 4.1 Registro INTCON Es el registro para el control de las interrupciones, localizado en la direccin 0Bh del Banco 0 8Bh del Banco 1. Contiene 8 bits de los cuales unos actan como banderas que sealan el estado de la interrupcin y otros como bit de permiso o autorizacin.

GIE: Habilita todas las interrupciones. Se borra automticamente al reconocerse una interrupcin, evitando que ninguna otra se produzca mientras se atiende a la primera. Al retornar de la interrupcin con una instruccin RETFIE, el bit GIE se vuelve a activar ponindose a 1. EEIE: Habilita la interrupcin EEI. Autoriza la interrupcin por escritura completada de un byte en la EEPROM de datos del PIC. T0IE: Habilita la interrupcin T0I. Autoriza la interrupcin por desbordamiento del Timer 0. INTE: Habilita la interrupcin externa INT. Autoriza la interrupcin externa a travs del pin RB0/INT. RBIE: Habilita la interrupcin RBI. Autoriza la interrupcin por cambio de estado de cualquiera de las lneas RB4 a RB7. T0IF: Estado de la interrupcin producida por el TMR0. Indica que se ha producido una interrupcin por desbordamiento del Timer 0. (Debe borrarse por software) INTF: Estado de la interrupcin externa. Indica que se ha producido una interrupcin a travs del pin RB0/INT. (Debe borrarse por software) RBIF: Estado de la interrupcin RBI. Indica que se ha producido una interrupcin por cambio de estado de cualquiera de las lneas RB4 a RB7. (Debe borrarse por software)

Si bien cada flag cambia o se pone a 1 al producirse una interrupcin, es tarea tuya borrarlo o ponerlo a cero nuevamente, ya que si no lo haces el micro estar siempre interrumpido o lo que es lo mismo, creer que la interrupcin se est produciendo continuamente. Una cosa importante a tener en cuenta al usar interrupciones es que cuando estas se producen podramos estar trabajando con registros que pueden ser modificados en la propia interrupcin, como el acumulador o el STATUS. Para que la interrupcin no eche a perder el buen funcionamiento del programa principal conviene guardar los valores de estos registros en otras variables que no vayamos a modificar. Antes de salir de la interrupcin volvemos a restaurar los valores guardados y todo solucionado.

5. Instruccin RETFIE
La instruccin retfie se utiliza al final de la subrutina de interrupcin. Es idntica a un retorno de subrutina RETURN. Adems, esta instruccin cambia automticamente a 1 el bit GIE, lo cual permite habilitar las interrupciones. Al terminar la subrutina de servicio a la interrupcin el programa principal contina donde fue interrumpido. Es importante recalcar que la subrutina de atencin a la interrupcin debe situarse a partir de la direccin 0x004 y debe acabar con la instruccin retfie.

6. Averiguar la causa de la interrupcin


El microcontrolador slo dispone de un vector de interrupcin en la direccin 004h. Esto significa que sin importar la fuente de la interrupcin, el contador de programa se carga con la direccin 004h. Dentro de la subrutina de atencin a la interrupcin, el programa deber identificar la causa de la interrupcin. Para ello, debe examinar el estado de los flags de interrupcin de cada una de las fuentes habilitadas, para deducir cual fue la que caus la interrupcin y as decidir la accin a tomar.

7. Fases de una interrupcin


A forma de resumen, se enumeran las acciones que se realizan automticamente en el microcontrolador y las que el diseador debe tener en cuenta a la hora de realizar un programa: 1. El programa debe habilitar las interrupciones correspondientes, mediante una instruccin en la inicializacin. 2. Cuando se produce una interrupcin, el flag correspondiente se activa. Si el bit de permiso correspondiente est en 1 y el bit de habilitacin de todas las interrupciones GIE est en 1, se produce la interrupcin. 3. Para evitar que se produzca otra interrupcin mientras se atiende a la anterior, el bit GIE se pone automticamente en 0. 4. El valor del contador de programa (PC) se guarda en la pila. 5. El PC se carga con el valor 004h, que es el vector de interrupciones 6. El programa debe comenzar la subrutina de atencin a la interrupcin con un salto a la posicin de memoria, donde se encuentran las instrucciones correspondientes a la interrupcin. 7. En seguida, el programa debe guardar todos los registros que puedan ser modificados por la subrutina de atencin a la interrupcin. 8. Despus, si estn habilitadas varias vas de interrupcin, el programa debe explorar el valor de los flag para determinar la causa de la interrupcin. 9. Dependiendo de la causa de la interrupcin, se bifurca a la subrutina correspondiente. 10. Una vez finalizado el tratamiento de la interrupcin, el programa debe devolver los valores que tenan los registros antes de producirse la interrupcin. 11. El programa debe borrar los flags que indican las fuentes de las interrupciones antes del retorno al programa principal. 12. Cuando llega a la ltima instruccin de la rutina de interrupcin reftie, el contador de programa se carga con el valor que se guard inicialmente en la pila y el bit GIE se pone automticamente en 1.

S-ar putea să vă placă și