Está en la página 1de 28

INTERRUPCIONES

LECTURA DE
ENTRADAS
ANDRES FERNANDO MERCHAN
RAFAEL ALBERTO GACHA
FERNANDO JIMENEZ
TECNICA DE POLLING
La técnica realizada para la lectura de
entradas al microcontrolador han consistido
en la comprobación cíclica por parte del
programa de la entrada correspondiente
esto se denomina “polling” o por sondeo.
DESVENTAJAS DE LA TECNICA
DE POLLING
Hay que interrogar las entradas en cada
ciclo del programa.
Al periferico se le atiende despues de
realizar la consulta y no cuando solicita la
intervencion del controlador
INTERRUPCIONES
Una interrupción consiste en un mecanismo
se puede interrumpir la ejecución de un
programa, se produce un salto donde se
atiende la interrupción y luego retorna al
desarrollo normal de programa.
Tiene la ventaja de no tener que leer la linea
de entrada, si no que atiende al periferico
mediante una entrada.
El funcionamiento de las interrupciones es
similar al de las subrutinas sin embargo
estas no requieren de la función call
El PIC16F84A dispone de 4 posibles
fuentes de interrupción
Interrupción: INT. Por activación del pin
RB0/INT.
Interrupción RBI: Por cambio de estado en
una o varias de las 4 líneas de mas peso
RB7:RB4 del Puerto B.
Interrupción T01: Por desbordamiento del
Timer 0.
Interrupción EE1. Por la finalización de la
escritura en la EEPROM de datos
FUNCIONAMIENTO DE LA
INTERRUPCION
1) Salva el valor actual del contador del
programa en la memoria de pila.
2) El bit GIE del registro INTCON es puesto en
cero lo que prohíbe cualquier otra interrupción.
3) El PC se carga con el valor 004h, que es la
posición del vector de interrupción
4) Comienza a ejecutarse el programa de atención
a la interrupción que se encuentra A partir de
la dirección 004h
REGISTRO INTCON
Es el registro de control de interrupciones,
esta localizado está localizado en la
dirección 0Bh del banco 0 8Bh del banco 1.
GIE: flag de habilitación global de
interrupción. Se borra automáticamente
cuando se reconoce una interrupción
para evitar que ninguna segunda
interrupción se produzca mientras se
realiza la primera.
• GIE = 0 No autoriza interrupción de
ningún tipo.
• GIE = 1. Autoriza cualquier tipo de
interrupción.
EEIE: Flag que autoriza la interrupción por
escritura completada de un byte de la
EEPROM
EElE = 0. Interrupción EEI deshabilitada
EElE = l. Interrupción EEI habilitada.
T0IE: Flag que autoriza la interrupción por
desbordamiento del Timer 0.
T0IE =0: interrupción T0I deshabilitada
T0IE =1: interrupción T0I habilitada.
INTE: Flag que autoriza la interrupción
externa a través del pin RB0/INT
INTE =0. Interrupción INT deshabilitada.
INTE =1. Interrupción INT habilitada
RBIE: Habilitación de la interrupción RBI.
Flag que autoriza la interrupción por cambio
de estado de las Líneas RB7:RB4 del
Puerto B
RBIE =0. interrupción RBI deshabilitada.
RBIE =1. Interrupción RBI habilitada
T0IF: indica que se produjo una interrupción
por desbordamiento del Timer 0.
T0IF =0. El TMR0 no se ha desbordado
TOIF =1. El TMR0 se ha desbordado.
INTF: lndica que se ha producido una
interrupcion a través del pin RB0/INT
INTF =0. No hay interrupción externa
por el pin RB0/lNT.
INTF =1. Ha ocurrido una interrupción
externa por la linea RB0/INT.
RBlF: indica que se ha producido una
interrupción por cambio de estado de
cualquiera de las líneas RB4 a RB7.
RBIF =0. Ninguna de las entradas RB7
y RB4 ha cambiado de estado.
RBlF =1. Cualquiera de las líneas RB7
a RB4 del Puerto B ha cambiado.
INSTRUCCIÓN "RETFIE"
La instrucción retfie utilizada al final de la
subrutina de interrupción es idéntica a un
retorno de subrutina return. Además coloca
automáticamente a "1" el bit GIE, volviendo
a habilitar las interrupciones.
INTERRUPCIÓN EXTERNA INT

La fuente de interrupciones externa INT es


