You are on page 1of 198

Control de Tiempo

Temporizadores y
Contadores
Por Luis D. Urdaneta G.
Temporizadores y Contadores

La función de control de tiempo del 8051 es realizada por dos


Temporizadores/Contadores (T/C) denominados T0 y T1, los cuales
pueden ser activados, leídos y configurados de forma independiente.

Las funciones generales de estos recursos del 8051 son:


 Registrar y/o calcular el tiempo transcurrido entre eventos.
 Contar eventos.
 Generar tasa de baudios para el puerto serie.

En cualquier caso el µCtrl siempre incrementa un registro interno del


T/C hasta cuando éste se desborde (Todos los bits están en 1 y
pasan a 0)
2
Temporizadores y Contadores
Medición de Tiempo
Cuando los T/C son configurados como temporizadores son
incrementados en 1 cada ciclo de máquina. Como cada ciclo
corresponde a 12 periodos de reloj, un T/C en operación se
incrementará un millón de veces cada segundo, siempre que la
frecuencia del cristal sea 12 MHz.
El tiempo invertido por un T/C en contar desde 0 hasta 25000 será de
0.025 seg. Así, para ejecutar una tarea 1 vez por segundo, es
necesario que el T/C cuente 40 veces desde 0 hasta 25000, lo cual
no es mayor problema.
Las frecuencias usuales del cristal del 8051 básico son 12 MHz y
11.059 MHz, siendo está última la más común por razones
relacionadas con la generación de tasa de baudios.
3
Temporizadores y Contadores
Con f = 11.059 MHz, el T/C se incrementa 921583 veces por segundo y
transcurrirán 0.027 segundos durante una cuenta desde 0 hasta 25000. Si
ahora se quiere realizar una tarea cada segundo, debe repetirse la cuenta
36.86 veces, lo cual no es posible.

En un tiempo de 0.025 segundos, las matemáticas indican que el T/C


debería aumentar hasta 23039.65. Corriendo la cuenta hasta 23040, el
tiempo será de 0.025000461, lo cual representa una diferencia despreciable
de 0.000000461.

Para un evento que deba realizarse cada segundo bastará con un con- teo
inicial hasta 23040, ejecutar la tarea, reiniciar el T/C y repetir 40 veces la
cuenta de 23040, debido a que 40x 0.025000461 = 1.000001664

4
Temporizadores y Contadores
Timers como contadores de eventos
Los timers del 8051 pueden usarse también como contadores. En este
caso no se incrementan cada ciclo de máquina sino que lo hacen
como respuesta a una transición de 1 a 0 en el terminal externo de
entrada del temporizador T0 (P3.4) o T1 (P3.5).
En este modo de operación la entrada externa es examinada durante
la fase 2 (F2) del estado S5 de cada ciclo de máquina. Cuando la
prueba muestra un alto en un ciclo y un bajo en el siguiente el registro
del timer es incrementado. La nueva cuenta será registrada durante
F1S3 del ciclo siguiente a aquel cuando la transición fue detectada. Al
requerirse 24 estados para reconocer la transición de 1 a 0, la
velocidad máxima de conteo es 1/24 de la frecuencia de reloj. En el
modo temporizador este valor es 1/12 de la frecuencia de reloj.
5
Temporizadores y Contadores

Considere que se tiene un sensor colocado en una línea de


producción industrial el cual envía un pulso cada vez que un objeto
pasa a través de éste. El siguiente código puede servir para contar el
número de objetos que pasan por el sensor. El pulso es recibido en el
terminal 0 del puerto 2.
jnb P2.0,$ ; No hay objeto presente, esperar. jb
P2.0,$ ; Entrada en alto. El producto está frente al sensor. inc cont
; El objeto ha cruzado la línea, incrementar contador.

Observe que el código es corto y realiza el trabajo. Pero como desven-taja


fundamental: mantiene ocupado continuamente al µctrl.

6
Temporizadores y Contadores

Si es necesario que el microcontrolador realice otras tareas además


de contar objetos, puede usarse el timer 1 para registrar el paso de los
productos. Lo primero es configurar a T1 como contador y conectar el
sensor al terminal P3.5. De este modo T1 contará los pulsos
(transiciones de 0 a 1) en P3.5. Cuando se requiera saber cuantos
objetos han pasado por la línea, simplemente se lee el valor registrado
por T1.
De este modo el 8051 puede ejecutar otras tareas mientras el timer 1
realiza la cuenta.

7
Temporizadores y Contadores
Timers T0 y T1
El circuito de la figura muestra los componentes fundamentales de T0
y T1.

El interruptor de la izquierda selecciona la fuente de reloj para T1 (T0).


C/T = 0 1/12 de la fosc C/T = 1 pulsos en terminal T1 (T0)
8
Temporizadores y Contadores

Para arrancar el timer, debe permitirse el paso de los pulsos hacia


los registros internos TH1 TL1 (TH0 TL0) que deben incrementarse.
Esto se logra cuando la señal interna control está en nivel alto.
El control del temporizador puede realizarse por programa a través del
bit GATE1 (GATE0) del registro TMOD, si éste se programa con un
0, se bloquea el paso de la señal de acuerdo con el estado del bit TR1
(TR0) del registro TCON.
setb TR1 permite (arranca) el conteo, clr TR1 inhibe (para) la cuenta
Para control por hardware, se carga un 1 en GATE1 (GATE0) de
modo que será la señal externa INT1 (INT0) la que habilita o
deshabilita el conteo, estando en 1 TR1 (TR0).

9
Temporizadores y Contadores

Los registros internos contadores TH1 TL1 (TH0 TL0) pueden ser de
8, 13 o 16 bits de acuerdo con el modo de operación programado para
el timer.
Después de los registros se encuentra el flip flop del bit de bandera
TF1 (TF0) del registro TCON, el cual notifica el desbordamiento del
contador.
Por último, si la interrupción correspondiente está habilitada, se gene-
rará una solicitud de interrupción al microcontrolador.

10
Temporizadores y Contadores

Registros asociados a la operación del los Timers T0 y T1

Además del funcionamiento como contador de eventos, los timers T0


y T1 pueden ser programados para uno de cuatro modos de
operación.
Los seis registros usados para configuración y control de T0 y T1 son
los siguientes:
TMOD (89H) Selección de modos de operación.
TCON (88H) Control del timer.
TH0, TL0 (8CH, 8AH) bytes alto y bajo de T0
TH1, TL1 (8DH, 8BH) bytes alto y bajo de T1

11
Temporizadores y Contadores

12
Temporizadores y Contadores

13
Temporizadores y Contadores

La función temporizador o contador es seleccionada por el bit de


control T/C del registro de funciones especiales TMOD (Timer/Counter
Modo Control Register). Tenga en cuenta que este FSR no es
direccionable por bits.
El modo de operación puede ser seleccionado manipulando los bits
M1M0 del registro TMOD, de acuerdo con el timer que corresponda.

14
Temporizadores y Contadores
Modo 0: Temporizador/contador de 13 bits
Poniendo los bits M1M0=0 en el registro TMOD se selecciona el modo
de operación cero para los timers T0 y T1.

El registro TL1 mantendrá los 5 bits de bajo orden de la cuenta (los


bits restantes no se usan) y los 8 bits de orden alto estará en TH1.
15
Temporizadores y Contadores

En este modo, TL1 contará desde 0 hasta 31 y cuando se desborde


se incrementará TH1 en 1. Esto indica que la cuenta máxima será de
8192, Si la cuenta se inicia en cero, la bandera TF1 se activará
después de 8192 ciclos de máquinas, cuando la cuenta finaliza.

Para programar un valor de cuenta determinada, los registros internos


deben cargarse con el valor dado por la expresión:

16
Temporizadores y Contadores

El tiempo que tarda el contador en alcanzar la cuenta final es dado


por:

Para reiniciar la misma cuenta o una nueva, debe recargarse el valor


correspondiente en los registros y llevar a cero la bandera TF1.

17
Temporizadores y Contadores

Programa 7

Se usa el timer T0 con disparo por programa y en modo 0 para:


1. Generar una onda cuadrada de1.0 KHz en el terminal 0 del puerto
0.
2. Activar un LED en P0.0 durante ½ segundo y apagarlo el
siguiente ½ segundo.

18
Temporizadores y Contadores

1. Para generar una onda cuadrada (DC=50%) de 1.0 KHz se


complementa el terminal P0.0 cada 500 µs.
Para configurar el timer para un retardo de 0.5 ms, se debe
realizar una cuenta de 500 ciclos de máquina. El valor a cargar en
el registro interno es (8192-500) = 7692=1E0CH. Para que los 5
bits de TL0 y el byte de TH0 representen este valor, deben
contener:
1E0CH = 11110 00001100B
TH0 = F0H = 11110000B TL0 = 0CH = 00001100B
19
Temporizadores y Contadores

Los temporizadores en modo cero pueden verse como un contador de 8


bits THx (0-FFH) precedido por un divisor de frecuencia TLx de 5 bits (0-
1FH)). De modo que el factor de división es de 32 cuando cuenta desde
cero. Para el ejemplo anterior, TLx cuenta en el primer paso hasta 20 (32-
12) y pone a THx en 1. De modo que el registro alto se desborda cuando
han pasado:
15 x 32 + 20 = 500 ciclos de máquina
(FFH-F0H) x 20H + 14H = 1F4H ciclos de máquina

