Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Temporizadores PDF
Temporizadores PDF
(Timers/Counters)
Objetivos
TEMPORIZADORES Y CONTADORES 2
Resumen de contenidos
1 Introducción.
2 Los Temporizadores/Contadores 0 y 1.
2.1 Características básicas.
2.2 Hardware involucrado.
2.3 Diagrama de bloques.
2.4 Registros SFR TMOD y TCON.
2.5 Modos de funcionamiento.
2.6 Ejemplos.
4 Ejemplos de aplicación.
4.1 Medición del ancho de un pulso positivo.
4.2 Medición del período de una señal.
4.3 Generación de un pulso.
4.4 Generación de una señal PWM.
TEMPORIZADORES Y CONTADORES 3
1 - Introducción
TEMPORIZADORES Y CONTADORES 4
1 - Introducción
TEMPORIZADORES Y CONTADORES 5
1 - Introducción
Motor Encoder
Puente
en H
PWM Pulsos
Modulador PID Frecuencia
PWM analógico Tensión
Referencia
TEMPORIZADORES Y CONTADORES 6
1 - Introducción
Motor Encoder
Puente
en H
Referencia
TEMPORIZADORES Y CONTADORES 7
1 - Introducción
EJEMPLO:
Encoder
Pulsos
TEMPORIZADORES Y CONTADORES 8
1 - Introducción
Pulsos P1.0 µC
Cuenta=0
SI
Nivel
0?
“0” “1”
Incrementa
cuenta
...
SI MOV DPTR,#0
Nivel es_0: JNB P1.0,es_0
1? es_1: INC DPTR
JB P1.0,es_1
...
TEMPORIZADORES Y CONTADORES 9
1 - Introducción
Pulsos P1.0 µC
Cuenta=0
SI
Nivel
0?
“0” “1”
Incrementa
cuenta
unsigned int contador=0;
SI while (!P1.0) {}
Nivel while (P1.0)
1? {
contador++;
}
TEMPORIZADORES Y CONTADORES 10
1 - Introducción
TEMPORIZADORES Y CONTADORES 11
1 - Introducción
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
2 - T/C 0 y T/C 1 en la familia MCS-51
Características básicas
TEMPORIZADORES Y CONTADORES 14
2 - T/C 0 y T/C 1 en la familia MCS-51
2.1 Características básicas
? A OTRO SITIO
1 0 0 1 0 1 1 1 0 1 0 0 0 1 1 0
Valor cuenta = 9746h = 38726
TEMPORIZADORES Y CONTADORES 15
2 - T/C 0 y T/C 1 en la familia MCS-51
2.2 Hardware involucrado
TEMPORIZADOR/CONTADOR 0 (T/C 0)
– Registros (zona SFR):
• TMOD (modo operación) (dir. 89h por máscara).
• TCON (control operación) (dir. 88h bit a bit).
• TL0, TH0 (registros cuenta) (dir. 8Ah y 8Ch).
– 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 operación) (dir. 89h por máscara).
• TCON (control operación) (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
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques
Generación:
- Eventos externos Contador
- Señal reloj interno
Control
de puerta
TEMPORIZADOR/CONTADOR 0 (T/C 0)
– SFR: TMOD (modo operación), TCON (control operación), 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 operación), TCON (control operación), TL1, TH1 (registros cuenta).
– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES 17
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques
OSC 1/12
1 = cerrado
0
C/T Contador
Contador TF0
pin 1
T0
(P3.4)
GATE
pin Control
/INT0
(P3.2)
de puerta
TR0
TEMPORIZADOR/CONTADOR 0 (T/C 0)
– SFR: TMOD (modo operación), TCON (control operación), 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 operación), TCON (control operación), TL1, TH1 (registros cuenta).
– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES 18
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques
OSC 1/12
1 = cerrado
0
C/T Contador
Contador TF0
pin 1
T0
(P3.4)
GATE
pin
/INT0
(P3.2)
TR0
TEMPORIZADOR/CONTADOR 0 (T/C 0)
– SFR: TMOD (modo operación), TCON (control operación), 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 operación), TCON (control operación), TL1, TH1 (registros cuenta).
– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES 19
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques
OSC 1/12
1 = cerrado
0
C/T Contador TF0
pin 1
T0
(P3.4)
GATE
pin
/INT0
(P3.2)
TR0
TEMPORIZADOR/CONTADOR 0 (T/C 0)
– SFR: TMOD (modo operación), TCON (control operación), 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 operación), TCON (control operación), TL1, TH1 (registros cuenta).
– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES 20
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques
OSC 1/12
1 = cerrado
0
C/T Contador TF0
pin 1
T0
Interrupción
(P3.4)
GATE (si está habilitada)
pin
/INT0
(P3.2)
TR0
TEMPORIZADOR/CONTADOR 0 (T/C 0)
– SFR: TMOD (modo operación), TCON (control operación), 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 operación), TCON (control operación), TL1, TH1 (registros cuenta).
– Pines: T1 (P3.5) (entrada de pulsos), /INT1 (P3.3) (control de puerta).
TEMPORIZADORES Y CONTADORES 21
2 - T/C 0 y T/C 1 en la familia MCS-51
pin
/INT0
TR0
T/C 1
TEMPORIZADORES Y CONTADORES 22
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupción
GATE
pin
/INT0
TR0
T/C 1 T/C 0
b7 TMOD, dir. 89h, por máscara b0
GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TEMPORIZADORES Y CONTADORES 23
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupción
GATE
pin
/INT0
TR0
TEMPORIZADORES Y CONTADORES 24
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0
Bit C/T Interrupción
GATE
Selección modo
pin
-INT0
contador o temporizador.
TR0 0 -> temporizador
1 -> contador
b7 TMOD, dir. 89h, por máscara b0
GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TEMPORIZADORES Y CONTADORES 25
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
1
0
C/T
1
Contador TF0
pin
T0 Interrupción
GATE Pulso muy estrecho:
¡se pierde!
pin
pin
/INT0 T0
TR0
C.M.C.M.
? Operación como temporizador
– Cuentan ciclos de máquina (1 ciclo máquina “0” “1”= 12 ciclos
(C.M.) “0” de
“0”reloj).
? Operación como contador
– Detección de flancos de bajada en el pin T0 (P3.4).
– Muestreo cada CM -> Flanco de bajada = detectar “1” y después “0”.
– Máxima frecuencia detectable será 1/24 frecuencia reloj.
TEMPORIZADORES Y CONTADORES 26
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupción
GATE Bit TR0
pin Activación T/C 0.
/INT0 0 -> desactivado
TR0
1 -> activado
TEMPORIZADORES Y CONTADORES 27
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupción
GATE Bit GATE
pin Control de puerta.
/INT0 0 -> interno (software)
TR0
1 -> externo (hardware)
TEMPORIZADORES Y CONTADORES 28
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupción
1
GATE
0 D Bit GATE
Control de puerta.
D/INT0
pin
0 -> interno (software)
TR0
1 -> externo (hardware)
TEMPORIZADORES Y CONTADORES 29
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupción
0
GATE
1 1 Bit GATE
Control de puerta.
D/INT0
pin
0 -> interno (software)
TR0
1 -> externo (hardware)
TEMPORIZADORES Y CONTADORES 30
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0 Interrupción
Modo
GATE
Modo 0: Contador 13 bits.
pin
/INT0
Modo 1: Contador 16 bits.
TR0
Modo 2: Cont. 8 bit autorrecarga
Modo 3: Desdoble (T/C0)
TEMPORIZADORES Y CONTADORES 31
2 - T/C 0 y T/C 1 en la familia MCS-51
Interrupción
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T
1
Contador
111...100
000...010
000...001
000...000
111...111
111...110
111...101 1
TF0
pin
T0
ContadorInterrupción
GATE
Registros SFR TH0 y TL0.
pin
/INT0
Ascendente.
TR0
Y cuando desborda ...
TEMPORIZADORES Y CONTADORES 32
2 - T/C 0 y T/C 1 en la familia MCS-51
2.4 Registros SFR TMOD y TCON
OSC 1/12
1 = cerrado
0
C/T Contador TF0
1
pin
T0
Bit TF0 Interrupción
GATE
Timer flag 0.
pin
/INT0
1 -> desborde
TR0 PERO NO SE DETIENE
EL CONTADOR
b7 TMOD, dir. 89h, por máscara b0
GATE C/ T M1 M0 GATE C/T M1 M0
T/C 1 T/C 0
b7 TCON, dir. 88h, bit a bit b0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
TEMPORIZADORES Y CONTADORES 33
2 - T/C 0 y T/C 1 en la familia MCS-51
Ejemplo:
Se desea temporizar un intervalo de 125 ? s. ¿Cuál es el valor a
cargar como cuenta inicial?
Para un valor de fOSC =12MHz:
TEMPORIZADORES Y CONTADORES 34
2 - T/C 0 y T/C 1 en la familia MCS-51
Ejemplo:
Se desea temporizar un intervalo de 2s. ¿Cuál es el valor a
cargar como cuenta inicial? (fOSC=12MHz)
TEMPORIZADORES Y CONTADORES 35
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento
M1 M0 Modo
Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (los de
0 0 0 menor peso) (13 bits en total). (los 3 bits de mayor peso de TLx son de valor
indeterminado)
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
1 0 2
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
1 1 3 controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.
TEMPORIZADORES Y CONTADORES 36
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento
TEMPORIZADORES Y CONTADORES 37
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento
TEMPORIZADORES Y CONTADORES 38
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento
OSC 1/12
1 = cerrado
0
C/T
TL0
Contador TF0
1 8 bits
pin
T0 Interrupción
Recarga
GATE
TH0
pin 8 bits
/INT0
TR0
MODO 2: Contador de 8 bits con autorrecarga
M1 M0 Modo
Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bits
0 0 0
en total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
1 0 2
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
1 1 3 controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.
TEMPORIZADORES Y CONTADORES 39
2 - T/C 0 y T/C 1 en la familia MCS-51
2.5 Modos de funcionamiento
TR1
TH0
TH0
Intr
OSC 1/12 ??????
TF1
8 bits
0
C/T TL0
TL0 TF0 Intr
??????
1 8 bits
pin T0
GATE
pin INT0
TR0
MODO 3: Desdoble T/C 0
M1 M0 Modo
Temporizador/contador de 8 bits con THx. TLx actúa como preescala de 5 bits (13 bits
0 0 0
en total).
0 1 1 Temporizador/contador de 16 bits, con THx y TLx en cascada
Temporizador/contador de 8 bits con autorrecarga. THx contiene el valor de recarga
1 0 2
para TLx tras cada desbordamiento
Para el temporizador 0, TL0 y TH0 son dos temporizadores/contadores de 8 bits,
1 1 3 controlados con los bits de control de los temporizadores 0 y 1 respectivamente.
Temporizador 1 inactivo.
TEMPORIZADORES Y CONTADORES 40
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador
Se desea contabilizar los vehículos que circulan por una carretera.
NO excederán de 30.000.
TEMPORIZADORES Y CONTADORES 41
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador
Se desea contabilizar los vehículos que circulan por una carretera.
NO excederán de 30.000.
– Contador.
– Interno
– Modo 1. En principio podemos contar hasta 65535.
– 0.
TH0=0x00; TL0=0x00;
TEMPORIZADORES Y CONTADORES 42
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador
Se desea contabilizar los vehículos que circulan por una carretera. NO excederán de 30.000.
TH0=0x00; TL0=0x00;
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A;
sbit TF0=TCON^5, TR0=TCON^4;
void main(void)
{
int vehiculos;/* Para contabilizar vehículos */
TMOD = 0x05; /* 0101(b => T/C 0, control sw, contador, modo 1 */
TH0=0x00;
TL0=0x00;
/* sigue ... */
}
TEMPORIZADORES Y CONTADORES 43
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador
Se desea contabilizar los vehículos que circulan por una carretera.
NO excederán de 30.000.
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A;
sbit TF0=TCON^5, TR0=TCON^4;
void main(void)
{
int vehiculos;
TEMPORIZADORES Y CONTADORES 44
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un contador (ampliación)
Se desea contabilizar los vehículos que circulan por una carretera.
Mejora, 4.000 millones de vehículos.
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A;
sbit TF0=TCON^5, TR0=TCON^4;
void main(void)
{
TEMPORIZADORES Y CONTADORES 45
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un temporizador
Se desea realizar un retardo de 10 ms. Reloj del ? C de 12 Mhz
12 Mhz
1Ciclo Máquina ? ?1? S
12 períodos de reloj
10 mS ? 10.000 ? S ? 10.000 cuentas hasta desborde
? PASO 3: Modo 0 (13 bits), Modo 1 (16 bits) o Modo 2 (8 bits rec.)
– Modo 1.
? PASO 4: ¿Valor inicial del contador?
216 ? cuenta ? 65.536 ? 10.000 ? 55.536 ? D8 F 0h
TEMPORIZADORES Y CONTADORES 46
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un temporizador
Se desea realizar un retardo de 10 ms. Reloj del ? C de 12 Mhz
– Temporizador.
– Interno
– Modo 1.
– 55.536 (D8F0h)
TH0=0xD8; TL0=0xF0;
TEMPORIZADORES Y CONTADORES 47
2 - T/C 0 y T/C 1 en la familia MCS-51
2.6 Ejemplo de un temporizador
Se desea realizar un retardo de 10 ms. Reloj del ? C de 12 Mhz
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A;
sbit TF0=TCON^5, TR0=TCON4;
void main(void)
{
/* ... */
TMOD |= 0x01; /* timer 0, modo 1, soft. */
TMOD &= 0xF1;
TH0=0xD8; TL0=0xF0;
TF0=0;
TR0=1; /* arrancar timer */
while(!TF0); /* esperar desborde */
/* ... */
}
TEMPORIZADORES Y CONTADORES 48
2 - T/C 0 y T/C 1 en la familia MCS-51
Actividad
Se desea disponer de una función en lenguaje C para realizar
retardos de precisión del orden de milisegundos. Reloj del ? C de 12
Mhz.
? AYUDA:
Solución
TEMPORIZADORES Y CONTADORES 49
3 – Interrupciones asociadas a los
contadores/temporizadores
TEMPORIZADORES Y CONTADORES 50
3 – Interrupciones asociadas a los T/C
OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupción
GATE
pin
/INT0
TR0
Bit ET0
Habilitación de
interrupción.
TEMPORIZADORES Y CONTADORES 51
3 – Interrupciones asociadas a los T/C
OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupción
GATE
pin
/INT0
TR0 Bit TF0
Activación petición
interrupción.
(a 1)
TEMPORIZADORES Y CONTADORES 52
3 – Interrupciones asociadas a los T/C
OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupción
GATE
pin
-INT0
TR0
OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupción
GATE
pin
/INT0
TR0
Se puede combinar
el T/C y la
interrupción externa.
TEMPORIZADORES Y CONTADORES 54
3 – Interrupciones asociadas a los T/C
Ejemplo generación onda cuadrada
– Se trata de un ejemplo típico de tarea
periódica. P1.0
– Interesa tener desocupada la CPU para
otros menesteres.
– Se propone que el T/C genere una
interrupción transcurrido cada semiperiodo
y que la rutina de servicio modifique el valor
del pin.
10 Khz
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz
TEMPORIZADORES Y CONTADORES 55
3 – Interrupciones asociadas a los T/C
Ejemplo generación onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz
1 Ciclo Máquina ? 1 ? S
1
T? ? 0,1mS ? 100 ? S ? Semiperiodo ? 50 ? S (CM )
10 Khz
TEMPORIZADORES Y CONTADORES 56
3 – Interrupciones asociadas a los T/C
Ejemplo generación onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz
TEMPORIZADORES Y CONTADORES 57
3 – Interrupciones asociadas a los T/C
Ejemplo generación onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz
– Temporizador
– Interno
– Modo 2
– 206
TH0=TL0=206;
TEMPORIZADORES Y CONTADORES 58
3 – Interrupciones asociadas a los T/C
Ejemplo generación onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz
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
3 – Interrupciones asociadas a los T/C
Actividad
? AYUDA:
– DOS CAMINOS
– a) Las recargas del temporizador/contador se pueden hacer por software.
– b) Cada N interrupciones realizar la acción.
Solución
TEMPORIZADORES Y CONTADORES 60
3 - T/C 0 y T/C 1 en el 805x7
Actividad
Solución
TEMPORIZADORES Y CONTADORES 61
4 - Ejemplos de aplicación
TEMPORIZADORES Y CONTADORES 62
4 - Ejemplos de aplicación
4.1 Medir el ancho de un pulso positivo
?C
?
INT0
TEMPORIZADORES Y CONTADORES 63
4 - Ejemplos de aplicación
4.1 Medir el ancho de un pulso positivo
Control externo,
OSC= 1 1/12
bit GATE
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupción
? 1 GATE 0 0
pin
/INT0 0
TR0
¡No
cuenta!
TEMPORIZADORES Y CONTADORES 64
4 - Ejemplos de aplicación
4.1 Medir el ancho de un pulso positivo
OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0
1 Interrupción
? 1 GATE 0 1
pin
/INT0 1
TR0
¡Si
1 cuenta!
TEMPORIZADORES Y CONTADORES 65
4 - Ejemplos de aplicación
4.1 Medir el ancho de un pulso positivo
Aprovechar flanco
? de bajada para generar
una interrupción externa
y leer valor cuenta
TEMPORIZADORES Y CONTADORES 66
4 - Ejemplos de aplicación
4.1 Medir el ancho de un pulso positivo
void main(void) {
EAL = 0; /* deshabilitar interrupciones */
TMOD = 0x09; /* control hard., timer, modo 1 */
TH0 = 0x00; TL0 = 0x00;
IT0 = 1; /* disparo interrupción externa por flanco bajada*/
EX0 = 1; /* habilitar int. externa 0 */
EAL = 1; /* habilitar interrupciones */
TR0 = 1; /* a correr */
while (1)
{ /* otras cosas */ }
}
TEMPORIZADORES Y CONTADORES 67
4 - Ejemplos de aplicación
4.2 Medir el periodo de una señal
?C
INT0
TEMPORIZADORES Y CONTADORES 68
4 - Ejemplos de aplicación
4.2 Medir el periodo de una señal
TEMPORIZADORES Y CONTADORES 69
4 - Ejemplos de aplicación
4.2 Medir el periodo de una señal
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 aplicación
4.3 Generar un pulso
– Se utiliza un pin de un puerto (P2.0) para generar el pulso
– La precisión del método depende de la latencia de la interrupción del
temporizador.
temporizador
?C
P2.0
TEMPORIZADORES Y CONTADORES 71
4 - Ejemplos de aplicación
4.3 Generar un pulso
– Control por software. Bit GATE = 0
– P2.0 = 1
– Habilitar interrupción del T/C 0
– Arrancar el temporizador inicializando la cuenta en función del ancho del pulso
– Cuando rebose, se generará una interrupción procedente del T/C cuyo
manejador pondrá P2.0 = 0 dado que se ha alcanzado la duración del pulso
temporizador
P2.0 = 1
Inicializar El manejador de la interrupción
temporizador y del T/C 0, dará por finalizado
comenzar cuenta el pulso P2.0 = 0
TEMPORIZADORES Y CONTADORES 72
4 - Ejemplos de aplicación
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 duración del pulso. */
TL0 = LoTime;
TR0 = 1; /* Arrancar temporizador. */
P2.0 = 1; /* Comenienzo pulso. */
EAL = 1; /* habilitar interrupciones */ }
void Timer0_int (void) interrupt 1
{
TR0 = 0; /* Parar temporizador */
P2.0 = 0; /* Final del pulso */
}
TEMPORIZADORES Y CONTADORES 73
4 - Ejemplos de aplicación
4.3 Generar un pulso
TEMPORIZADORES Y CONTADORES 74
4 - Ejemplos de aplicación
4.4 Generar una señal PWM
– La precisión de este método depende de la latencia de las interrupciones
del temporizador.
– Para generar señales de mayor frecuencia usar modo 2.
TEMPORIZADORES Y CONTADORES 75
4 - Ejemplos de aplicación
4.4 Generar una señal PWM
TEMPORIZADORES Y CONTADORES 76
4 - Ejemplos de aplicación
4.5 Leer un timer “al vuelo”
TEMPORIZADORES Y CONTADORES 77
Solución 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 interrupción.
– 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; /* a correr */
while (1)
{ /* otras cosas */ }
}
void T0 (void)interrupt 1
{
P1.0 = ~P1.0;
TR0 = 0;
TH0 = 0xD8; TL0 = 0xF0;
TR0 = 1;
}
TEMPORIZADORES Y CONTADORES 78
Solución actividad
Se desea disponer de una función C para realizar retardos de
precisión del orden de milisegundos. Reloj del ? C de 12 Mhz.
void delay_ms(unsigned int mseg)
{
long l;
unsigned int desbordes, resto;
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;
void main(void) {
t_on_h = T_ON / 256; t_on_l = T_ON % 256;
t_off_h = T_OFF / 256; t_off_l = T_OFF % 256;
TMOD = 0x01;
TH0 = t_on_h; TL0 = t_on_l;
P_OUT = 1;
ET0 = 1; EAL = 1; TR0 = 1; /* a correr */
while (1)
{ /* otras cosas */ }
}
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 interrupción con cada overflow. El manejador de
interrupción tendrá como única misión invertir el valor de P3.5
SOLUCIÓN:
7 6 5 4 3 2 1 0
IEN0 1 0 0 0 0 0 1 0 = $82
7 6 5 4 3 2 1 0
TMOD 0 0 0 0 0 0 1 0 = $02
TIMER-0
TEMPORIZADORES Y CONTADORES 81
sfr TMOD=0x89,TCON=0x88,TH0=0x8C,TL0=0x8A, IEN0=0xA8, P3=0xB0;
sbit TR0=TCON^4;
TEMPORIZADORES Y CONTADORES 82
Bibliografía
TEMPORIZADORES Y CONTADORES 83