Tema 7



Interrupciones del microcontrolador PIC 16F87x
Las interrupciones, como el nombre lo sugiere, son eventos que hacen que el microcontrolador PIC deje de realizar lo que está haciendo y pase a ejecutar otra tarea. Al finalizar retorna a su actividad anterior.

El microcontrolador PIC16F88 tiene hasta 12 fuentes de interrupciones, el microcontrolador PIC16F628A tiene 10 y el microcontrolador PIC16F877A tiene 15.

Vídeo : Interrupción PB0
El registro INTCON contiene las banderas de interrupciones generadas por diferentes eventos. También contiene los bits de habilitación global y particular de las distintas fuentes de interrupciones.
 AL igual que la instrucción call, una interrupción genera un desvío del flujo normal del programa, pero la diferencia sustancial es que al generarse la interrupción, el PC (contador de programa) no se dirige a cualquier dirección de la memoria FLASH, sino a la posición 0x04 de la memoria de programa, que es la posición reservada para el tratamiento de las interrupciones. El principal registro para el trabajo con las interrupciones es el:
INTCON
GIE
EEIE
T0IE
INTE
RBIE
T0IF
INTF
RBIF


GIE  (General Interruption Enable)
               Bit de permiso para interrupción general:
               0 = No tiene en cuenta las interrupciones.
               1 = Toma en cuenta las interrupciones.
RBIF    Señalizador de cambio de estado de pines PB:
               0 = No hay cambio de estado        
               1 = Si hay cambio de estado
RBIE  Bit de permiso de interrupción por cambio de estado
               0 = Deshabilitado             
               1 = Habilitado     
INTF  Señalizador de activación de pin RB0/NT:
               0 = No ocurre interrupción en RB0.
               1 = Ocurre interrupción en pin RB0.
INTE  Bit de permiso para interrupción externa:
               0 = Deshabilitado             
               1 = Habilitado
T0IF  Señalizador de desbordamiento en TMR0:
               0 = No se desborda el TMR0.        
               1 = Se desborda el TMR0.
T0IE  Bit de permiso para interrupción por desborde:
               0 = Deshabilitado             
               1 = Habilitado
EEIE  Bit de permiso para interrupción por fin de
               escritura de la EEPROM de datos:
               0 = Deshabilitado             
               1 = Habilitado

  
Primero tenemos que habilitar el GIE para poder hacer cualquier tipo de interrupción, luego consideramos las interrupciones pertinentes a nuestra aplicación con los correspondientes bits de permiso.
Los bits de señalización son los encargados de avisar que evento de interrupción ha ocurrido poniéndose a 1. Los bits de señalización, deben ser puestos a 0 por programar o software, porque de no ser así no se podrá salir de la rutina que atiende la interrupción.
Durante el tiempo que se está ejecutando la interrupción, GIE se pone a cero para evitar tener en cuenta cualquier otro tipo de interrupción. Si se quiere retornar de la interrupción con el GIE nuevamente habilitado, se pone la instrucción 
RETFIE que pondrá a GIE automáticamente a 1.
Interrupción por PB0/INT.

Bits del registro INTCON (microcontrolador PIC16F87x)

Las banderas de interrupciones se activan independientemente del estado de sus bits de habilitación o del bit de habilitación global GIE.
El bit GIE del registro INTCON permite habilitar o deshabilitar la generación de interrupciones. Cuando están habilitadas (GIE=1) y el bit de habilitación particular y la bandera correspondiente se activan, se produce un salto al vector de interrupción (dirección 0x0004). Las interrupciones individuales pueden habilitarse/deshabilitarse a través de sus bits de habilitación en diferentes registros. El bit GIE se borra al producirse un reset, por lo tanto la generación de interrupciones está deshabilitada normalmente.
La instrucción RETFIE se emplea para salir de la rutina de servicio a la interrupción (ISR), así como rehabilitar la generación de interrupciones.
Las banderas de las interrupciones INT, RB y del Timer0 se encuentran en el registro INTCON. Las banderas de interrupción de los periféricos están contenidas en los registros PIR1 y PIR2 (microcontrolador PIC16F877A), mientras que los bits de habilitación correspondientes se encuentran en los registros PIE1 y PIE2 (16F877A). El bit de habilitación de interrupciones de periféricos (PEIE) está en el registro INTCON.