20
Temporizadores y Contadores

7692
 240.375
32
7692  ( 240  32 )  ( 0.375  32 )  ( 240  32 )  12
7692  ( F 0 H )  32  0CH

21
Temporizadores y Contadores

22
Temporizadores y Contadores

Señal en P0.0 obtenida de simulación en PROTEUS 6.9

23
Temporizadores y Contadores

El osciloscopio presenta la señal generada por el código anterior.


Observe que la onda no tiene una frecuencia exacta de 1.0 KHz. Esto
se debe a que el tiempo que el terminal P0.0 pasa en 1 ó en 0 se
alarga sobre los 500 µs generados con precisión por T0, debido al
tiempo usado en la ejecución de las instrucciones necesarias para
cargar los registros contadores, arrancar T0, limpiar la bandera TF0 y
el salto final.
Para obtener una señal de 1.0 KHz se debe disminuir el retardo del
timer T0, como compensación. Si ahora cargamos en TL0 13H en
lugar de 0CH, se obtiene en P0.0:

24
Temporizadores y Contadores

25
Temporizadores y Contadores

2. Para activar un LED conectado a P0.0 cada segundo, se


complementa la salida cada 0.5 segundos.
Como T1 o T0 en modo cero pueden generar un retardo máximo
de 8.192 ms a 12 MHz, para obtener los 500 ms se programa T0
para un retardo de 5 ms y se repite 100 veces.
Los valores a cargar en TH0 y TL0 = son 43H y 18H,
respectivamente.

26
Temporizadores y Contadores
+5V

C3 C2
+5V 33pF X1 33pF
D1
U1 U2:A LED-RED
CRYSTAL
19 39 1 2
R1
12 MHz XTAL1 P0.0/AD0
38
P0.1/AD1 220
37
P0.2/AD2 7406
18 36
XTAL2 P0.3/AD3
C1 P0.4/AD4
35
10uF 34
P0.5/AD5
33
P0.6/AD6
9 32
RST P0.7/AD7
21
P2.0/A8
R2 P2.1/A9
22
8.2k 23
P2.2/A10
29 24
PSEN P2.3/A11
30 25
ALE P2.4/A12
31 26
EA P2.5/A13
27
P2.6/A14
28
P2.7/A15
1 10
+5V P1.0 P3.0/RXD
2 11
P1.1 P3.1/TXD
3 12
P1.2 P3.2/INT0
4 13
P1.3 P3.3/INT1
5 14
P1.4 P3.4/T0
6 15
P1.5 P3.5/T1
7 16
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
80C51

27
Temporizadores y Contadores

28
Temporizadores y Contadores

Programa 8

En los ejemplos anteriores se ha usado T0 para generar retardos en el


modo 0 con disparo por soft. En este ejemplo se configura T1 en
modo 0 con disparo por hardware.
En este caso el timer se activa ahora cuando se aplica un nivel alto a
la entrada delINT1
microcontrolador.

29
Temporizadores y Contadores

+5V

C3 C2
+5V 33pF X1 33pF

D1
U4 U1:A LED-RED
CRYSTAL
19 39 1 2
R1
12 MHz XTAL1 P0.0/AD0
38
P0.1/AD1 220
37
P0.2/AD2
18 36
XTAL2 P0.3/AD3
C1 P0.4/AD4
35
10uF 34
P0.5/AD5
33
P0.6/AD6
9 32
RST P0.7/AD7
21
P2.0/A8
R2 P2.1/A9
22
8.2k 23
P2.2/A10
29 24
PSEN P2.3/A11
30 25
ALE P2.4/A12
31 26
EA P2.5/A13
27
P2.6/A14
28
P2.7/A15
1 10
+5V P1.0 P3.0/RXD
2 11
3
P1.1 P3.1/TXD
12
INICIO
P1.2 P3.2/INT0
4 13
P1.3 P3.3/INT1
5 14
P1.4 P3.4/T0
6 15
P1.5 P3.5/T1
7 16
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
80C51

30
Temporizadores y Contadores

31
Temporizadores y Contadores

Iniciar el destello de un LED con una señal externa no es en realidad


una situación común. Este modo de operación puede usarse para
medir el ancho de un pulso aplicado al pin de control INT1 de T1.

32
Temporizadores y Contadores

Este código fue usado para medir un pulso de ancho 2.453 ms. El
valor retornado en R1-R2 fue de 4C15H, el cual corresponde al
número de 13 bits (en formato del modo 0) de 0995H = 245310

33
Temporizadores y Contadores

El modo 0 es en realidad una reliquia creada para compatibilidad con


el antiguo 8048 y se recomienda no usarlo.
En la practica se configura el timer como un contador de 16 bits (modo
1) para que la lectura entregue el ancho del pulso en dos bytes,
evitando la necesidad de convertir la medida desde el formato del
modo o.

34
Temporizadores y Contadores
Modo 1: Temporizador/contador de 16 bits
Este modo es igual que el anterior excepto que TL0 (TL1) tiene 8 bits,
por lo cual la cuenta se extiende hasta 65535 (FFFFH), permitiendo
retardos de mayor duración.

35
Temporizadores y Contadores

En este caso la duración del retardo generado es dado por la


ecuación:

36
Temporizadores y Contadores

¿ Cómo leer el timer?


Si el dispositivo opera como contador de 8 bits, la lectura del estado del
temporizador en cualquier momento se limita a leer el byte en el registro
con una instrucción del tipo:
mov x,TL0 o mov x,TL1.
En configuración de 13 ó 16 bits la lectura correcta es algo más
complicada. Suponga por ejemplo que en modo de 16 bits se lee una
medida que es de 18FFH. Usted lee primero TL0 como FFH y pero
luego lee TH1 como 19H, de modo que existe un error apreciable en la
lectura.
Error = 665510-639910 = 25610

37
Temporizadores y Contadores

El problema no está en el timer, el valor correcto estuvo disponible


pero no fue leído oportunamente. Después de la lectura de TL0 =
FFH, cuando se ejecuta la siguiente instrucción transcurre un corto
(pero suficiente) tiempo para que el timer se incremente desde 18FFH
a 1900H y por esto se lee 19FFH.
La solución a este problema puede ser parar el timer al finalizar la
medida con clr TR0 o clr TR1, y luego leer los registros. La selección
de esta opción depende de si la naturaleza de la aplicación tolera la
parada del timer por algunos ciclos de máquina.

38
Temporizadores y Contadores

Cuando no se pueda parar el timer, el error producto de la situación


descrita puede ser evitado si nos aseguramos que THx no cambia
después de leer TLx. El código siguiente puede ser usado. La lectura
queda en los registros A-R1

releer:
releer: mov
mova,TH1
a,TH1
mov
movr1,TL1
r1,TL1
cjne
cjnea,TH1,releer
a,TH1,releer
……
39
Temporizadores y Contadores

Programa 9

Se debe construir y programar un generador de forma de ondas


usando el 8051. El instrumento debe tener tres entradas: la primera es
un pulsador S1 para selección del tipo de señal de salida entre: seno,
cuadrada, triangular o diente de sierra. Al aplicarse energía al circuito
debe generarse una onda seno. Las activaciones subsecuentes del
pulsador seleccionarán una salida diferente en el orden especificado.
La segunda y tercera entrada son dos interruptores S2 - S3 para
aumentar/disminuir la frecuencia de la señal de salida.

40
Temporizadores y Contadores
R1 5.6K

-12V

U1

7
1
U3
12 4 3
P2.0 A8 IOUT +
11 6 Vs
P2.1 A7
10 2
P2.2 A6 -
9 2
P2.3 A5 IOUT
8 LM741N
P2.4 A4
7
P2.5 A3

4
5
6
P2.6 A2
5 16
P2.7 A1 COMP
14
VR+ -12V
15
VR- C1
R3 R4 DAC0808 100n
5.6K 5.6K

-12V
+5V

Generador de señal
+5V
+5V
+5V

R6 R6

R6 2.2K 2.2K

2.2K
U4A
R5 S1 S2 S3
1 2
P1.7 P1.1 P1.0
200
C1 74LS14
10u

Selector de tipo de onda Aumentar frecuencia Disminuir frecuencia


41
Temporizadores y Contadores

El tiempo tx entre muestras lo fija el valor cargado en los registros del


T/C T1, configurado en modo 1. Para detectar cuando se debe escribir
la siguiente muestra se examina la bandera de desborde TF1, así la
frecuencia de la salida variará con el valor cargado en los contadores
de T1.
El timer T0 se configura en modo 1 para generar un retardo de 20 ms
para protección por programa contra los efectos del rebote de S2 y S3.
Para S1, la supresión del rebote de contactos se realiza por hardware.

42
Temporizadores y Contadores

Para seleccionar el tipo de onda, se programa un contador de módulo


3 que registra el orden en el cual es activado el pulsador. Al inicio el
contador está en 0, indicando salida seno. Las subsecuentes
activaciones lo pone en 1 para onda cuadrada, en 2 para triangular y
en 3 para diente sierra. Al presionarse S1 por cuarta vez el contador
vuelve a 0 reiniciándose la secuencia con salida seno. Con el
programa en ejecución, se lee el tipo de onda y su frecuencia y se
genera un ciclo de la forma de onda deseada a la frecuencia
especificada. A continuación se vuelve a leer el estado de los
interruptores para generar el siguiente periodo de la misma señal o el
primer ciclo de nueva onda de salida.

