Академический Документы
Профессиональный Документы
Культура Документы
(Timers/Counters)
Objetivos
TEMPORIZADORES Y CONTADORES 2
Resumen de contenidos
1 Introduccin.
2 Los Temporizadores/Contadores 0 y 1.
2.1 Caractersticas bsicas.
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 aplicacin.
4.1 Medicin del ancho de un pulso positivo.
4.2 Medicin del perodo de una seal.
4.3 Generacin de un pulso.
4.4 Generacin de una seal PWM.
TEMPORIZADORES Y CONTADORES 3
1 - Introduccin
TEMPORIZADORES Y CONTADORES 4
1 - Introduccin
TEMPORIZADORES Y CONTADORES 5
1 - Introduccin
Motor Encoder
Puente
en H
PWM Pulsos
Modulador PID Frecuencia
PWM analgico Tensin
Referencia
TEMPORIZADORES Y CONTADORES 6
1 - Introduccin
Motor Encoder
Puente
en H
Referencia
TEMPORIZADORES Y CONTADORES 7
1 - Introduccin
EJEMPLO:
Encoder
Toff = 0 Ton = 1
Pulsos
TEMPORIZADORES Y CONTADORES 8
1 - Introduccin
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 - Introduccin
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 - Introduccin
TEMPORIZADORES Y CONTADORES 11
1 - Introduccin
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
Caractersticas bsicas
TEMPORIZADORES Y CONTADORES 14
2 - T/C 0 y T/C 1 en la familia MCS-51
2.1 Caractersticas bsicas
? 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 operacin) (dir. 89h por mscara).
TCON (control operacin) (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 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
2 - T/C 0 y T/C 1 en la familia MCS-51
2.3 Diagrama de bloques
Generacin:
- Eventos externos Contador
- Seal reloj interno
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
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 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
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 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
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 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
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
Interrupcin
(P3.4)
GATE (si est habilitada)
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
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 Interrupcin
GATE
pin
/INT0
TR0
T/C 1 T/C 0
b7 TMOD, dir. 89h, por mscara 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 Interrupcin
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 Interrupcin
GATE
Seleccin modo
pin
-INT0
contador o temporizador.
TR0 0 -> temporizador
1 -> contador
b7 TMOD, dir. 89h, por mscara 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 Interrupcin
GATE Pulso muy estrecho:
se pierde!
pin
pin
/INT0 T0
TR0
C.M.C.M.
? Operacin como temporizador
Cuentan ciclos de mquina (1 ciclo mquina 0 1= 12 ciclos
(C.M.) 0 de
0reloj).
? Operacin como contador
Deteccin de flancos de bajada en el pin T0 (P3.4).
Muestreo cada CM -> Flanco de bajada = detectar 1 y despus 0.
Mxima 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 Interrupcin
GATE Bit TR0
pin Activacin 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 Interrupcin
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 Interrupcin
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 Interrupcin
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 Interrupcin
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
Interrupcin
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
ContadorInterrupcin
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 Interrupcin
GATE
Timer flag 0.
pin
/INT0
1 -> desborde
TR0 PERO NO SE DETIENE
EL CONTADOR
b7 TMOD, dir. 89h, por mscara 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. Cul 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. Cul 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 acta 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 Interrupcin
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 acta 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 acta 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 vehculos que circulan por una carretera.
NO excedern 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 vehculos que circulan por una carretera.
NO excedern 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 vehculos que circulan por una carretera. NO excedern 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 vehculos */
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 vehculos que circulan por una carretera.
NO excedern 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 (ampliacin)
Se desea contabilizar los vehculos que circulan por una carretera.
Mejora, 4.000 millones de vehculos.
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 Mquina ? ?1? S
12 perodos 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 funcin en lenguaje C para realizar
retardos de precisin del orden de milisegundos. Reloj del ? C de 12
Mhz.
? AYUDA:
Solucin
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 Interrupcin
GATE
pin
/INT0
TR0
Bit ET0
Habilitacin de
interrupcin.
TEMPORIZADORES Y CONTADORES 51
3 Interrupciones asociadas a los T/C
OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupcin
GATE
pin
/INT0
TR0 Bit TF0
Activacin peticin
interrupcin.
(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 Interrupcin
GATE
pin
-INT0
TR0
OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0 Interrupcin
GATE
pin
/INT0
TR0
Se puede combinar
el T/C y la
interrupcin externa.
TEMPORIZADORES Y CONTADORES 54
3 Interrupciones asociadas a los T/C
Ejemplo generacin onda cuadrada
Se trata de un ejemplo tpico de tarea
peridica. P1.0
Interesa tener desocupada la CPU para
otros menesteres.
Se propone que el T/C genere una
interrupcin 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 generacin onda cuadrada
Generar onda cuadrada de 10 Khz por el pin P1.0. Reloj del ? C de 12 Mhz
1 Ciclo Mquina ? 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 generacin 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 generacin 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 generacin 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 accin.
Solucin
TEMPORIZADORES Y CONTADORES 60
3 - T/C 0 y T/C 1 en el 805x7
Actividad
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
?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
0
C/T
1
Contador TF0
pin
T0 Interrupcin
? 1 GATE 0 0
pin
/INT0 0
TR0
No
cuenta!
TEMPORIZADORES Y CONTADORES 64
4 - Ejemplos de aplicacin
4.1 Medir el ancho de un pulso positivo
OSC 1/12
1 = cerrado
0
C/T
1
Contador TF0
pin
T0
1 Interrupcin
? 1 GATE 0 1
pin
/INT0 1
TR0
Si
1 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
TEMPORIZADORES Y CONTADORES 66
4 - Ejemplos de aplicacin
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 interrupcin 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 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
TEMPORIZADORES Y CONTADORES 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
Control por software. Bit GATE = 0
P2.0 = 1
Habilitar interrupcin del T/C 0
Arrancar el temporizador inicializando la cuenta en funcin del ancho del pulso
Cuando rebose, se generar una interrupcin procedente del T/C cuyo
manejador pondr P2.0 = 0 dado que se ha alcanzado la duracin del pulso
temporizador
P2.0 = 1
Inicializar El manejador de la interrupcin
temporizador y del T/C 0, dar por finalizado
comenzar cuenta 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; /* 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 aplicacin
4.3 Generar un pulso
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.
TEMPORIZADORES Y CONTADORES 75
4 - Ejemplos de aplicacin
4.4 Generar una seal PWM
TEMPORIZADORES Y CONTADORES 76
4 - Ejemplos de aplicacin
4.5 Leer un timer al vuelo
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; /* 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
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;
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 interrupcin con cada overflow. El manejador de
interrupcin tendr como nica misin invertir el valor de P3.5
SOLUCIN:
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
Bibliografa
TEMPORIZADORES Y CONTADORES 83