Beruflich Dokumente
Kultur Dokumente
1.1- INTRODUCCION
La familia de microcontroladores de 8 bits MCS-51 esta constituida, entre otros, por los
siguientes dispositivos:
Acumulador A
El registro A es el mas utilizado por el repertorio básico de instrucciones (RBI). El 80% de las
operaciones lo utilizan como uno de sus operandos.
Registro B
Este es el registro o la palabra de estado del procesador y la función de cada uno de sus bits es
la siguiente:
C AC F0 RS1 RS0 OV - P
Puntero de Pila SP
El puntero de pila es de 8 bits de longitud. Este es incrementado antes que el dato sea
almacenado en la ejecución de las instrucciones PUSH y CALL. El SP es inicializado en el
lugar 07h después del reset, pero puede ubicarse en cualquier lugar del área de memoria
RAM interna que posee el chip.
Este esta formado por un byte alto DPH y un byte bajo DPL. Su función especifica es la de
mantener una dirección de 16 bits. Este también puede considerarse como un registro de 16
bits o 2 registros independientes de 8 bits.
P0, P1, P2, y P3, son los latches de los SFR de las puertas 0, 1, 2 y 3 respectivamente.
El buffer de datos de la puerta serie, esta compuesto por dos registros separados, un registro
buffer de transmisión y un registro buffer de recepción. Cuando un dato es llevado a SBUF,
este es almacenado en el registro de transmisión desde donde será transmitido en forma serie;
cuando el dato es leído desde SBUF, este proviene desde el registro de recepción.
Registro timers
Los pares registros (TH0,TL0), (TH1,TL1) y (TH2,TL2) son los contadores de 16 bits para los
timers 0, 1 y 2 respectivamente.
Registros de Control
Las 4 puertas en el 8051 son bidireccionales. Cada una consta de un latch (Registro de
funciones especiales P0 hasta P3), un driver de salida y un buffer de entrada.
Los driver de salida de las puertas 0 y 2, y el buffer de entrada de la puerta 0, son utilizados en
el acceso a la memoria externa. En esta aplicación, la puerta 0 funciona como el byte bajo del
bus de direcciones multiplexado en el tiempo con el bus de datos. Por la puerta 2 se
exterioriza el byte alto de la dirección de memoria externa cuando esta es de 16 bits. Cuando
la dirección es de 8 bits la puerta 2 funciona en forma normal.
Los terminales de la puerta 3 y dos terminales de la puerta 1 del son multifuncionales. Estos
no solo son pines de entrada salida sino que también realizan funciones especiales que se
describen a continuación:
La figura 1.4 muestra el diagrama básico funcional de un bit para cada una de las 4 puertas. El
latch (un bit en el SFR de la puerta) esta representado como un FF tipo D, el cual cargara un
valor desde el bus interno en respuesta a una señal de "escritura al latch" desde la CPU. La
salida Q del FF se conectará al bus interno a través de un buffer habilitado por la sen~al de
"lectura del latch" desde la CPU. El pin de la puerta se conectará al bus interno mediante el
buffer activado por la señal de "lectura del pin" desde la CPU. Algunas instrucciones que leen
una puerta activan la señal de "lectura del latch" y otras activan la señal de "lectura del pin"
(ver 1.3.4).
En la ejecución de una instrucción que modifica el valor del latch de una puerta el nuevo valor
no es capturado por el latch inmediatamente sino que lo hace en el último ciclo de maquina de
la instrucción, debido a un retardo provocado por sincronismos internos.
Cuando la salida de información genera un cambio de 0 a 1 en las puertas P1, P2 o P3, la
circuitería interna esta diseñada de manera tal que transistores de efecto de campo,
funcionando como pullup transitorios, proveen una mayor velocidad de transición aportando
corrientes del orden de los 30mA en tecnología HMOS.
Los buffers de salida de las puertas 1, 2 y 3 pueden manejar, cada uno, 4 entradas TTL (LS).
Estas puertas en versiones HMOS pueden ser manejadas por cualquier circuito TTL o NMOS.
Para el caso de HMOS y CHMOS se pueden conectar a salidas "colector abierto" o "drenaje
abierto", pero hay que notar que las transiciones de 0 a 1 no serán rápidas.
Los buffers de salida de la puerta 0 pueden manejar, cada uno, 8 entradas TTL (LS), ellas
requieren pullups externos para manejar entradas NMOS, excepto cuando están siendo usadas
como el bus de datos y direcciones.
Dentro del RBI hay instrucciones que permiten leer el pin o el latch correspondiente de las
puertas de salida. Las instrucciones que leen el latch son aquellas que están listadas a
continuación, cuando el operando destino es una puerta o un bit de una puerta, caso contrario
leerán el pin.
Esto requiere que versiones sin ROM tengan /EA cableada en bajo para habilitar los 4K mas
bajos (8K en el 8032) a ser buscados desde la memoria externa de programa.
La señal de habilitación de lectura para busquedas externas es /PSEN. Cuando la CPU esta
accediendo a la memoria externa de programa, /PSEN se activa dos veces cada ciclo (excepto
durante una instrucción MOVX), aunque el byte buscado no se necesite en ambas
oportunidades en la instrucción actual. No confundir este señal con /RD, que cumple la misma
función pero para lectura de memoria externa de datos.
En algunas aplicaciones es deseable ejecutar un programa desde la misma memoria que esta
siendo utilizada para almacenar datos. En el 8051, los espacios de memoria externa de datos y
programa pueden combinarse haciendo el producto lógico de /PSEN y /RD. Una AND de
estas dos señales produce una habilitación de lectura activa en bajo que puede utilizarse para
la memoria combinada. Ya que el ciclo de /PSEN es mas rapido que el ciclo de /RD, la
memoria externa necesita ser tan rápida como el ciclo de /PSEN.
1.5- TIMERS/CONTADORES
El 8051 tiene dos registros timers/contadores de 16 bits: Timer 0 y Timer 1. El 8052 tiene tres,
Timers 0, 1 y 2; y los tres pueden trabajar como timers o como contadores de eventos.
En la función "Timer", el registro es incrementado cada ciclo de maquina. De esta manera,
puede pensarse como contador de ciclos de maquina. Debido a que un ciclo de maquina tiene
12 periodos de reloj, la velocidad de la cuenta será 1/12 de la frecuencia del oscilador.
En la función "Contador", el registro es incrementado con el flanco negativo del pin de
entrada externa correspondiente, T0, T1 o T2 (en el 8052). En este caso toma dos ciclos de
maquina reconocer la transición de 1 a 0, por lo tanto la máxima velocidad de cuenta es 1/24
de la frecuencia del oscilador. No existe restricción sobre el ciclo de actividad de la señal de
entrada externa, pero para asegurar que un nivel dado sea muestreado al menos una vez antes
de que cambie, debería mantenerse por al menos un ciclo de maquina completo.
Además de la selección del timer o contador, el Timer 0 y el Timer 1 tienen cuatro modos de
operación. El timer 2 del 8052, tiene tres modos de operación: "captura", "auto-recarga" y
"generador de baud rate".
(MSB) (LSB)
GATE C/T M1 M0 GATE C/T M1 M0
TIMER 1 TIMER 0
GATE:
Control de compuerta cuando este en 1. El timer/contador "x" esta habilitado solo
mientras el pin INTx es alto y TRx (pin de control) es 1. Cuando este es 0 el Timer x
esta habilitado si el bit de control TRx es 1.
C/T:
Selector de timer o contador. En cero opera como timer (entrada desde el reloj
interno). En 1 la operacion es como contador (entrada desde el pin "Tx").
M1,M0:
0 0 Funciona como el timer de MCS 48 (modo 0), aqui TLx trabaja como divisor de
5 bits.
0 1 Contador/Timer de 16 bits (modo1). THx y TLx estan en cascada, no hay
divisor.
1 0 Contador timer de 8 bits con auto recarga (modo 2). THx mantiene un valor, el
cual sera recargado en TLx cada vez que exista overflow.
1 1 Timer 0:
TL0 es un timer contador de 8 bits controlado por los bits de control del timer 0.
TH0 es un timer de 8 bits controlado solo por los bits de control del timer 1
1 1 Timer 1:
Timer/contador 1 detenido.
REGISTRO TCON
(MSB) (LSB)
TF1 |TR1 TF0 TR0 IE1 IT1 IE0 IT0
TF1:
Flag de desborde del timer 1. Puesto en 1 por hardware cuando el timer/contador 1
desborda. Puesto en cero por hardware cuando el procesador pasa a ejecutar la rutina
de interrupción.
TR1:
Bit de puesta en marcha del timer 1. Puesto en 1/0 por programa para poner en
funcionamiento o detener el timer/contador.
TF0:
TR0:
Idem TR1.
IE1:
Flag de interrupción 1. Puesta en uno por hardwarwe cuando se detecta un flanco de
pedido de interrupcion ingresado por INT 1. Puesto en cero cuando la interrupción es
procesada.
IT1:
Bit de control de la interrupción 1. Puesta a 1/0 por programa para especificar si el
disparo de la interrupción externa, será por flanco de bajada o nivel bajo.
IE0:
Idem IE1.
IT0:
Idem IT1.
MODO 0
Poniendo el Timer 1 o el 0 en modo cero hace que se comporte como el Timer del 8048, el
cual es un contador de 8 bits, con un divisor de frecuencia de hasta modulo 32. Ver fig. 1.5.
En este modo, el registro del Timer es configurado como un registro de 13 bits. Debido a que
el contador recicla, cuando pasa por cero, coloca en uno el flag de interrupción TFx del
TCON. La entrada es habilitada cuando TRx = 1 y el GATE = 0 ó INTx = 1 (colocando
GATE = 1, permite al Timer ser controlado por la entrada externa INTx, para facilitar
mediciones de ancho de pulso). TRx es un bit de control en el SFR TCON, y GATE esta en el
SFR TMOD.
El registro de 13 bits esta compuesto por los 8 bits de THx y los 5 bits mas bajos de TLx. Los
3 bits superiores de TLx son ignorados. Colocando el flag de puesta en marcha TRx en 1, no
borra los registros.
El modo de operación 0 es igual para el Timer 0 y el Timer 1.
MODO 1
El Modo 1 es igual al Modo 0, excepto que el registro del Timer, funcionara con 16 bits.
MODO 2
El Modo 2 configura el registro del Timer como un contador de 8 bits (TLx), con recarga
automática, como se muestra en la figura 2.6. El desborde desde TLx no solo coloca en 1 a
TFx, sino que también recarga TLx con el contenido de THx, el cual es precargado por
programa. La operación de recarga deja a THx sin modificación.
El modo de operación 2 es valida para el Timer 0 y el Timer 1.
MODO 3
1.5.3- TIMER 2
REGISTRO T2CON.
TF2:
Flag de desborde del timer 2, es puesto en uno cuando se produce desborde, debiendo
ponerse a cero por soft. TF2 no será puesto en 1 cuando RCLK = 1 o TCLK = 1.
EXF2:
RCLK:
Flag del reloj de recepción. Cuando es puesto en uno, causa que la puerta serie utilice
los pulsos de desborde del timer 2, como el reloj de recepción en los modos 1 y 3.
RCLK = 0 causa que el desborde del timer 1 sea utilizado como el reloj de recepción.
TCLK:
Flag del reloj de transmisión. Cuando es puesto en uno, hace que la puerta serie utilice
los pulsos de desborde del timer 2, como el reloj de transmisión en los modos 1 y 3.
RCLK = 0 causa que el desborde del timer 1 sea utilizado como el reloj de transmisión.
EXEN2:
Flag de habilitación externo del timer 2. En uno permite que una captura o recarga
ocurra como resultado de una transición negativa en T2EX, si el timer 2 no esta siendo
utilizado como reloj de la puerta serie. EXEN2 = 0 causa que el timer ignore los eventos
en T2EX.
TR2:
Control de puesta en marcha/detención del timer 2. TR2 = 1 pone el timer 2 en
funcionamiento.
C/T2:
Selección de contador o timer.
0 = timer interno (f osc. / 12)
1 =contador de eventos externos (disparado en el flanco negativo de T2EX)
CP/RL2:
Flag de captura/recarga. En uno, las capturas ocurrirán con las transiciones negativas de
T2EX si EXEN2 = 1. Cuando es cero, las autorecargas ocurrirán con el desborde del
timer 2 o con las transiciones negativas en T2EX cuando EXEN2 = 1. Si RCLK = 1 o
TCLK = 1, este bit se ignora y el timer es forzado a autorecarga por su desborde.
En el modo captura hay dos opciones que se pueden seleccionar con el bit EXEN2 del
T2CON. Si EXEN2 = 0 el timer 2 es un timer o contador de 16 bits, el cual cuando se produce
un desborde coloca el bit TF2 en uno, de esta forma se puede utilizar para generar una
interrupción. Si EXEN2 = 1, el timer 2 trabaja en forma similar a la opción anterior, pero con
la característica adicional, que una transición de 1 a 0 en la entrada externa T2EX hace que el
valor actual en los registros del timer 2, TL2 y TH2, sean capturadas en los registros RCAP2L
y RCAP2H, respectivamente. Además la transición en T2EX produce que el bit EXF2 en
T2CON, sea puesto en uno y este al igual que TF2 pueda generar una interrupción. Ver fig
1.8.
En el modo de autorecarga, existen también dos opciones, las que se seleccionan mediante el
bit EXEN2 del T2CON. Si EXEN2 = 0, cuando el timer 2 desborda, no solo pone TF2 en uno
sino que también hace que los registros del timer 2 sean recargados con el valor de los
registros RCAP2H y RCAP2L y siga la cuenta. Los registros RCAP2H y RCAP2L son
precargados por programa.
Si EXEN2 = 1 el timer 2 hace lo anteriormente descripto, pero con la característica adicional
que una transición de 1 a 0 en la entrada externa T2EX, también disparara la recarga de los 16
bits y colocara en 1 a EXF2. Remitirse a figura 1.9.
El modo generador de Baud Rates se selecciona con RCLK = 1 y/o TCLK = 1 y será visto en
la descripción de la puerta serie.
La puerta serie prevista en el microcomputador es Full Duplex, lo que significa que puede
transmitir y recibir simultáneamente. Posee un buffer receptor que le permite comenzar la
recepción de un segundo byte, sin que el byte recibido previamente haya sido leido desde el
registro de recepción (sin embargo si el primer byte no ha sido leido en el momento en que la
recepción del segundo byte termina, el primer byte se perdera).
A los registros de transmisión y recepción de la puerta serie se accede a través del registro de
funciones especiales SBUF. Escribiendo en SBUF se carga el registro de transmisión y
leyendo SBUF se accede al registro de recepción, físicamente separados. La puerta serie puede
operar en cuatro modos:
Modo 1: Diez bits son transmitidos (a través del TXD) o recibidos (a través del RXD). Un bit
de comienzo (0), ocho bits de datos (el LSB primero) y un bit de parada. En la recepción el bit
de stop se carga en RB8 del SCON. El Baud Rate es variable.
En los cuatro modos, la transmisión es iniciada por alguna instrucción que use SBUF como
registro destino. La recepción es iniciada en modo cero por la condición RI = 0 y REN = 1 del
SCON. La recepcion se inicia en los otros modos por la llegada del bit de comienzo si REN =
1.
En los modos 2 y 3 se debe cargar TB8 antes de escribir SBUF.
REGISTRO SCON
SM0,SM1:
SM2:
Habilita la característica para la comunicación entre procesadores en los modos 2 y 3.
En el modo 2 o 3, si SM2 es puesto en uno, luego RI no será activado si el noveno bit
de datos recibido (RB8) es = 0. En el modo uno, si SM2 = 1 luego RI no será activado
si no fue recibido un bit de stop valido. En el modo 0, SM2 deberá ser cero.
REN:
Habilita la recepción serie. Puesto en uno por programa para habilitar la recepción.
Cuando por soft es puesto en cero inhibe la recepción.
TI:
Es el flag de interrupciones de transmisión. Puesto en uno por hardware al final del
tiempo del octavo bit en modo 0, o en el comienzo del bit de stop en los otros modos.
Este bit debe ser puesto a cero por programa.
RI:
Es el flag de interrupciones de recepción. Colocado en uno por hardware al final del
octavo bit en el modo 0, o en la mitad del bit de stop en los otros modos, este bit debe
ponerse a cero por programa.
El baud rate en Modo 2 depende del valor del bit SMOD del SFR PCON. Si SMOD = 0 (el
cual es su valor despues de un reset), el baud rate es la frecuencia del oscilador/64. Si SMOD
= 1, el baud rate es la frecuencia del oscilador/32.
Modo 2
En el 8051, el baud rate en los modos 1 y 3 estan determinado por por la velocidad de
desborde del timer 1. En el 8052, estos baud rates pueden determinarse por el timer 1, o por el
timer 2 o ambos (por ejemplo uno para transmisión y otro para recepción)
El baud rate, en los modos 1 y 3 esta determinado por la velocidad de desborde del timer 1 y
el valor de SMOD de la siguiente forma.
Modos 1,3
Modos 1 y 3
2 SMOD Frecuencia del oscilador
Baud Rate = ------------ X ------------------------
32 12 x [256-(TH1)]
Se pueden asegurar baud rates muy bajos con el timer 1 dejando las interrupciones de timer 1
habilitadas y configurando el timer para funcionar como un timer de 16 bits (nibble alto del
TMOD = 0001B), y utilizando la interrupción del timer 1 para hacer una recarga de los 16 bits
por programa, la tabla siguiente da los baud rates obtenidos con el timer 1
TIMER 1
BAUD RATE FOSC SMOD C/F MODO VALOR DE RECARGA
Modos 1,3
El timer puede configurarse como timer o como contador. En las aplicaciones mas tipicas es
configurado para operar como timer (C/T2 = 0). La operación "TIMER" para el timer 2 es un
poco diferente cuando esta siendo utilizado como generador de baud rate. Normalmente,
debería incrementarse con cada ciclo de maquina ( a la frecuencia de oscilación / 12 ). Como
un generador de baud rate, sin embargo, se incrementa en cada estado, es decir a la frecuencia
de oscilador / 2. En este caso el baud rate viene dado por la formula:
Modos 1,3
( Frecuencia del Oscilador )
Baud Rate = -----------------------------------
32 x [65536 - (RCAP2H,RCAP2L)]
El timer 2 como generador de baud rate se muestra en la fig. 2.10. Esto es solo valido si
RCLK + TCLK = 1. Notar que un ciclo completo en TH2 no coloca TF2 en 1 y no generara
una interrupción. Por lo tanto, la interrupción del timer 2 no tiene que inhibirse cuando el
timer 2 esta trabajando en este modo. Notar tambien, que si EXEN2 es = 1, una transición de
1 a 0 en T2EX colocara en 1 EXF2 pero no causara una recarga desde (RCAP2H,RCAP2L0 a
(TH2,TL2). De esta forma cuando el timer 2 se utiliza como un generador de baud rate, T2EX
puede emplearse como un línea extra de pedidos de interrupciones externas si se desea.
Debería notarse que cuando el timer 2 esta funcionando (TR2 = 1) en función "TIMER" como
generador de baud rate, no debería leerse o escribirse en TH2 o TL2. Bajo estas condiciones el
timer esta siendo incrementado en cada estado, y los resultados de una lectura o escritura
puede no ser exactos. Los registros RCAP2 pueden leerse, pero no escribirse, debido a que
una escritura podría solapar una recarga y causar errores de escritura y/o recarga. En este caso
se debe proceder a detener el timer 2 (TR2=0) antes de acceder al timer o a los registros
RCAP2.
1.7- INTERRUPCIONES
El 8051 posee 5 fuentes de interrupciones y el 8052 tiene 6. Estas son mostradas en la figura
1.11.
Las interrupciones externas INT0 e INT1 pueden ser activadas por nivel o por flanco
dependiendo del estado de los bits IT0 e IT1 del registro TCON. Los flags que realmente
generan estas interrupciones son IE0 e IE1 del TCON. Cuando se produce una interrupción
externa, el flag correspondiente es limpiado por hardware cuando se accede a la rutina de
servicio, solo si la interrupción fue activada por flanco. Si la interrupción fue activada por
nivel, la fuente de pedido externa controlara el flag de pedido en lugar del hardware del chip.
Las interrupciones de timer 0 y el 1 son generadas por TF0 y TF1, las cuales son puestas en 1
por un desborde en sus respectivos registros timer/contadores. Cuando se genera una
interrupción del timer, el flag que la genero es desactivado por el hardware del chip cuando se
accede a la rutina de servicio.
Las interrupciones de la puerta serie son generadas por la OR lógica de RI y TI. Ninguno de
estos flags son puestos a cero por hardware. En efecto, la rutina de servicio normalmente
tendrá que determinar si fue RI o TI quien genero la interrupción y el bit que corresponda
deberá ser desactivado por programa.
En el 8052, la interrupción del timer 2 es generada por la OR lógica de TF2 y EXF2. Ninguno
de estos flags es borrado por el hardware, por lo que la rutina de servicio tendrá que
determinar si TF2 o EXF2 fue quien genero la interrupción y el correspondiente bit tendrá que
ser borrado por programa.
Registro IE
MSB LSB
EA * ET2 ES ET1 EX1 ET0 EX0
EA:
Inhibe todas las interrupciones. Si EA=0, ninguna interrupción será reconocida. Si
EA=1 cada fuente de interrupción es individualmente habilitada o inhibida poniendo en
1 o 0 su bit de habilitación.
ET2:
Habilita o inhibe la interrupción de captura/desborde deltimer 2. Si ET2=0 la
interrupción esta deshabilitada.
ES:
Habilita o inhibe la interrupción de la puerta serie. Si ES=0 inhibe la interrupción.
ET1:
Habilita o inhibe la interrupción por desborde del timer 1. Si ET1=0 inhibe la
interrupción.
EX1:
Habilita o inhibe la interrupción externa 1. Si EX1=0 inhibe la interrupción
ET0:
Habilita o inhibe la interrupción por desborde del timer 0. Si ET0=0 inhibe la
interrupción.
EX0:
Habilita o inhibe la interrupción externa 0. Si EX0=0 inhibe la interrupción.
Cada fuente de interrupción también puede programarse en uno de los dos niveles de
prioridades posibles, colocando en 1 o en 0 un bit del SFR IP. Una interrupción de baja
prioridad puede ser interrumpida por una interrupción de mayor prioridad, pero no por otra
fuente de interrupción de la misma prioridad. Una interrupción de alta prioridad no puede ser
interrumpida por otra fuente de interrupción.
REGISTRO IP
PT2:
Define el nivel de prioridad de las interrupciones del timer 2. PT2=1 nivel de prioridad
alto
PS:
Define el nivel de prioridad de las interrupciones de la puerta serie. PS=1 nivel de
prioridad alto.
PT1:
Define el nivel de prioridad de las interrupciones del timer1. PT=1 nivel de prioridad
alto.
Tener presente que la estructura de "Nivel dentro de la prioridad" es utilizada solo para
resolver "pedidos simultáneos del mismo nivel de prioridad".
Los flags de interrupciones son muestreados en cada ciclo de maquina. Las muestras son
evaluadas durante el siguiente ciclo de maquina. Si uno de los flags estuvo en la condición 1
en el ciclo anterior, en el ciclo presente se detecta y el sistema de interrupciones generara
un LCALL a la cabeza de la rutina de servicio correspondiente, siempre y cuando este LCALL
generado por hardware no este bloqueado por algunas de las siguientes condiciones:
Cualquiera de estas tres condiciones bloquean la generación del LCALL a la rutina de servicio
de la interrupción. La condición 2 asegura que la instrucción en ejecución será completada
antes de saltar a cualquier rutina de servicio. La condición 3 asegura que si la instrucción en
proceso es RETI o cualquier acceso a IE o IP, al menos una instrucción mas será ejecutada
antes que cualquier interrupción sea aceptada.
IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI+TI 0023H
TF2+EXF2 002BH
La ejecución de la rutina de servicio toma lugar desde esas locaciones hasta que la instrucción
RETI es encontrada. La instrucción RETI le informa al procesador que esa rutina de
interrupción no esta mas en proceso, luego extrae los 2 bytes superiores de la pila y los carga
en el PC. La ejecución del programa interrumpido continua desde donde fue abandonado.
Una simple instrucción RET podría también haber regresado la ejecución al programa
interrumpido, pero dejaría al sistema de control de interrupciones pensando que una
interrupción esta aun en proceso.
Interrupciones Externas
Las fuentes de interrupción externas pueden programarse para activarse por flanco o por nivel,
poniendo en 1 o en 0 el bit IT0 e IT1 del registro TCON. Si ITx es igual a 0, la interrupción
externa "x" es disparada por un nivel bajo detectado en el pin INTx. Si ITx es igual a 1, la
interrupción externa "x" es disparada por el flanco negativo. En este modo, si muestras
sucesivas del pin INTx muestran un valor alto en un ciclo y un valor bajo en el próximo el
flag de pedido de interrupción IEX del TCON se pondrá en 1 y pedirá la interrupción.
Debido a que los pines de interrupción externos son muestreados una vez en cada ciclo de
maquina, una entrada en alto o en bajo debería mantenerse al menos 12 periodos de reloj para
asegurar su detección. Si la interrupción externa es disparada por flanco, la fuente externa
tiene que mantener el pin de pedido de interrupción en alto por lo menos un ciclo, y luego
mantenerlo en bajo un ciclo mas para asegurar que la transición sea detectada y así el flag de
Tiempo de Respuesta
Los niveles en INT0 e INT1 son invertidos y capturados en IE0 e IE1 en cada ciclo de
maquina. Los valores no son tenidos en cuenta por la circuiteria hasta el próximo ciclo de
maquina.
Si un pedido esta activo y las condiciones son correctas para que sea reconocido, se genera por
hardware un llamado a subrutina a la dirección de la rutina de servicio.
Este llamado ocupa 2 ciclos de maquina, de esta manera un mínimo de 3 ciclos de maquina
completos pasan entre la activación de un pedido de interrupción externa y la ejecución de la
primera instrucción de la rutina de servicio.
Un tiempo de respuesta mas largo resultaría si el pedido esta bloqueado por alguna de las 3
condiciones listadas anteriormente. Si una interrupción con un nivel de prioridad mayor o
igual esta en proceso, el tiempo de espera adicional obviamente dependerá de la naturaleza de
la rutina de servicio en ejecución. Si la instrucción que se esta ejecutando no esta en su ciclo
final, el tiempo de espera adicional no puede ser mayor a 3 ciclos, ya que las instrucciones
mas largas (MUL y DIV) tardan solo 4 ciclos, y si la instrucción es RETI o un acceso a IP o
IE, el tiempo de espera adicional no puede ser mayor a 5 ciclos (un máximo de un ciclo mas
para completar la instrucción en proceso, mas 4 ciclos para completar la próxima instrucción
si es MUL o DIV).
De esta forma en un sistema con una solo interrupción el tiempo de respuesta es siempre
mayor a 3 ciclos y menor que 9 ciclos.
La estructura de interrupciones del 8051 permite la ejecución paso a paso por medio de un
programa elemental. Como se dijo previamente un pedido de interrupción no se atenderá
mientras una interrupción de igual nivel de prioridad este aun en proceso, ni se atenderá
después de RETI hasta que al menos una instrucción del programa sea ejecutada. Así, una vez
que se ha ingresado a una rutina de interrupción, no se puede volver a ingresar hasta que al
menos una instrucción del programa interrumpido sea ejecutada. Una aplicación de esta
característica es la operación paso a paso. Para esto se debe programar una de las
interrupciones externas (por ejemplo INT0) activada por nivel. La rutina de servicio para la
interrupción terminara con el siguiente código:
Ahora si el pin INT0, el cual corresponde a P3.2, es normalmente mantenido en bajo, la CPU
ira directamente a la rutina de interrupción externa 0 y permanecerá allí hasta que INT0 sea
pulsada (desde bajo a alto y luego a bajo otra vez).
Luego ejecutara RETI, volverá al programa del usuario, ejecutara una instrucción e
inmediatamente ingresara otra vez a la rutina de interrupción externa 0 para esperar el
próximo pulso en P3.2. Una instrucción del programa de usuario es ejecutada cada vez que se
pulsa P3.2.
1.8- RESET
Registros Contenidos
PC 0000H
A 00H
B 00H
PSW 00H
SP 07H
DPTR 0000H
P0-P3 FFH
IP(8051) XXX00000B
IP(8052) XX000000B
IE(8051) 0XX00000B
IE(8052) 0X000000B
TMOD 00H
TCON 00H
T2CON (SOLO 8052) 00H
TH0 00H
TL0 00H
TH1 00H
TL1 00H
TH2 (sólo en 8052) 00H
TL2 (sólo en 8052) 00H
RCAP2H (sólo en 8052) 00H
RCAP2L (sólo en 8052) 00H
Se puede obtener un reset automático cuando Vcc se conecta al pin RST a través de un
capacitor de 10uF y una resistencia de 8.2k a Vss como se muestra en la figura 1.12
Las versiones CHMOS tienen 2 modos de potencia reducida, el modo IDLE y POWER
DOWN. La entrada a través de la cual la alimentación auxiliar (Back up) es administrada
durante estas operaciones es Vcc. La figura 1.13 muestra la circuiteria interna la cual
implementa estas características. En el modo IDLE (IDL=1), el oscilador continua
funcionando y los bloques de interrupción, la puerta serie, y los timers continúan funcionando,
Registro PCON
SMOD:
Bit de baud rate doble cuando este bit es 1, el timer 1 es utilizado para generar el
baud rate y la puerta serie puede ser utilizada en los modos 1, 2 y 3.
GF1:
Flag de propósitos generales.
GF0:
Flag de propósitos generales.
PD:
Bit de modo POWER DOWN. PD=1 activa la operacion Power Down.
IDL:
Bit de modo IDLE. IDL=1 activa la operacion Idle.
Una instrucción que ponga en 1 PCON.0 causa que sea la ultima instrucción ejecutada antes
de ir al modo IDLE. En este modo la señal de reloj interna es bloqueada a la CPU, pero no a
las interrupciones, timers, y puertas series. El estado de la CPU es preservado completamente,
el SP, PC, PSW, A y todos los otros registros mantienen sus datos. Los pines de las puertas
mantienen el estado lógico que tenían antes de ingresar al modo IDLE. ALE y PSEN se
mantienen en el nivel lógico alto.
Hay dos caminos para finalizar el modo IDLE. La activación de cualquier interrupción
habilitada causara que PCON.0 sea limpiado por hardware, terminando el modo IDLE. A la
interrupción se le dara servicio y siguiendo a RETI la próxima instrucción a ejecutarse será la
siguiente a la instrucción que puso al dispositivo en modo IDLE.
Los bits flags GF1 y GF0 pueden utilizarse para dar una indicación si una interrupción ocurrió
durante operación normal o durante un IDLE. Por ejemplo, una instrucción que activa IDLE
puede colocar en uno GF1 y/o GF0. Cuando IDLE sea terminado por una interrupción, la
rutina de servicio de la interrupción puede examinar estos flags.
El otro camino para terminar el modo IDLE es por un reset por hardware. Debido a que el
oscilador esta aun funcionando, el reset por hardware necesita mantenerse activo por solo dos
ciclos de maquina (24 periodos del oscilador) para completar el reset.
Una instrucción que pone en 1 a PCON.1 causa que sea la ultima instrucción ejecutada antes
de ir al modo Power Down. En este modo el oscilador del chip es detenido. Con el reloj