El Microcontrolador 8051
CAP 8
CAPITULO 8
Interrupciones
8.1. INTRODUCCION
La comunicacin asncrona de los sistemas perifricos con la CPU, en ambos
sentidos, se puede establecer de dos maneras fundamentales:
a) Consultas (polling): Se comprueban cclicamente, mediante instrucciones
del programa los registros de estado de los dispositivos de E/S. Unas lneas
de dilogo (handshake) establecen el protocolo de comunicacin.
As. en la Figura 8.1 se muestra cmo se establece el dilogo entre un sistema
microcomputador o microcontrolador y dos perifricos mediante el procedimiento
de consultas. Primero el programa pregunta si el bit del Puerlo 0 est activo, esto
quiere decir que el Perifrico 1 solicita la atencin del sistema, en ese caso la CPU
atiende al Perifrico 1. Cuando el proceso termina, el programa activa el bit 1 del
Puerlo 0 para indicar, al Perifrico 1, que el proceso ha finalizado. El mismo
procedimiento para el Perifrico 2.
Las desventajas de este mtodo son:
-En cada ciclo de programa ste tiene que interrogar los bits de consulta.
-Al perifrico se le atiende despus de realizar la consulta y no cuando solicita la
intervencin de la CPU.
b) Interrupcin: Servicio directo entre perifricos y CPU, siempre que sta
desee establecer el dilogo. Este servicio tiene la caracterstica de la
inmediatez, pueden eliminarse total o parcialmente los ciclos de consulta y
permite inhibir la interrupcin cuando se considera que es inoportuna y,
por tanto, perjudicial para la marcha del proceso.
Esta forma de trabajo es inherente al control de procesos en tiempo real.
As, en la Figura 8.2, cuando el Perifrico 1 requiere la intervencin del sistema
microcomputador o microcontrolador activa la interrupcin INT1, si est habilitada
el sistema atender la peticin y ejecutar el proceso correspondiente de atencin
en la RUTINA 1. El mismo procedimiento se establecera para el Perifrico 2.
_________________________________________________________________________
ITMAR, Mazatln
94
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
La importancia de las interrupciones nace de la necesidad de ejecutar un
subproceso en el instante preciso, y por tanto se considera su intervencin
urgente. Cuando termina la ejecucin de este subproceso, la CPU vuelve al
programa principal, continuando su tarea cclica justo donde la dej.
Figura 8.1
Figura 8.2
_________________________________________________________________________
ITMAR, Mazatln
95
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Una interrupcin puede ser inciada:
Por un perifrico o circuito externo ajeno al microprocesador o
microcontrolador a travs de los pines especficos del mismo. En estas
condiciones la interrupcin es externa.
Dentro del propio chip microprocesador o microcontrolador. Entonces la
interrupcin es interna.
Toda interrupcin aceptada conduce a la ejecucin de un subprograma especfico
cuya direccin de comienzo se indica en las posiciones de memoria de una tabla,
que recibe el nombre de tabla de vectorizacin.
8.2. ASPECTOS GENERALES y TIPOS DE INTERRUPCIONES
El Microcontrolador 8052 tiene seis interrupciones, mientras que el 8051 tiene
cinco. La Figura 8.3 muestra los distintos tipos de interrupciones, sealando la
falta de los indicadores que activan TF2 y EXF2 en el 8051 por no tener
implementado el Timer 2.
Figura 8.3
_________________________________________________________________________
ITMAR, Mazatln
96
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Los bits de bandera que generan las interrupciones pueden ser cancelados. en
algunas interrupciones por hardware cuando stas son vectorizadas; no obstante
todos los bits pueden cancelarse por software escribiendo ceros en el registro
correspondiente.
Cada una de estas fuentes de interrupcin pueden ser individualmente habilitadas
o inhabilitadas poniendo uno o a cero el bit correspondiente del registro IE
(Interrupt Enable Regisler) perteneciente a SFR (Special Funclion Register)
(Cuadro 8.1).
Cuadro 8.1
Tabla 8.1
_________________________________________________________________________
ITMAR, Mazatln
97
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Las interrupciones, hacen uso de una tabla, tabla de vectorizacion, en la que se
reservan 8 localidades para cada una de las interrupciones en la memoria de
programas (Tabla 8.2).
Tabla 8.2
En estas 8 direcciones se puede escribir el programa de atencin a la interrupcin
o, como es habitual, mediante un JMP<dir> se desva a una zona de memoria de
programas lo suficientemente extensa para albergar la rutina de tratamiento de la
interrupcin detectada. As por ejemplo, si se habilita la interrupcin exterior (bit
EX0 correspondiente al pin INT0) y el comienzo del programa de tratamiento de la
rutina est ubicado en la direccion 0450H, la tabla de vectorizacin contendr en
la localidad 0003H el cdigo de operacin de la instruccin de salto (y la parte alta
de la direccin del salto si es un salto absoluto AJMP), en la siguiente localidad
0004H el byte alto de la direccin de salto y en la direccion 0005H el byte bajo de
la direccin del salto (Figura 8.4).
Figura 8.4
10.3. EL PROCESO DE INTERRUPCION
_________________________________________________________________________
ITMAR, Mazatln
98
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
8.3. EL PROCESO DE INTERRUPCION EN LOS
MICROCONTROLADORES 8052-/8051
Los indicadores de interrupcin son muestreados en el estado 5, fase 2 (S5P2) de
cada ciclo mquina. Las muestras son escrutadas durante el siguiente ciclo
mquina. El sistema de interrupciones del microcontrolador genera un LCALL al
apropiado vector de interrupciones. Esta situacin se produce salvo que:
Una interrupcin de igualo mayor nivel de prioridad est en ese momento
en proceso.
No haya finalizado la instruccin que en ese momento est procesndose.
La instruccin en proceso es una RETI (retorno de interrupcin) o se est
produciendo un acceso a los registros IE o IP; entonces asegura que una
instruccin ms, al menos ser ejecutada antes de que la interrupcin sea
procesada.
El ciclo de escrutinio se repite con cada ciclo mquina y los valores escrutados
son los que corresponden a la activacin de la interrupcin presente en el S5P2
del ciclo mquina anterior.
Puede suceder que una bandera de interrupcin sea activada y no pueda
responder el sistema por encontrarse en una de las situaciones de bloqueo
comentadas anteriormente.
En estas condiciones puede suceder lo siguiente:
a) Que desaparezca la situacin de bloqueo y que la solicitud de interrupcin siga
activa. En este caso la interrupcin ser tratada por el microcontrolador.
b) Que desaparezca la situacin de bloqueo, pero que en ese intervalo la seal de
solicitud de interrupcin se haya desactivado. En ese caso la interrupcin ser
denegada y deber ser solicitada nuevamente.
El ciclo completo es mostrado en la Figura 8.5, considerando las condiciones
idneas, es decir, cuando el ciclo mquina C2 coincide con el ltimo ciclo de
instruccin que se est ejecutando y que esta instruccin no sea una RETI o un
acceso a los registros IE o IP.
Puede suceder tambin que una interrupcin de un nivel de prioridad mas alto se
active antes del estado S5P2 del ciclo de mquina etiquetado C3 en la Figura 8.5;
de acuerdo con lo dicho anteriormente, esta interrupcin ser vectorizada durante
los ciclos C5 y C6, sin que ninguna instruccin de la rutina de prioridad ms baja
haya sido ejecutada.
_________________________________________________________________________
ITMAR, Mazatln
99
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Con relacin al borrado de los indicadores, una vez servida la rutina de
interrupcin, se ha de decir que en algunos casos, el borrado es automtico,
aspecto denominado como borrado por hardware; en el otro caso, es el
programador el que debe estar pendiente de su borrado; modalidad de borrado
por software.
Figura 8.5
No se produce borrado por hardware en las interrupciones del puerto serie y del
Timer 2.
Los flags de las interrupciones exteriores (INT0 e INT1) son borrados por
hardware cuando se activan por flanco. Si estn activadas por nivel, ste debe
volver a su estado de no activacin> para que salga de la rutina de
interrupcin.
Una vez validada la interrupcin y producido el salto a la rutina de servicio, la CPU
guarda en la memoria pila (stack) el contenido del contador de programa (PC =
Program Counter) y no salvaguarda el registro de estado (PSW).
La rutina de interrupcin debe finalizar con la instruccin RETI, que informa a la
CPU de que la rutina ha finalizado. A rengln seguido se recuperan de la memoria
de pila los dos bytes de direccin del programa principal, instruccin siguiente a la
que en proceso recibi la interrupcin y que concluy antes de pasar al proceso de
tratamiento. Estos dos bytes recargados en el contador de programa (PC)
permiten que se siga ejecutando el programa principal, sin ms que sufrir una
relativa pequea prdida de tiempo.
8.4. NIVELES DE PRIORIDAD DE LAS INTERRUPCIONES
Cada fuente de interrupcin puede programarse individualmente en dos niveles de
prioridad, poniendo a 1 o a 0 su bit correspondiente en el registro IP (Cuadro
8.2) del banco de registros SFR. Como se puede observar en la figura, un 1 en
el bit correspondiente a la interrupcin la sita en el nivel de prioridad ms alto y
un 0 en el nivel ms bajo.
_________________________________________________________________________
ITMAR, Mazatln
100
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Los bits b6 y b7 no estn asignados, y lo mismo pasa con el b5 para el
Microcontrolador 8051, puesto que no tiene Timer2.
Una interrupcin con nivel de prioridad bajo puede ser interrumpida por otra de
nivel de prioridad alto, pero no por otra de nivel de prioridad bajo. Una interrupcin
de prioridad alta no puede ser interrumpida por otra fuente de interrupcin, salvo
por la interrupcin externa RESET.
Cuadro 8.2
Si dos peticiones de interrupcin de distintos niveles de prioridad son recibidas
simultneamente la interrupcin de nivel de prioridad alto es servida. Si la peticin
corresponde a interrupciones del mismo nivel de prioridad y se producen
simultneamente, un escrutinio interno da secuencia al servicio de una manera
predeterminada segn se muestra en la tabla 8.3
Tabla 8.3
_________________________________________________________________________
ITMAR, Mazatln
101
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
As, dentro del mismo nivel de prioridad, hay una segunda estructura de
prioridades determinada por el orden de escrutinio segn la tabla anterior. Esta
prioridad, dentro del mismo nivel, solamente es utilizada para resolver estas
peticiones simultneas.
La Figura 8.6 resume y esquematiza los aspectos ms importantes que han sido
tratados con relacin al tema:
____ ____
INT0 e INT1 pueden ser activas por nivel o flanco.
El registro IE (Interrupt Enable) permite
interrupciones o habilitarlas individualmente.
El registro IP (Interrupt Priority) puede disponer cada interrupcin,
individualmente, en la cola de interrupciones de alta o baja prioridad.
inhabilitar
todas
las
Hasta aqu se ha tratado el tema de las interrupciones de una forma general. A
continuacin se estudia cada uno de los tipos de interrupciones, exceptuando las
de los puertos de comunicaciones.
Figura 8.6
_________________________________________________________________________
ITMAR, Mazatln
102
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
8.5. INTERRUPCIONES EXTERNAS (INT0) E (INT1)
Estas interrupciones externas, como se pueden observar en la Figura 8.6, pueden
ser activas por nivel o por flanco descendente, dependiendo del estado del bit 0
(IT0) para INT0 y del bit 2 (IT1 ) para INT1 en el registro TCON (Cuadro 7.2). Los
flags que activan estas interrupciones son los bit 1 (IE0) y bit 3 (IE1), tambin del
registro TCON.
Cuando se genera una interrupcin externa por flanco del tipo INT0 o INT1, el
indicador se activa (se pone a 1) y se desactiva (se pone a 0), cuando el
servicio de interrupciones vectoriza para la ejecucin de la rutina, entonces se dice
que lo ha borrado el hardware del microcontrolador. Si la interrupcin ha sido
generada por nivel, la seal externa activa el indicador y la puesta a cero del
mismo se hace por software, mediante una instruccin que pone el indicador a
cero actuando sobre el propio bit en el registro correspondiente, naturalmente, una
vez que la seal de activacin de la interrupcin puesta a nivel bajo se desactiva
pasando a nivel alto.
Para ilustrar el funcionamiento y manejo de las interrupciones se propone una
serie de ejercicios significativos para cada tipo de interrupcin. En este apartado
se muestran las interrupciones externas y prioridades.
Ejercicio 8.1. Interrupciones externas. [Link]
Descripcin del programa
El programa consta de un cuerpo principal que pretende simular el funcionamiento
de la pantalla de luces deslizantes del Auto Increible. Un bit se desplaza de
izquierda a derecha y de derecha a izquierda y excitar 8 leds situados a la salida
del Puerto 0 (P0). Una rutina de temporizacin permite modificar la frecuencia de
desplazamiento del bit.
____
En estas condiciones se tiene el efecto referido, pero cuando por el pin 12 (INT0),
interrupcin externa del microcontrolador, se produce un flanco descendente, y
dado que est habilitado este tipo de interrupcin, el microcontrolador ejecuta una
rutina, asociada a la interrupcin, cuyos efectos externos son hacer parpadear
diez veces y simultneamente todos los leds del Puerto 0 (P0) para, una vez
concluida esta secuencia, continuar con el programa principal del bit deslizante.
A continuacin se indican, someramente, las operaciones que van a tener lugar de
una manera secuenciada:
--Cuando el microcontrolador recibe la interrupcin y sta es aceptada, por estar
habilitada (IE), el contador de programas (PC) no se incrementa para ejecutar la
_________________________________________________________________________
ITMAR, Mazatln
103
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
siguiente instruccin, sino que consulta la tabla de vectorizaciones en la localidad
correspondiente al tipo de interrupcin.
--El contador de programas salta a ejecutar la rutina situada en la direccin
sealada en la tabla de vectorizacin.
-Antes de proceder a la ejecucin de la rutina asociada a la interrupcin, guarda
en la pila el PC de la instruccin siguiente en la que fue interrumpido el sistema
para, una vez concluida la rutina de interrupcin, conocer la instruccin que le
corresponda ejecutar y permitir, de esta manera, no romper la secuencia del
programa principal.
-En este punto se recuerda al usuario que guarde en la pila el registro de estado
(PSW) por si es modificado por la rutina y preste atencin a los registros y
variables que son utilizados en comn y no se encuentre con que los valores que
utilizaba en el programa principal han sido modificados por la rutina, lo que
rompera la secuencia del programa principal. En este caso, proceda a guardarlos,
justo al comienzo del programa de la rutina, ya recuperarlos antes de que sta
concluya.
-El regreso de la rutina se efecta colocando al final de la misma, y justo despus
de recuperar los valores de los registros y variables de la pila, la instruccin RETI.
A continuacin se muestra el circuito (Fig. 8.7), el mapa de memoria, y el
programa fuente del ejercicio.
Nota: Es importante Que el interruptor o pulsador utilizado para producir la
interrupcin sea antirrebote) (vase Figura 6.6).
Figura 8.7
_________________________________________________________________________
ITMAR, Mazatln
104
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Configuracin de registros:
Programa Fuente:
RETARDO
INT0
SAL0:
; [Link]
; Desplaza un bit de izda. a dcha. en el Puerto 0 (P0)
;
EQU 0300H
; Comienzo de la RUTINA de RETARDO.
EQU 0400H
; Comienzo de la RUTINA de INTERRUPCION.
;
ORG
JMP
;
ORG
MOV
MOV
MOV
SETB
RLC
0003H ; Vectorizacin de la RUTINA DE INTERRUPCION (INT0).
INT0
; Llamada a la RUTINA DE INTERRUPCION.
0200H
TCON, #01H
IE, #81H
A, #00H
C
A
; Se programa la INTO por flanco.
; Habilitada interrupcin INTO.
; Se pone el CARRY a 1.
; Rotacin de un bit ala izda.
_________________________________________________________________________
ITMAR, Mazatln
105
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
MOV P0, A
CALL RETARDO
JNB
A, 7, SAL0
SAL1:
SAL2:
SAL3:
SAL4:
SAL5:
CAP 8
; Se escribe en el Puerto 0 (P0).
; Se llama a la rutina de RETARDO.
; Se testea el bit 8. Si es < > O se comienza el
; desplazamiento a la dcha.
RRC
MOV
CALL
JNB
JMP
;
A
P0, A
RETARDO
A,0, SAL1
SAL0
ORG
PUSH
MOV
PUSH
MOV
MOV
MOV
DJNZ
DJNZ
DJNZ
POP
MOV
POP
RET
;
0300H
A
A, R0
A
R0, #04H
R1, #20H
R2, #FFH
R2, SAL4
R1, SAL3
R0, SAL2
A
R0, A
A
; Comienzo de la rutina de RETARDO.
; Se guarda el ACC en el stack (PILA).
ORG
0400H
; Comienzo de la rutina de interrupcin INT0.
; pone en intermitencia todos los bits del P0.
PUSH
MOV
PUSH
MOV
PUSH
MOV
MOV
CALL
MOV
CALL
DJNZ
POP
MOV
POP
MOV
POP A
RETI
END
A
A, PSW
A
A, R0
A
R0, #0AH
P0, #FFH
RETARDO
P0, #00H
RETARDO
R0, SAL5
A
R0, A
A
PSW, A
; Se recupera ACC del stack.
; Se guarda en el stack el registro de estado.
; Se guarda. tambin, el registro R0.
; Se recuperan los registros del stack.
_________________________________________________________________________
ITMAR, Mazatln
106
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Ejercicio 8.2. Prioridades. [Link]
Se trata de ilustrar con un ejercicio el manejo del registro de prioridades en las
interrupciones (IP).
Puesto que el usuario est familiarizado con el funcionamiento del ejercicio
anterior, se va a utilizar el mismo para esta demostracin, con una interrupcin
ms, la correspondiente a la entrada exterior activa por flanco descendente
(T2EX), asociada al Timer 2 (ver Figura 7.8).
Cuando se active esta interrupcin se observar un cambio en la secuencia de las
luces; si el programa principal genera un deslizamiento de las luces y la primera
rutina (INT0) produce una secuencia de intermitencia de todos los bits del Puerto
0, la ejecucin de esta rutina (T2EX) produce el intercambio alternativo de los
nibbles bajo y alto del Puerto 0, como se indica a continuacin:
As estar oscilando entre los dos estados hasta ocho veces.
Esquema del circuito (Figura 8.8)
Como se puede observar en la figura, el pulsador pone en marcha
simultneamente las dos interrupciones INT0 y T2EX, ambas activas, como se
podr ver en la inicializacin en flanco descendente. En funcin del valor escrito
en el registro de prioridades (IP) se estudian dos opciones:
____
a) Que se ejecute la interrupcin INT0 y posteriormente T2EX, pulsando una sola
vez.
b) Que se invierta el orden de ejecucin.
_________________________________________________________________________
ITMAR, Mazatln
107
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Figura 8.8
Mapa de memoria
Algoritmo
Como se ha sealado antes, han de observarse, de momento, dos opciones a) y
b). Para que se cumpla la primera opcin, no es necesario programar el registro
de prioridades (IP), puesto que, por defecto, segn se estudi, INT0 tiene mayor
prioridad que T2EX, por esta razn, en este programa:
IP 00H
Para que se cumpla la segunda opcin, a T2EX se le da la prioridad alta ya
lNT0 la prioridad baja, es decir:
_________________________________________________________________________
ITMAR, Mazatln
108
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
PT2 1
IP 20H
PX0 0
Programa fuente
RETARDO
INT0
T2EX
; [Link].
; Desplaza un bit de izda. a dcha. en el Puerto 0 (P0) ,
; adems, presenta otros programas alternativos
;
EQU 0300H
; Comienzo de la RUTINA de RETARDO.
EQU 0400H
; Comienzo de la RUTINA de INTERRUPCION.
EQU 0500H
; Comienzo de la RUTINA de INTERRUPCION (T2EX).
;
; -------------------------------------------------------------------------------------------------------ORG
0003H
; Vectorizacin de la RUTINA de INTERRUPCION
; (INT0).
; Llamada a la RUTINA DE INTERRUPCION.
JMP INT0
;
; -------------------------------------------------------------------------------------------------------ORG 002BH
; Vectorizacin de RUTINA T2EX
JMP T2EX
;
; --------------------------------------------------------------------------------------------------------
SAL0:
SAL1:
ORG
MOV
MOV
MOV
MOV
0200H
TCON, #0lH
T2CON, #08H
IE, #A1H
IP, #00H
MOV
SETB
RLC
MOV
CALL
JNB
A, #00H
C
A
P0, A
RETARDO
A. 7, SAL0
; Programa principal.
; (TCON01H flanco); (TCON00H nivel).
; Se programa la T2EX por flanco.
; Habilitada interrupcin INT0 y T2EX.
; Define prioridad. IP= O por defecto.
: IP= 20H alta prioridad para T2EX.
; Pone a 0" ACC.
; Se pone el CARRY a 1".
; Rotacin de un bit a la izda.
: Se escribe en el Puerto 0 (P0).
; Se llama a la rutina de RETARDO.
; Se testea el bit 8. Si es < > 0 se comienza el
; desplazamiento a la dcha.
; Rotacin de un bit a la dcha.
; Se escribe en el (P0).
RRC A
MOV P0, A
CALL RETARDO
JNB
A,O, SAL1
;Salta si el bit ACC.O es <> de 0.
JMP SAL0
;
; -------------------------------------------------------------------------------------------------------ORG 030H
; Comienzo de la rutina de RETARDO.
PUSH A
; Se guarda el ACC en el stack (PILA).
MOV A, R0
PUSH A
MOV A, PSW
PUSH A
_________________________________________________________________________
ITMAR, Mazatln
109
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
SAL2:
SAL3:
SAL4:
SAL5:
SAL6:
CAP 8
MOV R0, #15H
; Rutina comentada en el Ejercicio 5.5.
MOV R1, #2OH
MOV R2, #FFH
DJNZ R2, SAL4
DJNZ R1, SAL3
DJNZ R0, SAL2
POP A
MOV PSW, A
POP A
MOV R0, A
POP A
; Se recupera ACC del stack.
RET
;
; -------------------------------------------------------------------------------------------------------ORG 0400H
; Comienzo de la rutina de interrupcin INT0
; poniendo en intermitencia todos los bits del P0.
PUSH A
MOV A, PSW
PUSH A
; Se guarda en el stack el registro de estado.
MOV A, R0
PUSH A
; Se guarda, tambin, el registro R0.
MOV R0, #0AH
; Contador de eventos.
MOV P0, #0FFH
CALL RETARDO
MOV P0, #00H
CALL RETARDO
DJNZ R0, SAL5
POP A
; Se recuperan los registros del stack.
MOV R0, A
POP A
MOV PSW, A
POP A
RETI
; -------------------------------------------------------------------------------------------------------ORG 0500H
; Comienzo de la rutina de interrupcin (T2EX).
ANL T2CON, #BFH ; Se borra el flag EXF2 por soft.
PUSH A
MOV A, PSW
PUSH A
MOV A, R0
PUSH A
: Hasta aqu guardar registros en el stack.
MOV R0, #08H
; Contador de eventos.
MOV P0, #0F0H
CALL RETARDO
MOV P0, #0FH
CALL RETARDO
DJNZ R0, SAL6
POP A
: Se recuperan los registros del stack.
MOV R0, A
POP A
MOV PSW, A
POP A
RETI
;
END
_________________________________________________________________________
ITMAR, Mazatln
110
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
En este ejercicio es interesante comprobar, adems de las interrupciones
simultaneas, los siguientes aspectos:
En el caso de que se est ejecutando una interrupcin, qu suceder si se
activa otra de menor o igual prioridad ?
-Lgicamente. la segunda interrupcin no interrumpir la ejecucin de la primera,
pero ser ejecutada, una vez finalizada la primera, porque la memoriza en la cola
de ejecucin de rutinas.
.Qu suceder si ejecutando el programa de la rutina de interrupcin se
activa otra de mayor prioridad?
-Abandona la rutina de interrupcin para ejecutar la segunda, y una vez finalizada
sta regresar a completar la ejecucin de la primera.
Para comprobar este comportamiento se deber independizar las interrupciones
colocando para cada entrada un pulsador.
8.6. INTERRUPCIONES INTERNAS PRODUCIDAS POR EL TIMER 0
y1
Las interrupciones de los Timers 0 y 1 son generadas por TF0 y TF1
respectivamente (Figura 8.3), al producirse un desbordamiento en el registro de
conteo del Timer correspondiente.
Con la intencin de servir de repaso y a modo de resumen se muestran a
continuacin los registros de conteo, los indicadores que son afectados segn el
Timer, y los modos de trabajo.
En cualquier caso, el flag activo es borrado por hardware cuando sea vectorizada
la rutina de atencin a la interrupcin.
_________________________________________________________________________
ITMAR, Mazatln
111
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Ejercicio 8.3. Interrupcin Timer 1 en Modo 1 (16 bits). [Link]
Este ejercicio produce el desplazamiento de un bit a la izda. y se visualiza en el
Puerto 0. El desplazamiento es siempre en la misma direccin. La velocidad de
desplazamiento del bit depende del valor que el usuario le ponga en el Puerto P1
con los ocho conmutadores, segn el peso de los bits.
Objetivos
-Repasar la programacin de los Timers.
-Ver cmo se activa una interrupcin al producirse el desbordamiento en los
Timers.
-Observar el mecanismo de la vectorizacin.
En este caso se utiliza el Timer 1, pudiendo sustituirse sin ningn inconveniente
por el Timer 0.
_________________________________________________________________________
ITMAR, Mazatln
112
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Esquema del circuito (Figura 8.9)
Figura 8.9
SAL0:
Programa fuente
; [Link].
; Desplaza un bit en el puerto P0, con velocidad variable en
; funcin del dato ledo en el puerto de entrada P1
;
ORG 001BH
JMP 030H
; Vector de la interrupcin Timer 1.
;
ORG 0200H
MOV TMOD, #10H ; Timer 1 como temporizador en Modo 1.
MOV IE, #88H
; Validacin de interrupcin Timer 1.
MOV IP, #08H
; Prioridad para el Timer 1 (no es necesaria).
MOV A, #01H
; Se carga el ACC con 01H.
MOV TH1, #00H
; Se carga la parte alta del Timer 1.
MOV TL1, #00H
; Se carga la parte baja del Timer 1.
MOV TCON, #40H ; Se arranca el Timer 1.
NOP
JMP SAL0
; Se cierra en un bucle que no hace nada.
;
; --------------------------------------------------------------------------------------------------------ORG 0300H
; Rutina de desplazamiento y lectura de P1
RL
A
; Desplazamiento a la izq. del ACC.
MOV P0, A
; Saca dato por el P0
MOV TL1, P1
; Lee P1
MOV TH1, P1
RETI
;
END
_________________________________________________________________________
ITMAR, Mazatln
113
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
8.7. INTERRUPCIONES INTERNAS DEL TlMER 2 (slo 8052)
En el microcontrolador 8052 la interrupcin del Timer 2 puede producirse por dos
caminos, segn se active TF2 o/y EXF2. En el Ejercicio 8.2 se estudi la
interrupcin exterior por flanco descendente (T2EX), dentro del contexto de las
prioridades. Ahora le toca el turno al anlisis del funcionamiento de la interrupcin
producida por el Timer/ counter 2.
El flag activado por el Timer 2 deber ser borrado por software, accediendo
previamente al registro T2CON (Cuadro 7.3 y Figura 7.8).
Ejercicio 8.4. El Timer 2 como generador de interrupciones
Este ejercicio es una variante del Ejercicio 8.1 ([Link]). En l se trata de
variar la frecuencia de desplazamiento, segn los datos fijos almacenados
previamente en una tabla de tal forma que el desplazamiento se haga rpido en
los extremos y lento en el centro (Figura 8.10). El Ejercicio 6.4 tambin utilizaba
una tabla.
El valor en hexadecimal que figura entre los bits del puerto de salida (P0) (ver
Figura 8.10) es el que se recargar en los registros contadores TL2 y TH2; estos
valores debern ser cargados previamente en una tabla de datos.
Objetivos
-Estudiar las interrupciones del Timer 2.
-Cargar los registros de conteo con los datos procedentes de una tabla.
-Observar el borrado del flag de interrupcin del Timer 2 por software
Figura 8.10
_________________________________________________________________________
ITMAR, Mazatln
114
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
CAP 8
Esquema del circuito (Figura 8.11)
Figura 8.11
Program fuente
TABLA
AUX
ROTA
TIMER2
; [Link].
;
; Igual que [Link], pero la velocidad de desplazamiento
; es funcin de los valores registrados en una TABLA.
;
EQU 0500H
; Comienzo de la TABLA.
EQU 40H
; Variable que indica el sentido de ROTACION.
EQU 41H
; Variable dato de salida por P0.
EQU 0300H
; Comienzo rutina Timer 2.
;
; -----------------------------------------------------------------------------------------------------------ORG 0500H
;Comienzo de los datos de la TABLA.
.BYTE FFH, 80H, 40H, 00H, 40H, 80H, FFH
ORG 002BH
; Vector de rutina interrupcin (Timer 2).
JMP TIMER2
;
; ------------------------------------------------------------------------------------------------------------ORG 020H
; Programa de inicializacin y principal.
MOV DPTR, #TABLA : Se carga inicio de TABLA en puntero DPTR.
MOV AUX, #01H
; Se inicia movimiento rotacin a izda.
MOV ROTA, #00H ; Se inicia valor salida leds por puerto PO.
SETB C
; C 1. Este es el bit que se desplaza.
MOV IE, #A0H
; Se habilita interrupcin Timer 2.
MOV IP, #40H
; Mxima prioridad Int. Time,2 (no es necesario).
MOV TL2, #00H
; Se carga registro contador Timer 2.
MOV TH2, #00H
_________________________________________________________________________
ITMAR, Mazatln
115
Ing. Rufino J. Domnguez Arellano
El Microcontrolador 8051
SAL0:
SALl:
SAL2:
SAL3:
SAL4:
CAP 8
MOV T2CON, #04H ; Se arranca Time,2.
NOP
; Simula el programa principal.
JMP SAL0
;
; ------------------------------------------------------------------------------------------------------------ORG
ANL
PUSH
MOV
JZ
MOV
RLC
MOV
JMP
MOV
RRC
MOV
MOV
MOV
MOVC
MOV
MOV
MOV
INC
MOV
JZ
MOV
CJNE
MOV
MOV
JMP
MOV
CJNE
MOV
MOV
CLR
POP
RETI
;
END
0300H
; Comienzo de la rutina de interrupcin.
T2CON, #BFH ; Se borra la bandera de interrupcin.
A
; Guardar registros programa principal.
A, AUX
; Para saber el sentido de rotacin que ...
SAL1
; ...corresponde. Si AUX = 01H a la izda ...
A, ROTA
;...si AUX=00H a la dcha.
A
ROTA, A
SAL2
A, ROTA
A
ROTA, A
P0, ROTA
; El contenido de ROTA se saca por el P0.
A, #00H
; Se inicializa ACC.
A, @A+DPTR ; Se obtiene dato de temporizacin de TABLA.
TL2, A
; Se carga dato TABLA en Time,2.
TH2, A
T2CON, #04 ;Se arranca Timer2.
DPTR
; Se incrementa puntero de TABLA.
A, AUX
; Si el bit que se desplaza lleg al extremo ...
SAL3
; ...del recorrido se cambia el sentido de la ...
A, ROTA
; ...rotacin. cambiando el valor de AUX.
A, #80H, SAL4
AUX, #00H
DPTR, #TABLA
; Se inicializa puntero de TABLA.
SAL4
A, ROTA
A, #01H,SAL4
AUX, #01H
DPTR, #TABLA
C
A
_________________________________________________________________________
ITMAR, Mazatln
116
Ing. Rufino J. Domnguez Arellano