Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
(Timers/Counters)
Objetivos
TEMPORIZADORES Y CONTADORES
Resumen de contenidos
1 Introduccin.
2 Los Temporizadores/Contadores 0 y 1.
2.1
2.2
2.3
2.4
2.5
2.6
Caractersticas bsicas.
Hardware involucrado.
Diagrama de bloques.
Registros SFR TMOD y TCON.
Modos de funcionamiento.
Ejemplos.
TEMPORIZADORES Y CONTADORES
1 - Introduccin
TEMPORIZADORES Y CONTADORES
1 - Introduccin
Muchas aplicaciones de automatizacin y regulacin necesitan ...
TEMPORIZADORES Y CONTADORES
1 - Introduccin
EJEMPLO: Control velocidad motor asignatura Regulacin Automtica
Motor
Encoder
Puente
en H
PWM
Pulsos
Modulador
PWM
PID
analgico
Frecuencia
Tensin
Referencia
TEMPORIZADORES Y CONTADORES
1 - Introduccin
EJEMPLO: Control velocidad motor asignatura Regulacin Automtica
Motor
Encoder
Puente
en H
PWM
Microcontrolador
Pulsos
PID
digital
Referencia
TEMPORIZADORES Y CONTADORES
1 - Introduccin
EJEMPLO:
? El encoder genera una onda cuadrada
con frecuencia proporcional a la velocidad del motor
? Midiendo el ancho del periodo ON (Ton) se podra calcular la velocidad
Encoder
Toff = 0
Ton = 1
Pulsos
TEMPORIZADORES Y CONTADORES
1 - Introduccin
Medir ancho de un pulso
Encoder
Pulsos
P1.0
Cuenta=0
Nivel
0?
SI
0
Incrementa
cuenta
Nivel
1?
SI
es_0:
es_1:
...
MOV DPTR,#0
JNB P1.0,es_0
INC DPTR
JB P1.0,es_1
...
TEMPORIZADORES Y CONTADORES
1 - Introduccin
Medir ancho de un pulso
Encoder
Pulsos
P1.0
Cuenta=0
Nivel
0?
SI
0
Incrementa
cuenta
Nivel
1?
SI
10
1 - Introduccin
TEMPORIZADORES Y CONTADORES
11
1 - Introduccin
? Cada generacin de microcontroladores aade ms capacidad.
Temporizaciones.
Retardos, tareas peridicas, planificacin de tareas, ...
TEMPORIZADORES Y CONTADORES
12
2 Los Temporizadores/Contadores 0 y 1
T/C 0 y T/C 1 en la familia MCS-51
TEMPORIZADORES Y CONTADORES
13
TEMPORIZADORES Y CONTADORES
14
1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0
Valor cuenta = 9746h = 38726
TEMPORIZADORES Y CONTADORES
15
Terminales (Pines):
T0 (P3.4) (entrada de pulsos).
/INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)
Registros (zona SFR):
TMOD (modo operacin) (dir. 89h por mscara).
TCON (control operacin) (dir. 88h bit a bit).
TL1, TH1 (registros cuenta) (dir. 8Bh y 8Dh).
Terminales (Pines):
T1 (P3.5) (entrada de pulsos).
/INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES
16
Contador
Control
de puerta
TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), TL0, TH0 (registros cuenta).
Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)
SFR: TMOD (modo operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES
17
1/12
0
1 = cerrado
Contador
Contador
C/T
1
pin
T0
TF0
(P3.4)
GATE
Control
de puerta
pin
/INT0
(P3.2)
TR0
TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), TL0, TH0 (registros cuenta).
Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)
SFR: TMOD (modo operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES
18
1/12
0
1 = cerrado
Contador
Contador
C/T
1
pin
T0
TF0
(P3.4)
GATE
pin
/INT0
(P3.2)
TR0
TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), TL0, TH0 (registros cuenta).
Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)
SFR: TMOD (modo operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES
19
1/12
0
1 = cerrado
Contador
C/T
1
pin
T0
TF0
(P3.4)
GATE
pin
/INT0
(P3.2)
TR0
TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), TL0, TH0 (registros cuenta).
Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)
SFR: TMOD (modo operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES
20
1/12
0
1 = cerrado
Contador
C/T
1
pin
T0
TF0
Interrupcin
(P3.4)
GATE
pin
/INT0
(P3.2)
TR0
TEMPORIZADOR/CONTADOR 0 (T/C 0)
SFR: TMOD (modo operacin), TCON (control operacin), TL0, TH0 (registros cuenta).
Pines: T0 (P3.4) (entrada de pulsos), /INT0 (P3.2) (control de puerta).
TEMPORIZADOR/CONTADOR 1 (T/C 1)
SFR: TMOD (modo operacin), TCON (control operacin), TL1, TH1 (registros cuenta).
Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES
21
T/C 0
OSC
1/12
0
C/T
1
pin
T0
1 = cerrado
Contador
TF0
Interrupcin
GATE
pin
/INT0
TR0
T/C 1
TEMPORIZADORES Y CONTADORES
22
OSC
1 = cerrado
Contador
C/T
1
pin
T0
TF0
Interrupcin
GATE
pin
/INT0
TR0
T/C 1
b7
GATE
C/ T
T/C 1
b7
TF1
T/C 0
TR1
b0
M0
M1
T/C 0
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
23
OSC
1 = cerrado
Contador
C/T
1
pin
T0
TF0
Interrupcin
GATE
pin
/INT0
TR0
b7
GATE
C/ T
T/C 1
b7
TF1
TR1
b0
M0
M1
T/C 0
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
24
OSC
1 = cerrado
Contador
C/T
1
pin
T0
GATE
pin
-INT0
TR0
b7
GATE
C/ T
T/C 1
b7
TF1
TF0
TR1
b0
M0
M1
T/C 0
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
25
1/12
1
0
1 = cerrado
Contador
C/T
pin
T0
GATE
pin
T0
pin
/INT0
TF0
Interrupcin
Pulso muy estrecho:
se pierde!
TR0
C.M.C.M.
? Operacin como temporizador
Cuentan ciclos de mquina (1 ciclo mquina 0
(C.M.)
1= 12 ciclos
0 de
0reloj).
26
OSC
1 = cerrado
Contador
C/T
1
pin
T0
TF0
Interrupcin
Bit TR0
Activacin T/C 0.
0 -> desactivado
1 -> activado
GATE
pin
/INT0
TR0
b7
GATE
C/ T
T/C 1
b7
TF1
TR1
b0
M0
M1
T/C 0
IT1
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
27
OSC
1 = cerrado
Contador
C/T
1
pin
T0
TF0
Interrupcin
Bit GATE
Control de puerta.
0 -> interno (software)
1 -> externo (hardware)
GATE
pin
/INT0
TR0
b7
GATE
C/ T
T/C 1
b7
TF1
TR1
b0
M0
M1
T/C 0
IT1
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
28
OSC
1 = cerrado
Contador
C/T
1
pin
T0
GATE
Interrupcin
Bit GATE
Control de puerta.
0 -> interno (software)
1 -> externo (hardware)
pin
D/INT0
TR0
b7
GATE
C/ T
T/C 1
b7
TF1
TR1
TF0
b0
M0
M1
T/C 0
IT1
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
29
OSC
1 = cerrado
Contador
C/T
1
pin
T0
GATE
Interrupcin
Bit GATE
Control de puerta.
0 -> interno (software)
1 -> externo (hardware)
pin
D/INT0
TR0
b7
GATE
C/ T
T/C 1
b7
TF1
TR1
TF0
b0
M0
M1
T/C 0
IT1
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
30
OSC
1 = cerrado
Contador
C/T
1
pin
T0
Modo
GATE
TR0
C/ T
T/C 1
b7
TF1
Interrupcin
pin
/INT0
b7
GATE
TF0
TR1
b0
M0
M1
T/C 0
IT1
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
31
OSC
1 = cerrado
111...100
000...010
000...001
000...000
111...111
111...110
111...101
Contador
C/T
1
pin
T0
ContadorInterrupcin
GATE
pin
/INT0
TR0
b7
GATE
C/ T
T/C 1
b7
TF1
TF0
TR1
b0
M0
M1
T/C 0
IT1
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
32
OSC
1 = cerrado
Contador
C/T
1
pin
T0
GATE
pin
/INT0
TR0
b7
GATE
C/ T
T/C 1
b7
TF1
TF0
TR1
b0
M0
M1
T/C 0
IT1
IE0
b0
IT0
TEMPORIZADORES Y CONTADORES
33
*12=1? s
12MHz
Duracin=125? s=1? s*Cuenta
Duracin=125? s=1? s*125
Si se utilizan 8 bits: 256-125=131=83H
THx=?
THx=? TLx=131
TLx=131
THx=255
THx=255 TLx=131
TLx=131
TEMPORIZADORES Y CONTADORES
34
No
No cabe
cabe en
en
16
16 bits
bits
Resto_hasta_completar = 33920
35
M1
M0
Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (los de
menor peso) (13 bits en total). (los 3 bits de mayor peso de TLx son de valor
indeterminado)
Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.
TEMPORIZADORES Y CONTADORES
36
1/12
LSB
0
C/T
1
pin
T0
1 = cerrado
MSB
TL0
TH0
5 bits
Contador
8 bits
TF0
de menor
peso
Interrupcin
GATE
13 bits
pin
/INT0
TR0
M1
M0
TEMPORIZADORES Y CONTADORES
37
1/12
LSB
0
C/T
1
MSB
1 = cerrado
TL0
TH0
Contador
8 bits
8 bits
pin
T0
TF0
Interrupcin
GATE
16 bits
pin
/INT0
TR0
M1
M0
TEMPORIZADORES Y CONTADORES
38
1/12
0
C/T
1
1 = cerrado
TL0
Contador
8 bits
pin
T0
Recarga
GATE
pin
/INT0
TF0
Interrupcin
TH0
8 bits
TR0
M1
M0
TEMPORIZADORES Y CONTADORES
39
OSC
TH0
TH0
1/12
??????
8 bits
0
C/T
1
TL0
TL0
??????
TF1
Intr
TF0
Intr
8 bits
pin T0
GATE
pin INT0
TR0
M1
M0
Modo
Temporizador/contador de 8 bits con THx. TLx acta como preescala de 5 bits (13 bits
en total).
Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.
TEMPORIZADORES Y CONTADORES
40
? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)
Modo 1. En principio podemos contar hasta 65535.
Cuenta
T0
TEMPORIZADORES Y CONTADORES
0
2
1
41
Contador.
Interno
Modo 1. En principio podemos contar hasta 65535.
0.
TH0=0x00; TL0=0x00;
b7
GATE
C/ T
T/C 1
b7
TF1
TR1
1T/C 0 M10
IT1
IE0
b0
M0
1
b0
IT0
TEMPORIZADORES Y CONTADORES
42
TH0=0x00; TL0=0x00;
b7
GATE
C/ T
T/C 1
b7
TF1
TR1
1T/C 0 M10
IT1
IE0
b0
M0
1
b0
IT0
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A;
sbit TF0=TCON^5, TR0=TCON^4;
void main(void)
{
int vehiculos;/* Para contabilizar vehculos */
TMOD = 0x05; /* 0101(b => T/C 0, control sw, contador, modo 1 */
TH0=0x00;
TL0=0x00;
/* sigue ... */
}
TEMPORIZADORES Y CONTADORES
43
44
45
1Ciclo Mquina ?
12 Mhz
?1? S
12 perodos de reloj
? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)
Modo 1.
46
Temporizador.
Interno
Modo 1.
55.536 (D8F0h)
TH0=0xD8; TL0=0xF0;
b7
GATE
C/ T
T/C 1
b7
TF1
TR1
0T/C 0 M10
IT1
IE0
b0
M0
1
b0
IT0
TEMPORIZADORES Y CONTADORES
47
TEMPORIZADORES Y CONTADORES
48
? AYUDA:
Prototipo funcin: void delay_ms(unsigned int ms);
Calcular ciclos de mquina a esperar y usar un timer para contabilizarlos
Emplear mecanismo de desborde para realizar temporizaciones grandes
Solucin
TEMPORIZADORES Y CONTADORES
49
TEMPORIZADORES Y CONTADORES
50
Descripcin
Nombre
Cont./Temp. 0
Cont./Temp.1
T/C0
T/C1
OSC 1/12
C/T
pin
T0
0
1
1 = cerrado
Contador
TF0
Interrupcin
GATE
pin
/INT0
TR0
Bit ET0
Habilitacin de
interrupcin.
TEMPORIZADORES Y CONTADORES
51
Nombre
Cont./Temp. 0
Cont./Temp.1
T/C0
T/C1
OSC 1/12
C/T
pin
T0
0
1
1 = cerrado
Contador
TF0
Interrupcin
GATE
pin
/INT0
TR0
Bit TF0
Activacin peticin
interrupcin.
(a 1)
TEMPORIZADORES Y CONTADORES
52
Nombre
Cont./Temp. 0
Cont./Temp.1
T/C0
T/C1
OSC 1/12
C/T
pin
T0
0
1
1 = cerrado
Contador
TF0
Interrupcin
GATE
pin
-INT0
TR0
Direccin de
rutina interrupcin.
53
Nombre
Cont./Temp. 0
Cont./Temp.1
T/C0
T/C1
OSC 1/12
C/T
pin
T0
0
1
1 = cerrado
Contador
TF0
Interrupcin
GATE
pin
/INT0
TR0
Se puede combinar
el T/C y la
interrupcin externa.
TEMPORIZADORES Y CONTADORES
54
P1.0
10 Khz
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz
TEMPORIZADORES Y CONTADORES
55
? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)
Modo 2. 8 bits con autorrecarga
? Hacer nmeros
1 Ciclo Mquina ? 1 ? S
1
T?
? 0,1mS ? 100 ? S ? Semiperiodo ? 50 ? S (CM )
10 Khz
TEMPORIZADORES Y CONTADORES
56
? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)
Modo 2. 8 bits con autorrecarga
TEMPORIZADORES Y CONTADORES
57
Temporizador
Interno
Modo 2
206
TH0=TL0=206;
b7
GATE
b7
TF1
TR1
IT1
1
IE0
b0
M0
0
b0
IT0
TEMPORIZADORES Y CONTADORES
58
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A;
sfr IEN0=0xA8, P1=0x90;
sbit ET0=IEN0^1, EAL=IEN0^7, TR0=TCON^4;
void main(void) {
EAL = 0;
TMOD = 0x02;
TH0 = 206; TL0 = 206;
ET0 = 1; /* habilitar int. timer 0 */
EAL = 1;
/* habilitar interrupciones */
TR0 = 1; /* a correr */
while (1)
{ /* otras cosas */ }
}
void T0 (void)interrupt 1
{
P1.0 = ~P1.0;
}
TEMPORIZADORES Y CONTADORES
59
? AYUDA:
DOS CAMINOS
a) Las recargas del temporizador/contador se pueden hacer por software.
b) Cada N interrupciones realizar la accin.
Solucin
TEMPORIZADORES Y CONTADORES
60
Solucin
TEMPORIZADORES Y CONTADORES
61
4 - Ejemplos de aplicacin
TEMPORIZADORES Y CONTADORES
62
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo
Para introducir el pulso se emplea la entrada de interrupcin externa /INT0.
Se emplea el T/C 0 como temporizador en modo control hardware.
Si se desea medir el nivel bajo de esta manera es necesario emplear un
inversor externo.
?C
?
INT0
TEMPORIZADORES Y CONTADORES
63
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo
Control externo,
OSC= 1 1/12
bit GATE
1 = cerrado
Contador
C/T
1
pin
T0
GATE
pin
/INT0
TR0
0
0
TF0
Interrupcin
0
No
cuenta!
TEMPORIZADORES Y CONTADORES
64
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo
OSC
1/12
1 = cerrado
Contador
C/T
1
pin
T0
GATE
pin
/INT0
TR0
0
1
TF0
Interrupcin
1
Si
cuenta!
TEMPORIZADORES Y CONTADORES
65
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo
Aprovechar flanco
de bajada para generar
una interrupcin externa
y leer valor cuenta
Termina de contar
TR0 = 1
Control por HW:
Comienza a contar
TEMPORIZADORES Y CONTADORES
66
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8;
sbit TR0=TCON^4, IT0=TCON^0, EX0=IEN0^0, EAL=IEN0^7;
unsigned int ancho_pulso;
void main(void) {
EAL = 0;
/* deshabilitar interrupciones */
TMOD = 0x09;
/* control hard., timer, modo 1 */
TH0 = 0x00; TL0 = 0x00;
IT0 = 1; /* disparo interrupcin externa por flanco bajada*/
EX0 = 1; /* habilitar int. externa 0 */
EAL = 1;
/* habilitar interrupciones */
TR0 = 1; /* a correr */
while (1)
{ /* otras cosas */ }
}
void Externa0_INT0 (void) interrupt 0
{
TR0 = 0; /* para timer */
ancho_periodo = TH0*256+TL0; /* recoger medida */
TH0 = TL0 = 0; /*reiniciar cuenta timer */
TR0 = 1;
}
TEMPORIZADORES Y CONTADORES
67
4 - Ejemplos de aplicacin
4.2 Medir el periodo de una seal
?C
INT0
TEMPORIZADORES Y CONTADORES
68
4 - Ejemplos de aplicacin
4.2 Medir el periodo de una seal
Control por software. Bit GATE =0
Flanco bajada
generar peticin
Interrupcin externa:
Flanco bajada
generar peticin
Interrupcin externa:
Flanco bajada
generar peticin
Interrupcin externa:
Comenzar cuenta
Parar cuenta
y procesar cuenta
Comenzar cuenta
69
4 - Ejemplos de aplicacin
4.2 Medir el periodo de una seal
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8;
sbit TR0=TCON^4, IT0=TCON^0, EX0=IEN0^0, EAL=IEN0^7;
unsigned int periodo;
void main(void) {
EAL = 0;
/* deshabilitar interrupciones */
TMOD = 0x01;
/* control soft., timer, modo 1 */
TH0 = 0x00; TL0 = 0x00;
IT0 = 1; /* disparo int. externa. 0 por flanco bajada */
EX0 = 1; /* habilitar int. externa 0 *7
EAL = 1;
/* habilitar interrupciones */
TR0 = 1; /* a correr */
while (1)
{ /* otras cosas */ }
}
void Externa0_INT0 (void) interrupt 0
{
/* arranca y para el timer en */
/* interrupciones alternadas */
TR0 = ~TR0; /* complementar.
if (TR0==1)
return; /* salir si timer corriendo */
periodo = TH0*256+TL0; /* recoger medida */
TH0 = 0; TL0 = 0; /*reiniciar cuenta timer */
}
TEMPORIZADORES Y CONTADORES
70
4 - Ejemplos de aplicacin
4.3 Generar un pulso
Se utiliza un pin de un puerto (P2.0) para generar el pulso
La precisin del mtodo depende de la latencia de la interrupcin del
temporizador.
temporizador
?C
P2.0
TEMPORIZADORES Y CONTADORES
71
4 - Ejemplos de aplicacin
4.3 Generar un pulso
P2.0 = 1
Inicializar
temporizador y
comenzar cuenta
El manejador de la interrupcin
del T/C 0, dar por finalizado
el pulso P2.0 = 0
TEMPORIZADORES Y CONTADORES
72
4 - Ejemplos de aplicacin
4.3 Generar un pulso
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8 P2=0xA0;
sbit TR0=TCON^4, ET0=IEN0^1, EAL=IEN07;
#define HITime ???
#define LoTime ???
void main (void){
EAL = 0; /* deshabilitar interrupciones */
ET0 = 1; /* habilitar int. del T/C 0 *7
TCON = 0x00; /* Asegurarse que el temporizador est parado. */
TMOD =0x01; /* Temporizador en modo 1, soft. */
TH0 = HiTime; /* Cargar T/C 0 con la cuenta para la duracin del pulso. */
TL0 = LoTime;
TR0 = 1;
P2.0 = 1;
/* Arrancar temporizador. */
/* Comenienzo pulso. */
/* Parar temporizador */
P2.0 = 0;
}
TEMPORIZADORES Y CONTADORES
73
4 - Ejemplos de aplicacin
4.3 Generar un pulso
Inicio:
MOV
MOV
TCON,#$00
TMOD,#$01
MOV
TH0,#HiTime
MOV
SETB
TL0,#LoTime
TR0
;Arrancar temporizador.
SETB
P2.0
;Comenienzo pulso.
TR0
TEMPORIZADORES Y CONTADORES
74
4 - Ejemplos de aplicacin
4.4 Generar una seal PWM
La precisin de este mtodo depende de la latencia de las interrupciones
del temporizador.
Para generar seales de mayor frecuencia usar modo 2.
Arrancar tempo.
Valor 0
Arrancar tempo.
Valor 1
Repetir
TEMPORIZADORES Y CONTADORES
75
4 - Ejemplos de aplicacin
4.4 Generar una seal PWM
T0INT:
SetPWMHigh:
T0EX:
CLR
TR0
;Parar el temporizador.
CPL
P2.0
JB
P2.0,SetPWMHigh
;Est a valor 1 0?
MOV
TH0,PWMLowH
;Poner PWM a 0.
MOV
TL0,PWMLowL
SJMP
T0EX
MOV
TH0,PWMHighH
MOV
TL0,PWMHighL
SETB
TR0
;Poner PWM a 1.
;Reinicializar temporizador.
RETI
TEMPORIZADORES Y CONTADORES
76
4 - Ejemplos de aplicacin
4.5 Leer un timer al vuelo
ReadTimer: MOV
MOV
MOV
CJNE
SJMP
ValH,TH0
ValL,TL0
A,TH0
A,ValH,ChkHigh
RTEX
ChkHigh:
JB
ValL.7,RTEX
MOV
ValH,A
RTEX:
RET
TEMPORIZADORES Y CONTADORES
77
Solucin actividad
Generar onda cuadrada de 50 Hz por el pin P1.0. Reloj de 12 Mhz.
50 Hz = 20000 S periodo = 10000 S semiperiodo
Usar temporizador y modo 1 (16 bits). Recargar por programa el timer en interrupcin.
Recarga: 10000 S -> 65536 -10000 = 55536 = D8F0h
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A;
sfr IEN0=0xA8, P1=0x90;
sbit ET0=IEN0^1, EAL=IEN0^7, TR0=TCON^4;
void main(void) {
TMOD = 0x01;
TH0 = 0xD8; TL0 = 0xF0;
EAL = 0; ET0 = 1; EAL = 1; TR0 = 1;
while (1)
{ /* otras cosas */ }
}
/* a correr */
void T0 (void)interrupt 1
{
P1.0 = ~P1.0;
TR0 = 0;
TH0 = 0xD8; TL0 = 0xF0;
TR0 = 1;
}
TEMPORIZADORES Y CONTADORES
78
Solucin actividad
Se desea disponer de una funcin C para realizar retardos de
precisin del orden de milisegundos. Reloj del ? C de 12 Mhz.
void delay_ms(unsigned int mseg)
{
long l;
unsigned int desbordes, resto;
l = 1000L * mseg; /* ciclos mquina en us */
desbordes = (l / 65536) + 1; /*incluye desborde del resto*/
resto = 65536 - (l % 65536);
TR0=TF0=0; /*garantizar condiciones iniciales adecuadas*/
TMOD |= 0x01;
TMOD &= 0xF1; /* modo 1, temporizador, control soft. */
TL0 = resto & 0x00FF;
TH0 = resto >> 8;
TR0 = 1; /* a correr */
while(desbordes)
if (TF0)
{
TF0 = 0;
desbordes--;
}
TR0 = TF0 = 0;
}
TEMPORIZADORES Y CONTADORES
79
Actividad
Conseguir que el tiempo a nivel alto y a nivel bajo sean distintos.
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8;
sbit TR0=TCON^4, IT0=TCON^0, ET0=IEN0^1, EAL=IEN0^7;
#define T_ON
#define T_OFF
#define P_OUT
1000
2000
P1.0
TEMPORIZADORES Y CONTADORES
80
? EJERCICIO:
Realizar un programa en lenguaje C, que configure el TEMPORIZADOR-0
en modo 2 (Temporizador/Contador de 8 bits con autorrecarga), de forma
que genere una interrupcin con cada overflow. El manejador de
interrupcin tendr como nica misin invertir el valor de P3.5
SOLUCIN:
7
IEN0
1
EAL
TMOD
ET2
ES0
ET1
EX1
ET0
EX0
M1
M0
M1
M0
WDT
GATE
C/T
GATE
C/T
= $82
= $02
TIMER-0
TEMPORIZADORES Y CONTADORES
81
/* Rutina Timer-0 */
/* Habilitacin Interrupciones */
/* Configuracin Timer-0 */
/* Valor inicial en TH0 */
/* Valor inicial en TL0 */
/* Arranque del Timer-0 */
/* Invertir salida */
TEMPORIZADORES Y CONTADORES
82
Bibliografa
[Domng2001]
[Campelo1998]
[Martnez2001]
[Intel1994]
TEMPORIZADORES Y CONTADORES
83