Вы находитесь на странице: 1из 6

INTERRUPCIONES

Las interrupciones como se describi en prrafos anteriores son una de caractersticas ms


importantes de este dispositivo ya que permiten detectar eventos, sin el constante testeo del
mismo.
En este apartado veremos como se utilizan y programan las interrupciones.
Existen cuatro fuentes de interrupcin detectables por nuestro microcontrolador de estudio

Interrupcin TMR0
Interrupcin por cambio de estado de las lneas RB4 a RB7
Interrupcin Externa INT
Interrupcin por finalizacin de grabacin de EEPROM.

Antes de describir el manejo y control de cada tipo, debemos conocer los eventos que se
desarrollan en el microcontrolador en el momento en que ocurre una interrupcin.

Para que una interrupcin sea detectada el bit GIE del registro INTCON debe estar activo,
adems de estar activo el bit correspondiente a la habilitacin del tipo de interrupcin que se
desea utilizar. Esta operacin se realiza escribiendo el bit correspondiente del registro INTCON.
En el momento en que ocurre una interrupcin, el procesador, termina de ejecutar la
instruccin en curso y guarda el PC que contiene ya la direccin de la prxima instruccin en la
PILA , despus coloca en el PC la direccin 04h (vector de interrupcin) , luego coloca el bit GIE
a 0 para evitar que se produzca otra interrupcin en el momento en que se esta procesando
la que esta en curso. El programa que controle las interrupciones, deber encargarse de colocar
una instruccin de salto en la posicin 04h para la ISR (rutina de servicio de interrupcin). La
ISR ser la encargada de procesar la interrupcin, detectando primero, el tipo de interrupcin
que se produjo, esto se realiza con una lectura de los bits RBIF, INTF y T0IF.
Al finalizar la ISR con una instruccin de retorno, el PC se cargar nuevamente con la direccin
almacenada en la PILA. El programador deber encargarse de habilitar nuevamente el bit de
interrupcin RBIE, INTE, TOIE, EEIE ya que el procesador los deshabilita pero no vuelve a
habilitarlos cuando finaliza la ISR.

REGISTRO INTCON (direccin 0B h): Este registro se utiliza para definir una serie de
parmetros referidos a las interrupciones.

Descripcin de registro INTCON

RBIF (deteccin de cambio de estado en puerto B, bit 0): Este bit permite determinar un
cambio de estado en los cuatro bits menos significativos del puerto B, cuando se detecta un
cambio de estado este bit se pone a 1. de lo contrario permanecer a 0. Se debe tener en
cuenta que una vez detectado el cambio este bit permanecer a 1 hasta que por programa se
lo vuelva a 0.
INTF (deteccin de interrupcin externa, bit 1): Este bit se pone a 1 cuando se detecta la
activacin del pin de interrupcin externa. Al igual que el bit anterior el valor de este bit debe
ser puesto a cero por programa.

T0IF (deteccin de interrupcin del temporizador, bit 2): Permite detectar el desbordamiento
del temporizador TMR0, cuando este bit se pone a 1 significa que el temporizado se
desbord. Se borra por programa.

RBIE (habilitacin de la interrupcin de cambio de estado del puerto B bit 3): Este bit es de
configuracin y si esta activo, estado 1, permite que se detecte un cambio de estado en el
puerto B. Por el contrario si este bit se encuentra a 0 no se detectaran los cambios de estado
en el puerto B.

INTE (habilitacin de interrupcin externa, bit 4): Este bit, como el anterior, tambin es de
configuracin y permite que se detecte la interrupcin externa s esta a 1, de lo contrario la
interrupcin externa queda desactivada.

T0IE (habilitacin de interrupcin del temporizador, bit 5): Este bit permite detectar la
interrupcin del temporizador TMR0. Si se encuentra a 1 la interrupcin ser detectada. Si se
encuentra a 0 la interrupcin no podr ser detectada.

EEIE (habilitacin de interrupcin de escritura en EEPROM, bit 6): Si este bit es puesto a 1 se
permitir que se produzca una interrupcin en el momento de finalizacin de la memoria
EEPROM de datos.