43
Temporizadores y Contadores

Para generar la onda seno se utiliza una tabla de valores. La k-ésima


muestra Nk se obtiene con la siguiente ecuación, donde n es el
número de muestras en un periodo:

44
Temporizadores y Contadores

Para que la frecuencia seleccionada sea la misma para todos los tipos
de ondas, es necesario generar el mismo número de muestras por
ciclo y escribir una muestra cada T/n, donde T es el periodo de la
forma de onda. Se desea una amplitud de la salida de 5.0 V (4.98 V)
con 128 muestras por ciclo. Con la señal seno no hay problema en
usar una tabla de 64 valores (medio ciclo) y con la onda cuadrada
basta con escribir 64 muestras en nivel bajo y otras 64 en alto. Pero
en el caso de la forma de onda triangular, para obtener la amplitud
deseada, la señal debe variar entre 0 y FFH cada medio ciclo, lo cual
equivale a 512 muestras por ciclo.

45
Temporizadores y Contadores
Para ajustar el número de muestras a 128, se carga (para la
pendiente positiva) en el DAC los valores 0,4,8,0CH,…,FCH,…
0CH,8,4,0; lo cual representa 64 muestras en el semiciclo ascendente
y 64 muestras en el descendente. Como resultado la amplitud se
reduce a 4.93 V. Para que toda salida tenga igual amplitud se ajusta la
tabla de valores de la onda seno y el valor de del nivel alto de la onda
cuadrada. En el caso de la señal diente de sierra se carga a la entrada
del DAC la secuencia 0,2,4,5,8,0AH,…,0FEH para 128 muestras por
ciclo.
El código del generador consta de un programa principal para detectar
el tipo y frecuencia de la onda y generar la señal correspondiente y
dos subrutinas: una que escribe el valor digital de la muestra en el P2,
cada vez que el temporizador T1 alcanza el final de la cuenta y la otra
para control de T0. 46
Temporizadores y Contadores

47
Temporizadores y Contadores

48
Temporizadores y Contadores

49
Temporizadores y Contadores

50
Temporizadores y Contadores

51
Temporizadores y Contadores

52
Temporizadores y Contadores

Aunque el generador funciona, no debe


considerarse un instrumento comercial.
Son necesarios ciertos refinamientos
para convertirlo en un generador de
señales práctico.

53
P[27..20]
R3

Temporizadores y Contadores
+5V 5k

-12V

+5V
R1 U2
5k

4
5
33pF C2 U1 2
P27 5 14 6
33pF A1 VREF+
P26 6 3
A2
X1 P25 7 15
U3 P24 8
A3 VREF-
A4

7
1
19 39 P23 9 4
XTAL1 P0.0/AD0 A5 IOUT LM741
38 P22 10
P0.1/AD1 A6 salida
37 P21 11 16
CRYSTAL P0.2/AD2 A7 COMP
18 36 P20 12 3
XTAL2 P0.3/AD3 A8 VEE
C5 P0.4/AD4
35
10uF 34 DAC0808
RST P0.5/AD5
33 R2
P0.6/AD6 +12V
9 32 5.6k
RST P0.7/AD7
21 P20 C1

Simulación del generador con


P2.0/A8
R5 P2.1/A9
22 P21
100nF
23 P22
8.2k P2.2/A10
29 24 P23
PSEN P2.3/A11
P24
R6 30
ALE P2.4/A12
25
P25
+5V

f--
31 26
EA P2.5/A13

PROTEUS
27 P26
2k P2.6/A14
28 P27
P2.7/A15
1 10
P1.0 P3.0/RXD
2 11
P1.1 P3.1/TXD
3 12
P1.2 P3.2/INT0
f++
4 13
P1.3 P3.3/INT1
5 14
P1.4 P3.4/T0
6 15
P1.5 P3.5/T1
7 16
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
+5V
80C51 R10
48k

-12.0V
R4 U5:A

11
2.2k
R8 A
ONDA U4:A salida
2
10k 1
1 2 3
B
74LS14
4

R9 LM324
C4
10uF 10k

RV1
100k
+12V

54
-2.45
Temporizadores y Contadores

55
Temporizadores y Contadores
Modo 2: Temporizador/contador de 8 bits con auto recarga
En este modo se configura el registro interno como un contador de 8
bits (TL1 o TL0) con recarga automática. El desbordamiento del
contador además de activar la bandera TF1 (TF0), recarga TL1 (TL0)
con el contenido de TH1 (TH0), iniciándose un ciclo nuevo de conteo.

56
Temporizadores y Contadores

Este modo es adecuado para temporización con precisión debido a


que el retardo no es afectado por el tiempo de ejecución necesario
para recargar los registros contadores.

El tiempo de desborde puede calcularse con:

57
Temporizadores y Contadores

Programa 10

En este ejemplo sencillo se usan los T/C T0 y T1 en modo 2


configurados como contadores de evento.
Se tiene una correa transportadora la cual traslada productos de dos
tipos: altos y bajos. El sistema tiene dos emisores y dos receptores de
luz: A y B. El haz de luz A es interrumpido siempre que un objeto alto
pasa por la línea de detección. El rayo luminoso de B es cortado
cuando cualquiera de los artículos pasa frente al sensor.
Las salidas de los sensores tienen niveles TTL.

58
Temporizadores y Contadores

59
Temporizadores y Contadores

El 8051 debe contar 100 productos y verificar que exista un máximo


de 60% de objetos altos. Si esto se cumple, se emite un beep y se
reinicia con un nuevo lote de 100 artículos.
Si la proporción no es la establecida, se debe generar una alarma y
parar la correa hasta que sea presionado un pulsador de INICIO.
También existe un interruptor PARAR, para emergencias.

60
Temporizadores y Contadores

La salida del sensor A se conecta a la entrada externa de T0, de


modo que este timer registre el número de objetos altos. Mientras que
la señal de B se aplica a la entrada externa del timer T1 para que este
cuente el numero total de productos que pasan por el subsistema.
De esta forma es posible conocer la proporción de productos de
ambas clase con respecto a un total especificado.

61
Temporizadores y Contadores
+5V

R3
3.3K

+5V Q1
BC160

R5
R2 1k R4 1
U1 3.3K
31 39 LS1
EA/VP P0.0 38
19 P0.1 37
X1 P0.2 36
Y1 P0.3 35
18 P0.4 34
X2 P0.5 33
C4 C5 P0.6 32
12 mHz P0.7
30pf 30pf 9
RESET 21
P2.0 22
C6 10uf 12 P2.1 23 +12V
13 INT0 P2.2 24
+5V INT1 P2.3
14 25
15 T0 P2.4 26
T1 P2.5 27
R1 1 P2.6 28
RESET
2 P1.0 P2.7 R7
8.2K 3 P1.1 17 PARAR INICIO
4 P1.2 RD 16 1k
5 P1.3 WR 29
6 P1.4 PSEN 30 Q5
7 P1.5 ALE/P 11 BC184
8 P1.6 TXD 10 Q2
P1.7 RXD TIP31
80C51

R8 Q3 M1
Q4 TIP32
BC184
1k

62
Temporizadores y Contadores

63
Temporizadores y Contadores

64
Temporizadores y Contadores

65
+5V
R2
3.3k

C2 C1
Temporizadores y Contadores Q1
BC160
+5V 33pF X1 33pF

U1
CRYSTAL
12 MHz
19
XTAL1 P0.0/AD0
39 R4
38 1
P0.1/AD1
37
P0.2/AD2
18
XTAL2 P0.3/AD3
36 R3
C3 P0.4/AD4
35 3.3k
10uF 34
P0.5/AD5
33
P0.6/AD6
9 32
RST P0.7/AD7 LS1
21
P2.0/A8
R6 P2.1/A9
22
8.2k 23

Simulación del
P2.2/A10
29 24
PSEN P2.3/A11
R7 30 25
ALE P2.4/A12
31 26
EA P2.5/A13
27
10k P2.6/A14
28
P2.7/A15 +12V

Programa 10 con
1 10
P1.0 P3.0/RXD
2 11
+5V P1.1 P3.1/TXD
3 12
P1.2 P3.2/INT0
4 13
P1.3 P3.3/INT1
5 14
6
P1.4 P3.4/T0
15 PARAR INICIAR R5
P1.5 P3.5/T1

PROTEUS
7 16 1k
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
80C51
Q5
BC184

Q2
TIP31

BAJAS U2:A
1
0 3
2

ALTAS
74LS32 R1 Q4 Q3
BC184 TIP32
0 1k

66
Temporizadores y Contadores

Modo 3: Temporizador en modo dividido

Cuando el timer 0 es configurado en este modo, se convierte en dos


contadores independientes de 8 bits: el timer 00 será TL0 y el timer 01
será TH0. Ambos cuentan hasta 255 y se desbordan cuando regresan
cero. Todos los bits asociados al timer 1 real son ahora ligados al TH0
(timer 01).
Cuando el timer 0 está en modo 3, el timer 1 real (TH1 TL1) puede ser
configurado en los modos 0, 1 y 2, pero no puede ser
arrancado/parado y no activa la bandera de desborde, pues sus dos
bits de control están cedidos al timer 01 (TH0). En este caso, el timer
1 real será incrementado cada ciclo de máquina.

