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
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.
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:
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