Cuando se brinda atención a una interrupción, el bit GIE es borrado para deshabilitar cualquier interrupción adicional, la dirección de retorno es guardada (pushed) en la pila (stack) y el contador de programa (PC) es cargado con el valor 0x0004. Una vez dentro de la ISR, la fuente de la interrupción se puede determinar analizando las banderas de interrupción. Las banderas tienen que ser borradas por software antes de rehabilitar las interrupciones, para evitar interrupciones repetitivas.
Las interrupciones externas INT o RB4 RB7 pueden generarse cada cierto tiempo como mínimo, que va desde los tres a cuatro ciclos de instrucción, esto depende del instante en que se genera la interrupción. Las banderas de interrupción se activan independientemente del bit de habilitación particular, del bit PEIE o del bit GIE.
Interrupciones INT del microcontrolador PIC
La interrupción externa en el pin RB0/INT se activa por flanco ascendente o descendente, dependiendo del bit INTEDG del registro OPTION_REG. Cuando aparece una transición válida en el pin RB0/INT, la bandera INT0IF del registro INTCON toma un valor de 1. Esta interrupción puede ser habilitada/deshabilitada con el bit INT0IE del registro INTCON. La bandera INT0IF tiene que ser borrada por software dentro de la ISR antes de rehabilitar esta interrupción. La interrupción INT puede despertar al PIC, si el bit INT0IE se programó en 1 antes de ingresar al modo Sleep. 
Interrupciones del Timer 0
El desbordamiento del registro TMR0 (desde 0xFF a 0x00) genera una interrupción, lo cual hace que el bit TMR0IF del registro INTCON sea igual a 1. La generación de esta interrupción se puede habilitar/deshabilitar con el bit TMR0IE del registro INTCON. El bit TMR0IF tiene que ser borrado por software dentro de la ISR antes de rehabilitar esta interrupción. Esta interrupción no puede despertar al microcontrolador PIC, ya que el temporizador está apagado durante el modo Sleep.
Interrupciones RB4 RB7
Un cambio de estado en cualquiera de los pines RB<7:4> genera una interrupción y hace que la bandera RBIF del registro INTCON tome un valor de 1. Esta interrupción puede habilitarse/deshabilitarse con el bit RBIE del registro INTCON. Únicamente los pines configurados como entradas pueden producir esta interrupción. Los pines de entrada RB<7:4> se comparan con el estado anterior que tenían en la última lectura del puerto B. Si no hay coincidencia en todos los pines, se genera la interrupción.
Esta interrupción puede despertar al microcontrolador PIC. El usuario, dentro de la ISR, puede borrar la bandera de interrupción con cualquiera de los métodos siguientes:
  • Lectura o escritura del registro PORTB. Esto concluye la condición de falta de coincidencia.
  • Borrar la bandera RBIF.
Esta interrupción se recomienda para despertar al PIC en caso de presionar una tecla o en el caso de que el puerto B se emplee únicamente para la interrupción RB4 RB7. La lectura continua (Polling) del puerto B no se recomienda mientras se usa la función de interrupción RB.



Programa: 1

Este código, implementa un contador binario que es mostrado en PORTC, el incremento del contador
se produce cada vez que se ejecuta la interrupción por PB0.



Este código, permite rotar un bit en PORTC, cada vez que se desborda el TMR0. los incrementos del TMRO se producen cuando se presenta un flanco de bajada en PA4.







No hay comentarios:

Publicar un comentario