67
Temporizadores y Contadores

68
Temporizadores y Contadores

El único uso de este modo es cuando la aplicación necesite dos timers


independientes y uno adicional para generación de la tasa de baudios.
En tal caso se usa el timer 1 real como generador de baudios y
TH0/TL0 como dos timers separados.

69
Temporizadores y Contadores

70
Temporizadores y Contadores

71
Interrupciones
Interrupciones

En los ejemplos anteriores, el curso secuencial del programa solo es


cambiado por instrucciones específicas de saltos o llamadas/retorno
desde subprogramas. El uso de la técnica de interrupciones provee un
mecanismo para suspender el curso normal de un programa, ejecutar
una subrutina y retornar a continuar con la ejecución del código
suspendido temporalmente.

73
Interrupciones

Una interrupción, como todo evento asincrónico, puede producirse en


cualquier momento durante la ejecución de un programa. Cuando
ocurre, se completa la instrucción que está en ejecución. Si la
interrupción en cuestión está habilitada, se acepta la petición y se
transfiere el control a una rutina de servicio de interrupción (RSI). Esta
salva las variables necesarias para preservar las operaciones a
reanudarse, y atiende al periférico que originó la llamada. Una vez
completada la RSI, el control se transfiere de nuevo al programa
principal.

74
Interrupciones

75
Interrupciones

Las
Lastareas
tareasque
quesiguen
siguenaauna
unainterrupción
interrupciónson
sonlas
lassiguientes:
siguientes:

1. Culmina la ejecución de la instrucción en curso.


2. El contenido del contador de programa se almacena en la pila.
3. El PC se carga con la dirección de la primera instrucción de la
RSI.
4. Se ejecuta la rutina de servicio.
5. Se recupera el contenido del PC guardado en la pila.

76
Interrupciones

Las ventaja principal de la técnica de interrupciones es el ahorro del


tiempo de CPU, el cual deja de usar el mecanismo de consultas para
detectar la ocurrencia de un eventos críticos, como por ejemplo el
desborde de un T/C.
Para ilustrar sobre la conveniencia del uso de interrupciones,
considere que un programa debe, entre otras tareas, cargar en el A el
contenido del puerto 1 cada 50 ms.
Para realizar esta función el código configura T1 en modo 1 para que
genere el retardo en cuestión.

77
Interrupciones

jnb TF1,saltar
clr TF1
mov a,P1
saltar: …
Considere que aparte de la instrucción jnb (2 ciclos) que prueba TF1 y
determina si el salto debe realizarse, el resto del programa consume
98 ciclos de máquina. Esto significa que, en total nuestro, código
requiere 100 ciclos de máquina por cada paso.
Debido a que TF1 se activa cada 50000 µs, se ejecutarán 500
instrucciones jnb antes que la prueba de TF1 tenga éxito. Sumando a
esto los 3 ciclos de máquina del código que lee el puerto y limpia a
TF1, se obtiene un total de 1003 ciclos de instrucción invertidos en
detectar el desborde del temporizador y ejecutar la lectura de P1.
78
Interrupciones
Para evitar tener que examinar el estado de TF1 en cada paso del
lazo del programa, se puede programar al 8051 para que pruebe TF1
automáticamente en segundo plano y ejecute un salto a una subrutina
cada vez que TF1 conmute a nivel alto. La RSI necesaria sería:

int_T1: mov a,P1


reti
Cuando el µctrl atiende una interrupción de un timer, automáticamente
pone a cero la TFx correspondiente. La rutinas RSI en lugar de la
instrucción habitual de retorno ret, finaliza con reti la cual además de
proveer el retorno al programa principal, indica al µCtrl que una rutina
de interrupción ha culminado.

79
Interrupciones

Otro ejemplo útil es la recepción de un carácter por el canal serie.


Cada vez que el 8051 recibe un carácter activa un bit interno RI de un
FSR. Un programa determinado debería examinar en un lazo sin fin el
estado de RI para detectar la llegada de un nuevo carácter. Even-
tualmente podría chequear a RI ocasionalmente a lo largo de un
programa, pero esto implica la posibilidad de pérdidas de caracteres.
Usando la interrupción de recepción del puerto serie, el arribo de un
carácter genera una interrupción a la cual se asocia el código para la
lectura del buffer de recepción del UART del 8051. Esto garantiza la
integridad de la información recibida y deja libre al CPU para la
realización de otras tareas.

80
Interrupciones

Usando la interrupción del timer T1, el


código para leer a P1 cada 50 ms es
334 veces más eficiente.

81
Interrupciones

Eventos fuentes de interrupción


El 8051 dispone 5 fuentes de interrupción:
Internas:
Desborde del timer 0
Desborde del timer 1
Transmisión/recepción de un carácter por el puerto serie
Externas:
Señal en INT0
Señal en INT1

82
Interrupciones

En resumen, es posible configurar al 8051 para que cuando


T0 desborde o sea recibido un carácter por el puerto serie,
se ejecute la RSI correspondiente. Para permitir distinguir la
fuente especifica de interrupción y ejecutar la RSI
procedente, la aceptación de una solicitud es seguida por un
salto a un vector de interrupción

83
Interrupciones

Existen 8 bytes libres entre cada vector de interrupción, en donde se


puede colocar la RSI. Si este espacio de memoria no es suficiente, se
inserta en el vector un salto hacia la primera instrucción de la RSI
correspondiente.
84
Interrupciones

Configurando las interrupciones


Las interrupciones pueden ser configuradas manipulando los bits de
dos FSRs del 8051: IE e IP.

IE : Autoriza la ejecución de interrupciones.

IP: Asigna niveles de prioridad a las interrupciones.

85
Interrupciones

Habilitación de interrupciones

Después de un RESET, las interrupciones son deshabilitadas. Debido


a esto, para que un evento genere una interrupción el programa
deberá habilitar el sistema de interrupciones y especificar cual o
cuales fuentes serán habilitadas.

86
Interrupciones

Para habilitar/deshabilitar las interrupciones se manipula el registro


FSR: IE.

87
Interrupciones

Por ejemplo, para habilitar la interrupción del timer 0, se ejecuta:

mov IE,#82H o la secuencia

setb EA
setb ET0

Antes de habilitar una interrupción particular, el sistema de


interrupciones debe ser habilitado antes, cargando 1 en el bit de
habilitación general de interrupciones: EA
Interrupciones
El 8051 verifica la ocurrencia de interrupciones al final de la ejecución
de cada instrucción. La secuencia de consulta se realiza en el siguien-
te orden:
1. Externa 0
2. Timer 0
3. Externa 1
4. Timer 1
5. Puerto serie
Esto significa que si una interrupción del canal serie y la del timer 1
ocurren simultáneamente, la de T1 será atendida primero. La del
puerto serie será ejecutada una vez completada la del T1. 89
Interrupciones

Prioridad de las interrupciones


El 8051 ofrece dos niveles de prioridad para las interrupciones:
Nivel alto
Nivel bajo
Esto hace posible asignar prioridad alta a ciertos eventos que sean
considerados críticos para el buen desempeño de la aplicación.

90
Interrupciones

Considere que un código autoriza las interrupciones de T1 y del puerto


serie. Además se establece que la recepción de un carácter es un
evento de mayor importancia que el desborde del timer. De modo que
si se está ejecutando la RSI por desborde de T1, conviene que la
interrupción serie interrumpa a la RSI del timer. Cuando se complete
la recepción del carácter se continúa con la RSI de T1 y al culminar
está, se regresa al programa principal.

Esto puede ser programado asignando prioridad alta a la interrupción


del puerto serie y baja a la interrupción de T1.

91
Interrupciones

Para asignar el nivel de prioridad a las interrupciones se usan los bits


el registro FSR: IP.

92
Interrupciones

93
Interrupciones

Para asignar el nivel de prioridad a las interrupciones se usan los bits


el registro FSR: IP.

94
Interrupciones
Reglas para cuando se asigna prioridad a las interrupciones:
1. Una interrupción con prioridad alta puede interrumpir a otra con
prioridad baja.
2. Las interrupciones de prioridad alta no pueden interrumpir a otra
de igual prioridad.
3. Una interrupción de prioridad baja solo puede ejecutarse cuando
ninguna interrupción está en curso.
4. Si dos solicitudes se generan en el mismo momento, primero será
ejecutada la de prioridad alta. Si tienen la misma prioridad, se
aceptará primero aquella que le corresponda según las
prioridades establecidas en la secuencia de consulta.
95
Interrupciones

La figura muestra el proceso normal de atención a una interrupción .

96
Interrupciones

Los bits de estado son muestreados durante la fase 2 del estado 5


del ciclo de máquina C1, en el siguiente ciclo son examinados y se
determina la interrupción a ejecutar. En los ciclos C3 y C4 se realiza
un LCALL con el vector de interrupción y en el C5 se empieza a
ejecutar la rutina de interrupción. El proceso descrito se altera si:
• Una interrupción de mayor o igual prioridad está en ejecución.
• No ha finalizado la instrucción en curso.
• La instrucción en proceso es RETI u otra que modifique IE o IP.

97
Interrupciones

