Академический Документы
Профессиональный Документы
Культура Документы
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.
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.
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.
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
Interrupcin TMR0
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
list p=16f84
; definicin de etiquetas
temp equ 0x01
opcion equ 0x01
estado equ 0x03
regint equ 0x0b
conta1 equ 0x0c
conta2 equ 0x0d
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
inicio
;programacin del registro de opciones
; se va programar el registro de opciones para que utilice
; el contador tmr0 contando pulsos del oscilador
contador
incf conta1,1
goto contador
end
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.
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