muy importante para atender eventos
externos en tiempo real. Cuando en la línea
RBO/INT se hace una petición de
interrupción el bit INTF del registro
INTCON se pone a "1" de forma a
automática y si el bit GIE está a "1" , se pone
en marcha el mecanismo ya comentado de
la interrupción.
Mediante el bit INTDEG del registro
OPTlON es seleccionado el flanco activo de
RBO/INT, ya que con éste puesto a "1" el
flanco activo es el ascendente y cuando está
a "0" el flanco activo es el descendente.
El programa de atención a la interrupción
antes de regresar al programa principal
debe borrar el flag INTF, puesto que en caso
contrario al ejecutar ,la instrucción de
retorno de interrupción retfie se volverá a
desarrollar el mismo proceso de
interrupción.
REGISTROS ALTERADOS POR LA
INTERRUPCION
Durante la interrupción el único registro que se
salvaguarda en la pila es el contador de
programa. La subrutina de atención a la
interrupción puede modificar el contenido de
los registros del microcontrolador. Al iniciarla
conviene guardar el valor de los mismos y
restaurarlos con su valor antes de la instrucción
real.
No es predecible cuando se producirá una
interrupción. Si al regreso de la subrutina de
atención a la interrupción los registros no se
encuentran en el mismo estado que antes de la
interrupción, el programa no funcionad
correctamente al usar datos que ya no son
correctos.
A primera vista, salvar y restaurar los registros sin
modificar sus contenidas parece que es una tarea
fácil. El contenido de los registros W y STATUS
deben guardarse primero. junto con los demas
registros que varíen su valor durante la ejecución
de la subrutina de servicio a la interrupción.
A primera vista, salvar y restaurar los registros sin
modificar sus contenidas parece que es una tarea
fácil. El contenido de los registros W y STATUS
deben guardarse primero. junto con los demas
registros que varíen su valor durante la ejecución
de la subrutina de servicio a la interrupción.
La instruccion swapf STATUS,W mueve los datos sin
afectar al flag Z del registro STATUS. Aunque los
conjuntos de 4 bits se invierte en el proceso,
posteriormente son restaurados a su situación
inicial.
Si se empleara la instrucción movf STATUS,W
se corrompería el bit 2.
AVERIGUAR LA CAUSA DE LA
INTERRUPCIÓN
El microcontrolador sólo dispone de un vector de
interrupción en la dirección 004h. Esto quiere decir que,
sea cual sea la fuente de la interrupción, el contador de
programa se carga con la dirección 004h.
Dentro de la subrutina de atención a la interrupción, el
programa debería identificar la causa de la interrupción.
Para ello, debe testear el estado de los flag de
interrupción de cada una de las fuentes habilitadas, para
deducir cual fue la que causo la interrupción y así deducir
que causo la interrupción.
FASES DE UNAINTERRUPCIÓN
Como resumen de todo lo explicado hasta ahora
pasamos a enumerar las acciones que realiza
automáticamente el microcontrolador y las que
cl diseñador debe tener en cuenta a la hora de
confeccionar el programa
1) El programa debe habilitar las interrupciones
correspondientes mediante una instrucción en la
inicialización similar a la siguiente:

movlw b‘10111000' ; Activa interrupción del TMR0


(T0IE), por Banco en RB0 (N)
movwf INTCON ; por cambio en líneas del Puerto B
(RBIE) y la general (GIE).

2) Cuando ocurre una interrupción el flag


correspondiente (T0IF, INTF o RBIF) se activa. Si el bit
de permiso correspondiente (T0IE, INTB o RBIE) esta
"1" y el bit de habilitación de todas las interrupciones
GIE esta a "1", se produce la interrupción.
3) Para evitar que se produzca otra
interrupción mientras se está atendiendo
a otra anterior, el bit GIE se pone
automáticamente a "0" por hardware.

4) El valor del contador de programa (PC)


se guarda en la pila.

5) El PC se carga con el valor 004h, que es


el vector de interrupciones.
6) El programa debe comenzar la subrutina de atención
a la interrupción con un salto a la posición de memoria,
donde se encuentran las instrucciones
correspondientes a la interrupción.

ORG 0 ;Dirección de comienzo del programa


GOTO inicio
ORG 4; Vector de interrupción.
GOTO Seviciointerrupcion.

7) Seguidamente el programa debe guardar todos los


registros que puedan ser modificados por la subrutina
de atención a la interrupción.
8) A continuación, si están habilitadas varias vías de
interrupciones el programa debe explorar el valor de los flag
para determinar la causa de la interrupción.

BTFSC INTCON,INTF ; ¿Interrupción por activación línea


RBO/iNT?
CALL Interrupcion_INT ; Ejecuta Ia subrutina de atención a
interrupción INT.
BTFSC INTCON,RBIF ; ¿Interrupción por cambio en el Puerto B?
CALL Interrupcion_RBI ; Ejecuta la subrutina de atención a
interrupcion RBI
BTFSC INTCON,T0IF ;¿Interrupción por desbordamiento del
TMR0?
CALL Interrupcion_T0I ; Ejecuta la subrutina de atencion a
interrupcion T0l
9) Dependiendo de la causa de la interrupción se
bifurca a la subrutina correspondiente.

10) Una vez finalizado el tratamiento de la


interrupción el programa debe devolver los
valores que tenían los registros antes de
producirse la interrupción.
11) El programa debe borrar los flags que
indican las fuentes de las interrupciones (INTF,
RBIF, T0IF o EEIF) antes del retorno al programa
principal.

12) Cuando llega a la ultima instrucción de la


rutina de interrupción retfie, el contador de
programa se carga con el valor que se guardó
inicialmente en la y el bit GIE se pone
automáticamente a " 1 ".
INTERRUPCION RBI

Para activar la interrupción por cambio de nivel


en los pines <RB7:RB4> los bits RBlE y GIE del
registro INTCON deben de estar a "1", en estas
condiciones cuando se produce un cambio de
nivel en cualquiera de las líneas RB7 a RE4 se
activa el flag RBlF del registro INTCON.

También podría gustarte