Proceso de interrupción:
• El contenido del PC es cargado en la pila.
• Las interrupciones de igual o menor prioridad son deshabilitadas.
• Las banderas TF0 y TF1 son puestas a cero, cuando las
interrupciones son generadas por los timers.
• Se transfiere el control del programa a la rutina de servicio.
• Al final de la RSI, la ejecución de una instrucción RETI restaura el
contenido del PC.
• El estado de las interrupciones es restaurado al estado anterior a
la ocurrencia de la interrupción.

98
Interrupciones
Protección de registros
Cuando se retorna desde la rutina RSI hacia el código que se
ejecutaba cuando ocurrió la interrupción, el procesador debe ser
restaurado al estado pre-interrupción. Es responsabilidad del
programador salvar todo registro cuyo contenido deba ser preservado.
Típicamente los registros que requieren eventual protección son:
• PSW
• DPTR (DPH/DPL)
• Acc
•B
• R0-R7
99
Interrupciones

Para proteger los cinco primeros registros de la lista anterior se


inserta en la RSI instrucciones PUSH r al inicio y POP r antes de la
instrucción RETI.

En lugar de salvar los registros R0-R7, la RSI puede usar una


ventana de registros distintas a la usada por el código interrumpido.

Tenga en cuenta que no es buena idea usar PUSH R0 para preservar


el registro R0 porque tal instrucción no será reconocida por el
ensamblador. En su lugar use PUSH 00H si está activo el banco 0,
PUSH 08H si el banco activo es el 1…

100
Interrupciones
La interrupción del puerto serie

A diferencia de las otra fuentes de interrupción, la interrupción del


puerto serie puede ser disparada por dos eventos distintos. Existen
dos banderas del puerto serie: RI es activada cuando se recibe el
último bit de un carácter por el canal serie, mientras que TI es puesta
1 cuando se transmite el bit de parada de un carácter. En ambos
casos se producirá una interrupción, si está habilitada, con vector de
interrupción 23H.
Esto obliga a que el código que se inicia en tal dirección deberá
primero distinguir si la interrupción se produjo por la transmisión (TI=1)
o la recepción (RI=1) de un byte por el puerto serie. De acuerdo con el
resultado, se transmitirá o se aceptará un carácter.
101
Interrupciones

jnb RI,exam_TI
mov a,SBUF
clr RI
exam_TI: jnb TI,listo
clr TI
mov SBUF,a
listo: reti
El código examina ambas banderas y procede de acuerdo con cual
está activa. Si ambas lo están, ejecutará ambas secciones de código.
Es obligatorio que la RSI limpie las banderas TI y RI.

102
Interrupciones

Programa 11
Usando las interrupciones de los timers debe generarse en P0.1 un
tren de pulsos con ciclo de trabajo de 25 % y frecuencia 10 KHz.
Simultáneamente debe parpadear un LED conectado a P0.0

Este ejemplo intenta demostrar como el microcontrolador puede


ejecutar varias tareas si se usa la técnica de interrupciones. El periodo
de la señal es de 100 µs y el ancho de pulso en alto es 25 µs. Se usa
T0 en modo 2 para generar el periodo y a T1 en modo 1 le
corresponderá mantener la salida en alto durante 25 µs.

103
Interrupciones

El timer T0 se activa primero y cuando desborda la RSI de T0 pone la


salida en alto y arranca a T1. Cuando TF1 conmuta a 1, la RSI de T1
retorna P0.1 a cero.

Observe que si TH1/TL1 es cargado con valores desde una tabla en


memoria, se puede variar el tiempo alto de la onda con periodo
constante. Esto permite realizar la técnica de PWM.

104
Interrupciones

105
Interrupciones

106
+5V

+5V
C2
33pF X1
C1
33pF D1 Interrupciones
LED-RED

U1 U2:A
CRYSTAL
19 39 1 2
R1
12 MHz XTAL1 P0.0/AD0
38
P0.1/AD1 330
37
P0.2/AD2 7406
18 36
XTAL2 P0.3/AD3
C3 P0.4/AD4
35
10uF 34
P0.5/AD5
33
P0.6/AD6
9 32
RST P0.7/AD7 A
21
P2.0/A8
R6 P2.1/A9
22
8.2k 23
P2.2/A10 B
29 24
PSEN P2.3/A11
R7 30 25
ALE P2.4/A12
31 26

Simulación con
EA P2.5/A13
27
10k P2.6/A14
28
P2.7/A15
1 10
P1.0 P3.0/RXD
2 11
+5V P1.1 P3.1/TXD
3 12
P1.2 P3.2/INT0

PROTEUS
4 13
P1.3 P3.3/INT1
5 14
P1.4 P3.4/T0
6 15
P1.5 P3.5/T1
7 16
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
80C51

107
Interrupciones
Onda generada en P0.1

108
Interrupciones

Programa 12

Este ejemplo muestra el uso de las entradas de interrupción externas


del 8051. El código debe hacer destellar un LED en P2.4 y muestrear
una señal analógica por medio de un convertidor A/D conectado al P1.
Si un interruptor SEL (en P2.6) está abierto, la onda adquirida debe
enviarse sin alteraciones a un conversor D/A en el puerto 0. En caso
que SEL esté cerrado, la señal debe ser invertida antes de ser escrita
en el puerto de salida.

109
Interrupciones

La frecuencia de muestreo es 3.9 KHz y debe usarse el timer T0 para


generarla. El final de la conversión debe ser anunciado por el
convertidor A/D mediante una interrupción en el terminal /INT0.
Solución:
Se diseña un sistema para procesamiento de señales, controlado por
el programa mostrado más adelante.

110
Interrupciones

Sistema típico para procesamiento digital de señales

111
Interrupciones

Sistema de control digital

112
Interrupciones
Conversión análogo digital

Series de Fourier: fp(t) está constituida por tres componentes


113
Interrupciones
Señal muestreada por impulsos

114
Interrupciones
FUNCIONES CON MUESTRAS IGUALES

115
Interrupciones

Teorema del muestreo


Establece cuan pequeño debe ser T para reconstruir f(t), dando
solamente el conjunto de muestras [fm]. El teorema del muestreo
especifica restricciones sobre el contenido de frecuencias de f(t) y
puede ser establecido como sigue:

Para recuperar f(t) exactamente, es necesario


muestrear la señal a una velocidad mayor que
el doble de su frecuencia más alta.
fs ≥ 2fH
116
Interrupciones

fs ≥ 2fH
fs: frecuencia de muestreo
fH: frecuencia más alta en la señal que se muestrea

117
Interrupciones

Muestreo al doble de la frecuencia más alta

118
Interrupciones

Muestreo a más del doble de la frecuencia más alta

119
Interrupciones

Muestreo a menos del doble de la fH

120
Efecto Aliasing

TT1 <<TT2
1 2

La
La forma
forma de de onda
onda
de
de f(t)
f(t) tiene
tiene com-
com-
ponentes
ponentes de de fre-
fre-
cuencia
cuenciapor porencima
encima
de
de 1/2T
1/2T2 2 pero
pero no
no
sobre
sobre1/2T
1/2T1. .
1

121
Interrupciones
5.6k R2

-12V

4
U2
12 4 2 5
P0.0 A8 IOUT - OS2
11

V-
P0.1 A7
10 6
P0.2 A6 OUT SAL
9 2
P0.3 A5 IOUT
8 3 1
P0.4 A4 + OS1

V+
7
P0.5 A3
6 U3 LM741/NS
P0.6 A2
5 16
P0.7 A1 COMP

7
R4 5.6k
14
+5V VR+ +12V
15 100n C1 SEL
VR-
P2.6
R5 5.6k DAC0808
+12V -12V

U6
LED
1
2

U5A
3 U1 330
ENT +
5 26 17 1 2
IN0 D0 P1.0 P2.4 +5V
8 27 14
P2.7 - IN1 D1 P1.1
28 15 D1
IN2 D2 P1.2
LF398 1 8 7406 R6
IN3 D3 P1.3
2 18
IN4 D4 P1.4
4
6
7

3 19
IN5 D5 P1.5
+5V 4 20
-12V IN6 D6 P1.6
5 21
IN7 D7 P1.7
1n
C2 12 25
16 REF+ A0 24
REF- A1 23
10 A2
CLK CLK 6
START P2.0
9 22
7 OE ALE
EOC
No se muestra el filtro pasa bajo anti-aliasing
ADC0808
U4A ni el filtro PB de salida. El diagrama completo
+5V puede verse en el esquematico para simulación
2 1
INT0 en PROTEUS.

74LS04
122
Interrupciones

123
Interrupciones

124
Interrupciones

125
Interrupciones

126
C7

0.002uF
+5V
R7
R3 22k

5.6k
C4 C3 R1
33pF 33pF 5.6k -12V

Interrupciones
-12V
X1 U2 U1
19
XTAL1 P0.0/AD0
39 5
A1 VREF+
14 U7:A
38 6 R2 U5

11
P0.1/AD1 A2
37 7 15 SAL

4
5
CRYSTAL P0.2/AD2 A3 VREF-
18 36 8 2
12 MHz XTAL2 P0.3/AD3 A4 5.6k
35 9 4 2 R9 R8 1
+5V +5V P0.4/AD4 A5 IOUT
34 10 6 3
C5 P0.5/AD5
33 11
A6
16 3
P0.6/AD6 A7 COMP 1k 1k LM324
9 32 12 3
RST P0.7/AD7 A8 VEE LM741
C6