GIE (Habilitacin general de interrupciones, bit7): Este es l mas importante de todos los bit ya
que si no esta activo (estado 0) no se detectarn ninguna de las interrupciones.

REGISTRO OPTIO
N (registro de opciones, direccin 01h del banco 1): Antes de comenzar con la descripcin de
este registro vamos a explicar una parte de la circuiteria especial que no fue descripta hasta
ahora.

Prescaler (Predivisor): El prescaler es una serie de circuitos por los cuales se puede dividir la
frecuencia del reloj. Este divisor de frecuencia puede ser asignado al watch dog o al
temporizador/contador. En el registro de opciones veremos como se utilizan este perifrico
especial.

Configuracin del registro de opciones

PS0, PS1, PS2 (bits 0,1,2): Estos bits definen el rango por el cual el predivisor, dividir a la
frecuencia del reloj. Este rango queda definido por la siguiente tabla.

PS2 PS1 PS0 TMR0 WDT


0 0 0 1:2 1:1
0 0 1 1:4 1:2
0 1 0 1:8 1:4
0 1 1 1:16 1:8
1 0 0 1:32 1:16
1 0 1 1:64 1:32
1 1 0 1:128 1:64
1 1 1 1:256 1:128

PSA (bit 3): Este bit permite asignar el predivisor al watch dog o al temporizador. Si este bit es
puesto a 1 el predivisor ser asignado al Watch dog, si este bit es puesto a 0 el predivisor
es asignado al temporizador.

TOSE (bit 4): Determina como se har el incremento del temporizador/contador. Con un 1 en
este bit el temporizador se incrementar con cada flanco descendente.
Con un 0 en este bit el temporizador se incrementar con cada flanco ascendente.

TOCS (bit 5): Cuando definimos el funcionamiento del temporizador, dijimos que poda ser
asignado al reloj interno o a una fuente externa. Este bit permite realizar dicha asignacin.
Si este bit es puesto a 1 el temporizador ser asignado a una fuente externa.
Si este bit es puesto a 0 el temporizador ser asignado a contar los pulsos del reloj.

INTEDG (bit 6): Define el tipo de flanco para la interrupcin externa. Si este bit es puesto a 1
se detectara una interrupcin externa con cada flanco ascendente de la misma. Si este bit es
puesto a 0 se detectara una interrupcin externa con cada flanco descendente de la misma.

RBPU (bit 7): Si este bit es puesto a 0 permite conectar cargas pull-up al puerto B. Si es
puesto a 1, las cargas pull-up quedan deshabilitadas.

MEMORIA DE PROGRAMA

Si observamos la arquitectura simplificada veremos que en la memoria de programa se


encuentran dos registros, el vector de reset (direccin 00h) y el vector de interrupciones
(direccin 04 h).

Vector de reset: Este registro contiene la direccin de memoria en donde comienza el


programa. No nos ocuparemos en este apartado de cmo se coloca la direccin de comienzo
volveremos sobre este tema directamente sobre la prctica.

Vector de interrupcin: Es este registro se almacenar la direccin de memoria del comienzo


de la rutina de interrupcin, veremos mas adelante detalles sobre este tema.

Interrupcin TMR0

Esta interrupcin es provocada por el desbordamiento (paso de FF h a 00 h) del TMR0. Para


utilizar el TMR0, se deben considerar algunos detalles importantes.
Como el TMR0 es un contador ascendente, el valor de inicializacin de cuenta debe ser cargado
en complemento a 2, para comprender mejor este concepto veamos el siguiente ejemplo.
Supongamos que queremos contar diez pulsos de reloj.
Si inicializamos el TMR0 con el valor diez (0A h), este contar desde 10 (0A h) hasta 255 (FF),
por ser un contador ascendente.
Pero en cambio si Inicializamos a 246 (F6 h), que es el complemento a 2 de 10 (0A h) contara
desde 246 hasta 255, exactamente diez pulsos.

Consideraciones sobre la temporizacin

Cuando es necesario realizar mediciones de tiempo, en tiempo real, tenga en cuenta las
siguientes ecuaciones
Valor de temporizacin= (4 * Tiempo del oscilador) *valor del preescaler

