Documente Academic
Documente Profesional
Documente Cultură
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).
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.