4
C2

7
1
10uF 21 DAC0808 0.067uF
P2.0/A8
R6 P2.1/A9
22 LED 0.1u
R5 1k P2.2/A10
23 S/H U3(START)
8.2k 29 24
PSEN P2.3/A11 +12V
30 25 R9(1)
ALE P2.4/A12 LED +12V
31 26
EA P2.5/A13
27
P2.6/A14 SEL
28
P2.7/A15 S/H
-12V +5V
1
P1.0 P3.0/RXD
10 U4:A
2 11
P1.1 P3.1/TXD
3 12 2 1
P1.2 P3.2/INT0
4 13
P1.3 P3.3/INT1
5 14
P1.4 P3.4/T0 74LS04
6 15
P1.5 P3.5/T1
7
P1.6 P3.6/WR
16 R4
8 17 220
P1.7 P3.7/RD
ENT_ADC
80C51
SEL
SEL
U3(CLOCK)
U3
ENT_ADC
26
IN0 CLOCK
10 D1
27 6 LED-GREEN
IN1 START

Simulación con
28 U3(EOC)
IN2
1
IN3 EOC
7 U6:A
2
IN4
3 21 2 1
IN5 OUT1 LED
4 20
IN6 OUT2
5 19
IN7 OUT3 7406
18
OUT4
25 8
ADD A OUT5
24 15
ADD B OUT6
23 14
ADD C OUT7
22 17

PROTEUS
ALE OUT8
+5V

12
VREF(+)
16 9
VREF(-) OE
ADC0808

+5V

C9

0.002uF
R10
22k

-12V
S/H

U7:B SUB1
11

ENT
S/H
6
Y ENT_ADC
R12 R11 7
A
5
1k 1k SAMPLE/HOLD
LM324

C8
127
4

ENT 0.067uF

+12V
Interrupciones

PROTEUS no tiene
SW1
DSWITCH Y

A
modelos para
SAMPLE/HOLD.
S/H C1
10nF

Los operacionales son ideales


Interrupciones

Señal de entrada
Interrupciones

Señal de entrada y salida


del S/H
Interrupciones

Ahora con control S/H


Interrupciones
Interrupciones

Salida del S/H y Salida


del Conversor D/A
Interrupciones
Interrupciones

Señal de salida con SEL


cerrado
Interrupciones

Señales de entrada y
salida
Interrupciones

Señales de control

137
Interrupciones

Adquisición de una señal


de voz
Interrupciones

El ejemplo anterior fue modificado para adquirir una señal de audio.


Debido a que el ancho de banda de la voz es de 3.4 KHz, el muestreo
se realiza a 8.0 KHz.
Un mensaje de voz fue grabado y almacenado en un archivo de audio:
entrada_voz.wav y aplicado como entrada al sistema de adquisición.

139
Interrupciones

Modificaciones realizadas al circuito:


Debido a que la señal de entrada es bipolar; y en la práctica puede ser
de magnitud diferente a la nuestra (± 1 V), se agrega a la etapa de
entrada circuitos para modificar la amplitud de la entrada y ajustar su
nivel DC. El conversor A/D debe recibir una onda de 0 a +5 V, en
nuestro configuración. Otro circuito analógico hace posible ajustar el
desplazamiento (offset) de la salida.
La frecuencia de corte de los filtros pasa bajo, a la entrada y la salida
fue modificada como corresponde.
Se eliminó el interruptor SEL y también el LED parpadeante.

140
Interrupciones

+5V

C11 RV2
-12V

47%
10uF
100k
C6

10uF
C13
R1 R2
R6
10k 100k 10k 0.002uF
-12V

U1:B
U1:A

11
11

Vi
6
2 R3 R4 R5 7
ESH
1 ic=0 5
3
46%

RV3 10k 10k 10k


LM324

4
47k
LM324
4

C8 0.0022uF C9

10uF

C7

10uF
+12V 141
ETAPA DE ENTRADA +12V
Interrupciones

+5V

RV1
53%
10k

R17 R18
C12 470k 470k
-12V

-12V
0.002uF

U1:D
U1:C

11
11

13
9 R15 14
Vo
R13 R14 8 12
10 10k
SDAC
10k 10k

4
LM324
R16
4

LM324
0.0028uF C10 10k

ETAPA DE SALIDA +12V


+12V
142
Interrupciones

Modificaciones realizadas al programa:


Al suprimir el LED, el programa principal se reduce a una instrucción
que espera la interrupción de T0:
sjmp $
El valor a cargar en T0 para un muestreo de 8.0 KHz es de 83H.
En la rutina de servicio de INT0 se elimina el examen del interruptor
SEL y la inversión de la señal.

143
+5V

R10
5.6k
C4 C3 R8

Interrupciones
33pF 33pF 5.6k
-12V
X1 U3 U2
19 39 5 14
XTAL1 P0.0/AD0 A1 VREF+
P0.1/AD1
38 6
A2 R9 U6 SUB3
37 7 15

4
5
CRYSTAL P0.2/AD2 A3 VREF-
18 36 8 SAL
12 MHz XTAL2 P0.3/AD3 A4 5.6k
35 9 4 2
+5V +5V P0.4/AD4 A5 IOUT
34 10 6
C5 P0.5/AD5
33 11
A6
16 3
SDAC Vo
P0.6/AD6 A7 COMP
9 32 12 3
RST P0.7/AD7 A8 VEE LM741

C2

7
1
10uF 21 DAC0808
P2.0/A8
R12 P2.1/A9
22 0.1u ETAP_SAL
R11 1k P2.2/A10
23
8.2k 29 24
PSEN P2.3/A11
30 25
ALE P2.4/A12 +12V
31 26
EA P2.5/A13
27
P2.6/A14
28
P2.7/A15
-12V
1
P1.0 P3.0/RXD
10 U5:A
2 11
P1.1 P3.1/TXD
3 12 2 1
P1.2 P3.2/INT0
4 13
P1.3 P3.3/INT1

Simulación en Proteus
5 14
P1.4 P3.4/T0 74LS04
6 15
P1.5 P3.5/T1
7 16
P1.6 P3.6/WR
8 17
P1.7 P3.7/RD
80C51

U4(CLOCK)
U4
26 10
IN0 CLOCK
27 6
IN1 START
28
IN2
1 7
IN3 EOC
2
IN4
SUB1(Vi) 3 21
IN5 OUT1
4 20
SUB1 SUB2 5
IN6 OUT2
19
IN7 OUT3
18
S/H OUT4
25 8
Y ADD A OUT5
24 15
Vi ESH A ADD B OUT6
23 14
ADD C OUT7
SAMPLE/HOLD 22 17
ALE OUT8
+5V

12
VREF(+)
ETAP_ENT 16 9
VREF(-) OE
ADC0808

+5V

144
Interrupciones

Salida de 1.4 segundos


de audio
Versiones del 8051

Existen
ElEl 8051
Existen alal menos
8051 original fue
fue diseñado
menos
original catorce
catorce
diseñado por fabricantes
por Intel.. Las de
de microcon-
Las funciones
fabricantes
Intel funciones de
de 44 de
de los
microcon- los
primeros
primeros miembros
miembros de
de lalafamilia
familia MCS-51
MCS-51 son:
son:
troladoresM E basados
M O R I A IINN T E RyN A compatibles con el 8051,
troladores basados y compatibles con el 8051,
quie-
quie-
RSólo
nes
la
T IP O
nes producen
producen
empresa casi
C A P A C ID A D
casi
holandesa 300
300
Philipsversiones
versionesproduce del
del
Sólo la empresa holandesa Philips produce
O M E P R O M N IN G U N A C Ó D I G O R A M T IM E R S T E C N O L O G ÍA
dispositivo. 8 7 5 1 En8 0 3 1 el programa µVision M O S Keil
Hde
dispositivo.
8051
8051A H 8751A H
En el
8 0 3 1 A H 40
40 programa
4K
modelos.
modelos.
4 K
128
1 2 8
µVision
2
2 H
de
M O S
Keil
Software
8 0 5 2 A H 8 7 5 2 Ase
Software se
H encuentran
8encuentran
032A H 8K las
las2 5 6 especificaciones
especificaciones
3 HMOS de
de
cada
cada modelo. modelo.
80C 51B H 87C 51 80C 31B H 4K 128 2 CMOS

146
Versiones del 8051
Características del 80C552
• CPU 80C51.
• 8 K x 8 de ROM/EPROM con expansión externa hasta 64 K.
• 256 bytes de memoria RAM.
• 2 Timers/Contadores estándares de 16 bits.
• 1 Timer/Contador de 16 bits asociado a 4 registros de captura y 3
registros de comparación.
• 2 canales PWM.
• Convertidor A/D de 10 bits con 8 entradas multiplexadas.
• Salida para bus serie I2C.
• 5 Puertos de E/S de 8 bits más 1 compartido con entradas analógicas.
• Frecuencia de operación hasta 30 MHZ (80C552). 16 MHz (87C552).

147
µCTRL 80C552/87C552

61
2
57 7

