Vous êtes sur la page 1sur 11

IUT Cuman

TEMA 5. INTERRUPCIONES

Microcontroladores

Prof. Luis Zurita

INTERRUPCIONES

IUT Cuman

Las interrupciones son desviaciones del flujo de control del programa originadas asncronamente, por diversos sucesos que no se hallan bajo la supervisin de las instrucciones. Dichos sucesos pueden ser externos al sistema, como la generacin de un flanco o nivel activo en una patilla del microcontrolador, o bien, internos, como el desbordamiento de un contador. Su comportamiento es similar al de la instruccin call de llamado a subrutina. Se detiene la ejecucin del programa en curso, se salva la direccin actual del contador de programa (PC) en la pila (STACK) y se carga el PC con una direccin, que en el caso de una interrupcin es una direccin reservada de la memoria de cdigo, llamada vector de interrupcin. Parejo. Microcontroladores PIC. Pg. 117. 2da Edicin. En el PIC 16F84, este vector de interrupcin est ubicado en la posicin 04H, en donde comenzar la rutina de servicio de la interrupcin. Ejemplo: org 00H ; Vector de origen del programa goto INICIO ; salto a la rutina de programa principal org 04H ; Vector de interrupcin goto INTERR ; salto a la rutina de interrupcin. La idea de colocar una instruccin de salto incondicional, es la de trasladar el flujo del programa a la zona de memoria de cdigo que contiene a la rutina de interrupcin.
Prof. Luis Zurita

IUT Cuman

DIAGRAMA DE FLUJO DURANTE UNA INTERRUPCIN


Programa normal
Instruccin 1 Instruccin 2 Instruccin 3 Rutina de Servicio de Interrupcin Instruccin 1 Instruccin 2
RETFIE

Instruccin 24
Instruccin 25 Instruccin N Fin de programa

Nota: Una Rutina de Servicio de Interrupcin puede ser igual de extensa e incluso ms que el mismo programa principal.

Prof. Luis Zurita

IUT Cuman

DIAGRAMA DE FLUJO RSI

CAUSAS DE INTERRUPCIN
1. 2. 3. 4. Activacin del pin RB0/INT Desbordamiento del TMR0 Cambio de estado de una de los 4 pines de ms peso (RB7:RB4) del puerto B Finalizacin de la escritura en la EEPROM de datos

IUT Cuman

REGISTRO INTCON
Este registro se encuentra ubicado en la posicin 0BH del banco 0 de los registros de funciones especiales (SFR). A continuacin se describirn cada uno de sus bits:

Prof. Luis Zurita

INTCON

IUT Cuman

GIE: (Global Interrupt Enable), Permiso Global de Interrupciones 1: Habilita todas las interrupciones, cuyos bits de permiso individuales tambin las permitan 0: Deshabilita todas las interrupciones EEIE: (EEPROM Interrupt Enable), Permiso de Interrupcin por fin de escritura en la EEPROM 1: Habilita la interrupcin cuando termina la escritura de la EEPROM de datos 0: Deshabilita esta interrupcin TOIE: (TMR0 Overflow Interrupt Enable), Permiso de interrupcin por desborde del TMR0 1: Habilita una interrupcin por desborde del TMR0 0: Deshabilita esta interrupcin INTE: (Interrupt Enable RB0/INT), Permiso de interrupcin por activacin del pin RB0/INT 1: Habilita la interrupcin al activarse RB0/INT 0: Deshabilita esta interrupcin
Prof. Luis Zurita

INTCON

IUT Cuman

RBIE: (RB Port Change Interrupt Enable), Permiso de interrupcin por cambio de estado en RB7:RB4 1: Habilita esta interrupcin 0: Deshabilita esta interrupcin TOIF: (TMR0 Overflow Interrupt Flag), Sealizador de desborde del TMR0 1: Ha ocurrido un desborde del TMR0 0: No se ha desbordado el TMR0 INTF: (RB0/INT Interrupt Flag), Sealizador de activacin del pin RB0/INT 1: Se ha activado RB0/INT 0: No se ha activado RB0/INT RBIF: (RB Port Change Interrupt Flag), Sealizador de cambio de estado en RB7:RB4 1: Pasa a 1 cuando cambia el estado de alguna de estas 4 lneas 0: No ha cambiado el estado de RB7: RB4
Prof. Luis Zurita

SALVANDO EL ENTORNO

IUT Cuman

Salvar el entorno, se refiere a mantener el valor exacto que tienen los registros de trabajo STATUS y W, y cualquier otro de importancia, que no vaya a ser modificado dentro de la subrutina de servicio de interrupcin.
Para salvar el entorno cuando ocurre una interrupcin se recomienda seguir los siguientes pasos: Salvar a w y a STATUS. Almacenar a w en un registro general llamado W_TEMP Almacenar a STATUS en un registro general llamado STATUS_TEMP Se ejecuta la rutina de interrupcin (queda expresada para efectos del ejemplo siguiente) Restauramos a STATUS Restauramos a w NOTA: Los registros generales W_TEMP, STATUS_TEMP, deben ser declarados al inicio del programa, para no generar errores.

Prof. Luis Zurita

SALVANDO EL ENTORNO

IUT Cuman

; **** Rutina para salvar el entorno **** PUSH movwf W_TEMP ; Copiamos w a este registro temporal swapf STATUS,0 ; Intercambiamos STATUS y lo guardamos en w movwf STATUS_TEMP ; Salvamos STATUS en STATUS_TEMP RUT_INT ;Aqu estar la rutina de servicio de interrupcin ; POP swapf STATUS_TEMP,0 ; Intercambiamos nibbles en el registro ; STATUS_TEMP movf STATUS ; Movemos w al registro STATUS, retornando el ; valor original swapf W_TEMP,1 ; Intercambiamos nibbles y lo mantenemos en ; este registro swapf W_TEMP,0 ; Intercambiamos nibbles y lo trasladamos a w ; retornando el valor original que tena antes de ; entrar a la rutina de interrupcin

Microcontroladores

Prof. Luis Zurita

Ejemplo. Realicemos un programa completo que contenga varias interrupciones. Si la causa ha sido la activacin del pin RB0, se debe mostrar un dos en binario en el puerto A, si ha sido un cambio de nivel en RB4:RB7, se debe mostrar el uno en binario en el puerto A y si se ha desbordado el TMR0, se debe mostrar el cuatro en binario en el puerto A.

Programa Principal

RSI

CUANDO UTILIZAR UNA INTERRUPCIN?

IUT Cuman

Una interrupcin es muy importante cuando deseamos realizar una tarea que no dependa de una exploracin constante del programa sobre la misma. Tambin cuando deseamos que nuestro programa responda de forma inmediata y automtica a determinados eventos. Ejemplo del uso de Interrupcin: En los sistemas de control, cuando se necesita un pulsador de parada de emergencia (PARE). En un diseo, cuando se requiere que nuestro circuito cumpla con determinadas tareas, al pulsarse una tecla (LAMP TEST). En el manejo de teclados, se recomienda su uso, ya que se puede meter al microcontrolador en un estado de reposo, ahorrando energa y esperando a que se pulse una tecla para iniciar una rutina de servicio (CLAVE). Cuando almacenamos informacin en la EEPROM y deseamos ser advertidos de que sta se ha terminado (ALMACENAMIENTO). Etc...
Prof. Luis Zurita