Valor a cargar en TMR0 = ((valor de temporizacin) / (4 * tiempo del oscilador)) *


valor del preescaler

Programacin del TMR0

Para programar el TMR0 se deben seguir los siguientes pasos

Programar el registro de opciones


Programar el registro INTCON
Inicializar en complemento a 2

No olvide borrar el bit TOIF, para reinicializar el estado de la interrupcin.


El siguiente programa utiliza, como en el ejemplo anterior, la interrupcin del TMR0 para
incrementar un contador (conta2) cada diez pulsos de reloj. Observe el listado para comprender
la programacin y utilizacin del TMR0

list p=16f84

; definicin de etiquetas
temp equ 0x01
opcion equ 0x01
estado equ 0x03
regint equ 0x0b
conta1 equ 0x0c
conta2 equ 0x0d

org 0 ;inicio en posicin 00 de programa


goto inicio ;salta al comienzo del cdigo
org 4 ;direccin de vector de reset
goto inter ;rutina de interrupcin
; programacin y configuracin

inter
bcf regint,7 ;deshabilito interrupciones generales
incf conta2,1 ;incrementa contador
bcf regint,2 ;borra la bandera de interrupcin
movlw 0xf6 ;reinicializa el tmr0
movwf temp
bsf regint,7 ;Habilito interrupciones generales

retfie ;retorno de interrupcin

inicio
;programacin del registro de opciones
; se va programar el registro de opciones para que utilice
; el contador tmr0 contando pulsos del oscilador

bsf estado,5 ;seleccin del banco 1


movlw 0x08 ;programo registro de opciones
movwf opcion
bcf estado,5 ;vuelve a seleccionar el banco 0.

;programacin del registro intcon


;se habilta gie e interrupcin de tmr0
movlw 0xa0
movwf regint

;programacin del timer en complemento a 2 de la cuenta


movlw 0xf6
movwf temp
movlw 0x00 ;puesta a cero de los contadores
movwf conta1
movwf conta2

contador
incf conta1,1
goto contador

end

Interrupcin por cambio de estado en las lneas RB4 a RB7

Cuando se configuran como entradas las lneas RB0 a Rb7 del puerto B pueden programarse
para generar una interrupcin en respuesta a un cambio de nivel de cualquiera de ellas,
respecto del ultimo nivel ledo. Para ello se deben programar los bits GIE para habilitar todas las
interrupciones y RBIE para habilitar la interrupcin en cuestin. Una vez detectada los pases
que se siguen son los mismos que para la interrupcin del TMR0.

Interrupcin externa INT

Por el pin RB0 se puede detectar una interrupcin externa si se programa correctamente el bit
INTEDG del registro de opciones y los bits GIE e INT del registro INTCON.
El bit INTEDG del registro de opciones permite seleccionar si se detectara un flanco ascendente
o descendente como pedido de interrupcin (Ver registro de opciones).
Los bits GIE e INT permiten que la interrupcin sea detectada. Cuando esto ocurre, el contador
de programa se carga con la direccin 04 h, no sin antes guardar su contenido en la pila como
se explico anteriormente.
Par que una interrupcin sea detectada, la seal de pedido de interrupcin debe mantenerse en
estado alto al menos 4 ciclos de instruccin, dependiendo de la frecuencia de reloj este tiempo
ser variable. Definitivamente deben utilizarse circuitos externos que garanticen estos tiempos,
ya que un tiempo menor a 4 ciclos de instruccin podra no ser detectado como una
interrupcin. Exponemos aqu algunos circuitos que pueden ser tiles a tales fines.
Interrupcin por finalizacin de grabacin de EEPROM

Aunque la grabacin de datos en la memoria EEPROM de datos no es tratada en este curso


daremos una breve descripcin del tratamiento de la interrupcin dispuesta para tal fin.
La bandera de interrupcin EEIF del registro EECON1, es puesta a 1 cuando ha finalizado la
escritura de la memoria de datos EEPROM. El bit EEIE del registro INTCON permite la
interrupcin EEIF. Una interrupcin de EEPROM es til porque la escritura de la EEPROM lleva
mucho tiempo. Es normal tardar 10 ms en escribir un byte de datos.

Вам также может понравиться