AVDD
VDD
P0.0/AD0 P4.0/CMSR0
56 8
P0.1/AD1 P4.1/CMSR1
55 9
P0.2/AD2 P4.2/CMSR2
54 10
P0.3/AD3 P4.3/CMSR3
53 11
P0.4/AD4 P4.4/CMSR4
52 12
P0.5/AD5 P4.5/CMSR5
51 13
P0.6/AD6 P4.6/CMT0
50 14
P0.7/AD7 P4.7/CMT1
16 1
P1.0/CT0I P5.0/ADC0
17 68
P1.1/CT1I P5.1/ADC1
18 67
P1.2/CT2I P5.2/ADC2
19 66
P1.3/CT3I P5.3/ADC3
20 65
P1.4/T2 P5.4/ADC4
21 64
P1.5/RT2 P5.5/ADC5
22 63
P1.6/SCL P5.6/ADC6
23 62
P1.7/SDA P5.7/ADC7
39 3
P2.0/A8 STADC
40 4
P2.1/A9 PWM0
41 5
P2.2/A10 PWM1
42 6
P2.3/A11 EW
43 58
P2.4/A12 AVref-
44 59
P2.5/A13 AVref+
45
P2.6/A14
46 49
P2.7/A15 EA/VPP
47
PSEN
24 48
P3.0/RxD ALE/PROG
25 15
P3.1/TxD RST
26 35
P3.2/INT0 XTAL1
27 34
P3.3/INT1 XTAL2
28
P3.4/T0
29
P3.5/T1
30
AVSS
VSS1
VSS2

P3.6/WR
31
P3.7/RD
60
36
37

148
µCTRL 80C552/87C552

149
µCTRL 80C552/87C552

Organización de la memoria

Igual que en el 80C51, pero con 8K de memoria interna de código,


256 bytes de RAM y nuevos FSR para el control de funciones
adicionales.

150
µCTRL 80C552/87C552

El convertidor A/D
El 805552 incluye un CAD de 10 bits con 8 canales de entrada. Estas
son las especificaciones del CAD.
8 canales de entrada multiplexados (Puerto 5).
Resolución de 10 bits.
Modo de conversión de una muestra o continuo.
Disparo de conversión interno o externo.
Genera interrupción al final de la conversión.

151
µCTRL 80C552/87C552

FSR para control del convertidor A/D

152
µCTRL 80C552/87C552

Operación del CAD


Para iniciar internamente la conversión, se pone en 1 el bit
ADCSADCON. ADCS puede ser puesto a uno por el programa solamente
o por el hardware o el programa.
El modo de arranque sólo por programa es seleccionado con el bit de
control ADEXADCON = 0. La conversión se inicia cuando el código pone
a 1 el bit ADCS. El inicio por hardware o programa se habilita con
ADEXADCON = 1, e cuyo caso la conversión se inicia activando ADCS o
aplicando un flanco de subida en el terminal externo STADC. En este
último modo, debe ser aplicado STADC un nivel bajo durante un ciclo
de máquina seguido por un nivel alto con duración mínima de 1 ciclo.
153
µCTRL 80C552/87C552

La bandera de ocupado ADCI (ADCON.4) es automáticamente puesta


a 0 al inicio de la conversión y llevada a 1 al final de la misma. Una
solicitud de interrupción puede ser generada cuando se completa una
conversión. ADCI Debe ser llevada a cero por el código.
El resultado de 10 bits es entregado en formato justificado a la
izquierda en los FSR ADCH y ADCON. El bit ADCH.7 es el bit de
mayor orden del resultado y ADCON.6 el menos significativo. Para
una conversión de 8 bits sólo es necesario leer a ADCH. Los bits
ADCON.2, ADCON.1 y ADCON.0 se usan para la selección de los
canales de entrada.

154
µCTRL 80C552/87C552

Señales con modulación de ancho de pulso (PWM)


El 80515A incluye un CAD de 10 bits con 8 canales de entrada. Estas
son las especificaciones del CAD.
8 canales de entrada multiplexados (Puerto 6).
Resolución de 10 bits.
Modo de conversión de una muestra o continuo.
Disparo de conversión interno o externo.
Genera interrupción al final de la conversión.

155
µCTRL 80C552/87C552
Señales con modulación de ancho de pulso (PWM)

Una onda PWM tiene un tiempo base (periodo) y un tiempo durante el


cual la salida permanece en nivel alto (ciclo de trabajo). El periodo es
la duración a partir del flanco de subida, hasta cuando la salida se
repite. La resolución de la salida PWM es la granularidad con la cual
puede ser variado el ciclo de trabajo y por supuesto, la frecuencia
PWM es el inverso del periodo.

156
µCTRL 80C552/87C552

157
µCTRL 80C552/87C552

158
µCTRL 80C552/87C552

El contador de 8 bits de la unidad PWM es de módulo 255, cuenta de


0 a 254. El valor en el contador es comparado con los contenidos de
los registros PWM0 y PWM1. Si el número en uno de los registros es
mayor que la cuenta, la salidas PWM que corresponda es puesta a
cero. En caso que el contenido de los registros sea menor o igual que
el estado del contador, entonces la salida PWM estará en nivel alto.
La razón de ancho de pulso estará fijada por el contenido del registro
PWMx y está en el rango de 0 a 1 y puede programarse con
incrementos de 1/255. Si se carga en los registros PWM: 0 ó FFH, la
salida será un nivel constante alto o bajo, respectivamente. Esto se
debe a que el contador no alcanza FFH por ser de módulo 255,

159
µCTRL 80C552/87C552

160
µCTRL 80C552/87C552

161
µCTRL 80C552/87C552

Programa 13

Se trata de adquirir voltajes DC desde 8 potenciómetros conectados a


las entradas análogas del 87C552. Los valores de las muestras deben
ser promediados y escritos en el canal PWM0.
El periodo de muestreo debe ser de 0.2 segundos y la frecuencia
PWM 15.68 KHz

162
+5V

µCTRL 80C552/87C552
+5V

P7 P6 P5 P4 P3 P2 P1 P0
10k X 8

61
2
7 57

VDD
AVDD
P4.0/CMSR0 P0.0/AD0
8 56
P4.1/CMSR1 P0.1/AD1
9 55
P4.2/CMSR2 P0.2/AD2
10 54
P4.3/CMSR3 P0.3/AD3
11 53
P4.4/CMSR4 P0.4/AD4
12 52
P4.5/CMSR5 P0.5/AD5
13 51
P4.6/CMT0 P0.6/AD6
14 50
P4.7/CMT1 P0.7/AD7
1 16
P5.0/ADC0 P1.0/CT0I
68 17
P5.1/ADC1 P1.1/CT1I
67 18
P5.2/ADC2 P1.2/CT2I
66 19
P5.3/ADC3 P1.3/CT3I
65 20
P5.4/ADC4 P1.4/T2
64 21
P5.5/ADC5 P1.5/RT2
63 22
P5.6/ADC6 P1.6/SCL
62 23
P5.7/ADC7 P1.7/SDA
U1:A
R1 3 39
STADC P2.0/A8
2 3 4 40
SALIDA PWM PWM0 P2.1/A9
5.1k 5 41
PWM1 P2.2/A10
6 42
4050 EW P2.3/A11
58 43
AVref- P2.4/A12
+88.8 C4 59
AVref+ P2.5/A13
44
Volts 10uF 45
P2.6/A14
49 46

+5V
EA/VPP P2.7/A15
47
PSEN
48 24
ALE/PROG P3.0/RxD
15 25
RST P3.1/TxD
35 26
XTAL1 P3.2/INT0
34 27
XTAL2 P3.3/INT1
X1 P3.4/T0
28
29
P3.5/T1
30
RESET

AVSS
VSS2
VSS1
P3.6/WR
31
P3.7/RD
CRYSTAL
C3 C1 16 MHz C2 87C552

37
36
60
33pF 33pF

2.2uF
163
+5V
µCTRL 80C552/87C552

164
µCTRL 80C552/87C552

165
µCTRL 80C552/87C552

166
µCTRL 80C552/87C552

El simulador PROTEUS no incluye el modelo del 87C552. de modo


que para simular la ejecución del código anterior se recurre al paquete
ya conocido µVision 2.
Las herramientas de Keil Software permiten la simulación del
hardware del µCtrl, incluyendo el conversor A/D y la salida PWM.

167
µCTRL 80515A

Simulación con µVision


2
µCTRL 80C552/87C552
Los valores de entrada y los resultados pueden verse en 3 ventanas de
periféricos: la del centro corresponde al convertidor A/D y se especifican los
voltajes aplicados a los 8 canales, el estado de los bits asociados al ADC y el
resultado de la conversión. Para el instante mostrado ADCH= 2BH y el
resultado de 10 bits 26EH.
Observe que la tensión promedio es de 2.5 V. Los valores de la conversión
se muestran a partir de la posición de memoria de datos 55H (canal 0) 56H
(canal 1) … El promedio se carga en 61H. En este caso no es necesario
convertir los resultados a BCD. La ventana de la derecha muestra el estado
de T0 y la de la izquierda el canal PWM0, donde se ha cargado 7FH. En
ejecución en tiempo real se puede seguir el timer PWM y verificar que la
salida PWM0 está en nivel bajo el mismo tiempo que en alto, para un ciclo de
trabajo de 50 %.

169
µCTRL 80C552/87C552

Con un circuito amplificador de corriente apropiado, las salidas PWM


se puede usar para controlar un motor DC. La velocidad de giro de la
máquina será proporcional al contenido del registro PWMx. En este
caso es preferible aplicar la señal de salida a los terminales del motor
sin modificarla previamente .
Cuando las salidas se usen como convertidores D/A es necesario usar
un filtro para alisar la señal y obtener la tensión requerida. Este puede
ser una red RC si la frecuencia PWM es mucho mayor (5 a 10 veces)
que la de la señal que sale. La alternativa es usar un filtro activo.
Para procesamiento digital de señales se obtienen mejores resultados
si la frecuencia PWM es al menos cinco veces mayor que la
frecuencia más alta de la onda que se reconstruye.

170
Modos de consumo reducido

Modos de consumo reducido


Las versiones CMOS del 8051 permiten el funcionamiento del µCtrl en
dos modos de consumo bajo:
1. Modo ocioso (idle)
2. Modo de potencia baja (Power down)
Ambos se controlan con los bits IDL y PD del registro FSR PCON. El
mecanismo consiste en desconectar la señal de reloj a los
subsistemas internos.

171
Modos de consumo reducido

172
Modos de consumo reducido

Si se pone en 1 el bit IDL, el reloj no llega al CPU y se detiene la


ejecución de instrucciones. En este caso no se afecta el
funcionamiento de los timers, puerto serie y el sistema de
interrupciones. Con el bit PD puesto a 1, se detiene el reloj y todo
funcionamiento interno es suspendido.
Durante cualquier modo de consumo bajo, se preserva el contenido de
la memoria y los puertos y FSRs retienen el valor que tenían antes
de ejecutarse la instrucción que activo el modo.
La forma de restaurar el modo normal desde bajo consumo depende
del modo activado.

173
Modos de consumo reducido

El modo idle puede desactivarse por la ejecución de una interrupción válida o


por la aplicación de un reset al sistema. En el primer caso se ejecuta la rutina
de servicio y la instrucción RETI, al final de la RSI, dirige el programa hacia
la instrucción siguiente a aquella que activó el modo idle. Además, el bit IDL
es puesto a cero. Para conocer si la interrupción ocurrió durante el modo
normal o el de bajo consumo, pueden usarse las banderas GFn, poniéndolas
a 1 antes de entrar al modo idle y examinándolas en la rutina de interrupción.
Al salir del modo idle por medio de un reset, se limpia el bit IDL y se retorna a
la siguiente instrucción a la que activó el modo.

Para salir del modo Power Down, debe aplicarse un reset. Después de un
operación de reinicio se pierde el contenido de los FSR pero se preserva la
memoria de datos interna.
174
EL Puerto de
Comunicación Serie
Puerto serie
El 8051 incluye un puerto serie que hace posible la comunicación
unidireccional (half duplex) o bidireccional (full duples) en modo
sincrónico o asincrónico en sistemas punto a punto o punto a
multipunto.
Estas características simplifican la realización de redes de
microcontroladores con dispositivos de la familia MCS-51.

El 8051 dispone de un UART integrado en el encapsulado, el cual re-


presenta el puerto para comunicación serie del µCtrl. El proceso de
transmisión/recepción se limita a escribir/leer un valor desde el
puerto.

176
Puerto serie

Antes de usar el puerto serie es necesario configurar el modo de ope-


ración y seleccionar la velocidad en baudios. Una vez realizada estas
tareas se escribe al SFR SBUF (99H) un valor para escribir al puerto
serie o se lee del mismo SFR para leer el puerto. SBUF representa
dos registros con igual dirección.

El 8051 informa cuando finaliza la transmisión del carácter escrito y


cuando ha recibido un dato, de modo que pueda ser procesado. El
programador no debe preocuparse por la transmisión a nivel de bit.

177
Puerto serie
Configuración del Puerto Serie
Lo primero que debe hacerse para usar el puerto serie es indicarle al
8051: cuantos bits deseamos transmitir, la velocidad a usar, y como
esta debe ser determinada. Para esta tarea se usa el FSR SCON
(98H).

SCON

178
Puerto serie
SM0-SM1 Serial Mode Bits
Seleccionan 1 entre 4 modos de operación, como indica la tabla
abajo. También indican como se calcula la velocidad. En los
modos 0 y 2 es fijada por la frecuencia del reloj maestro, mientras
que en los modos 1 y 3 es variable, determinada por cuan a
menudo se sobrepasa el TIMER 1.

179
* *LaLavelocidad
velocidadindicada
indicadaesesduplicada
duplicadasisiPCON.7 (SMOD)eses11. .
PCON.7(SMOD)
Puerto serie

180
Puerto serie

181
Puerto serie
SM2 Serial Mode 2
Es una bandera para comunicación multiprocesador. Cuando un
dato es recibido el 8051 pone a 1 la bandera de recepción RI,
indicando al programa que un byte fue recibido y que debe ser
procesado. Cuando SM2 está activado, RI va a 1 sólo si el 9no bit
recibido es 1. Esto es útil en ciertas aplicaciones avanzadas de
transmisión serie.

REN Receiver Enable


En estado alto permite recibir datos por el puerto serie

182
Puerto serie

Los siguientes cuatro bits (0 a 3) son operacionales. Se usan durante el proceso


de transmisión, no para configurar el UART.

TB8 Transmition Bit 8


Es usado en los modos 2 y 3, en los cuales se transmiten 9 bits.
Los primeros 8 corresponden al dato principal, mientras que el 9no
bit es tomado desde TB8.

RB8 Reception Bit 8


No se utiliza en el modo 0.
Es el bit de parada en el modo 1, si SM1 es 0
En los modos 2 y 3 es el noveno bit que se recibe
183
Puerto serie

TI Transmit Interrupt
Cuando un programa escribe un dato al puerto serie, pasará cierta
cantidad de tiempo antes que los bits sean cargados al puerto. Si
el programa intenta enviar otro byte antes que el anterior sea
escrito, la información se perdería. Con TI en 1 el 8051 indica al
programa que el puerto serie está listo para enviar el próximo byte.

RI Receive Interrupt
Igual que TI, pero para recepción de datos serie.

184
Puerto serie

185
Puerto serie
Seleccionando la velocidad del Puerto Serie
Una vez configurado el modo del puerto serie, como se explicó
anteriormente, el programa debe seleccionar la velocidad de baudios.
Esto sólo aplica a los modos del 1 y 3. En los modos 0 y 2, la velo-
cidad es determinada en base a la frecuencia del oscilador 2.

MODO 0: la velocidad es siempre la frecuencia del oscilador dividida


por 12. Esto significa que con un cristal de 11.059 MHz, la velocidad
será 921,583 baudios para el modo 0.
MODO 2: la velocidad corresponde a la frecuencia del oscilador
dividida por 64, así que una f = 11.059Mhz fijará una velocidad de
172,797 baudios.
186
Puerto serie

MODOS 1 y 3: La velocidad es determinada por la frecuencia con la


cual el timer 1 se sobrepasa. Hay muchas formas de lograr una fre
cuencia de el sobrepaso del timer 1 de modo de modo que
correspon- da a una determinada velocidad en baudios, pero el
método más co- mún es poner al timer 1 en el modo de 8 bits con
autorrecarga (T1 en MODO 2) y cargar un valor en TH1 que permita
generar la velocidad deseada.

187
Puerto serie

La expresión para la velocidad usando T1 es dada por:

El tiempo de desborde de T1 en modo 2 se calcula con:

188
Puerto serie

189
Puerto serie

Por ejemplo para fijar la velocidad de 19200 baudios con un cristal de


11.059 MHz, se debe:
1.Configurar el puerto serie en el modo 1 ó 3.
2.Configura temporizador T1 en modo 2 ( 8 bits con autorecarga).
3.Cargar TH1 Con FDH (253).
4.Poner a 1 PCON.7 (SMOD).

190
Puerto serie
Recepción por el puerto serie
Para recibir un dato una vez configurado el puerto serie, se lee el
registro FSR SBUF (99H), después que el 8051 haya activado la
bandera RI en SCON. Para que el programa espere por la recepción
de un carácter para cargarlo en el registro acumulador, puede usarse
el código siguiente:
jnb RI,$
mov a,SBUF
Por supuesto el µCtrl deberá esperar continuamente por el arribo de
un carácter. Cuando el UART recibe el bit de parada activa a RI. Este
modo de operación puede ser mejorado usando las interrupciones del
puerto serie. Más adelante se presentarán los ejemplos corres-
pondientes.
191
Puerto serie

Transmisión por el puerto serie


Si se quiere enviar la letra P por el canal serie , se debe ejecutar:
mov SBUF,#’P’
Antes de transmitir un carácter debe tenerse la seguridad que el
anterior ya ha sido enviado. El 8051 notifica que un carácter ha sido
enviado activando la bandera TI en SCON. El siguiente código
transmite un carácter y espera que TI se active , antes de continuar.
clr TI
mov SBUF,a
jnb RI,$.

192
Puerto serie
Programa 14
Escribir un programa que presente el siguiente menú en la pantalla.

193
Puerto serie

Al pulsar la tecla <ENTER> se podrá realizar una nueva selección. La


velocidad de transmisión es de 9600 baudios.

194
Puerto serie

195
Puerto serie

196
Puerto serie

197
Puerto serie

198

You might also like