Cómo hacer un temporizador de cuenta regresiva simple usando un microcontrolador
Valor inicial, convertido a hexadecimal, bit alto TH0, bit bajo TL0, si se utiliza el temporizador 0.
Si m (temporización máxima) es de 16 bits, es 16 elevado a la potencia 2 y la temporización máxima es 65535 microsegundos, de modo que se puede lograr 1 segundo de temporización. Puede cambiar el segundo valor una vez y luego 100 veces cronometrándolo durante 10 milisegundos. 10*100 milisegundos = 1 segundo
Valor de conteo: ¿Cuánto tiempo quieres cronometrar? Si el tiempo es de 1 ms, son 1000 microsegundos (en microsegundos), si el tiempo es de 10 ms, son 10000 microsegundos (en microsegundos). Por supuesto, el tiempo máximo está limitado por el número de dígitos del propio temporizador, y el tiempo máximo es 2 elevado a 16. Sincronización 1S, por supuesto, el temporizador 1S no se puede interrumpir.
El siguiente es el programa fuente en lenguaje C para implementar una cuenta atrás de 99 segundos
/*Conozco el cronómetro, así que puedo hacer algunos experimentos básicos, como una bomba de tiempo~ ~, enciende y apaga el relé después de 10 segundos* /
/*Tubo digital, oscilador de cristal de 12 M*/
# incluye ltreg52.h gt
#Definir carácter uchar sin firmar
sbit p11=p1^1; //Hay un relé conectado. .
pestaña de caracteres sin firmar del código[]={0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
Ucharshvi;
Uchar Gurvey;
Retraso no válido (entero sin signo)
{
while(-CNT);
p>
}
void main()
{
TMOD | = 0x 01 /*Temporizador 0 Temporizador de 16 bits X = 65535 -10000 (10 ms ) = 55535 = d8f 0 (hexadecimal) relojes 10 ms.
*/
TH0 = 0xd8
TL0 = 0xf0
IE = 0x82//Aquí está el control de prioridad de interrupción EA=1 (interrupción total encendido-apagado), ET0=1 (el temporizador 0 permite la interrupción), aquí el temporizador 0 se utiliza para cronometrar.
TR0 = 1; //Iniciar temporizador 0
mientras(1)
{
P0 = diez dimensiones; 99
P2 = 0; //99 bits,
Retraso (300); //Retraso del tubo digital de escaneo dinámico
P0 = Ge Wei; p>
P2 = 1;
Retraso(300);
}
}
Usa 1/ /Voidtim ( anulado) para la interrupción del temporizador 0 Interrupción 1.
{
Uchar segundos estáticos = 99, contando; //99 es solo un número y se puede cambiar a voluntad, porque aquí solo estamos aprendiendo a contar hacia atrás.
TH0 = 0xd8//Tiempo 10 milisegundos
TL0 = 0xf0
count;
If(count==100) // Temporización de 10 milisegundos, 10*100=1000 (milisegundos)=1 segundo.
{
cuenta = 0
Segundo -;
if(segundos==0)
{
p 11 = 0; //Deja que el relé funcione aquí. Por supuesto, debe restablecerse después de la acción y esperar el siguiente tiempo inverso.
Segundos = 99; //Devuelve 99 para reciclar. Por supuesto, también se pueden realizar otros controles.
}
Shiwei = tab[segundo/10]; //Tubo digital 10 dígitos
gewei = tab[segundo 10] //Unidad de tubo digital
}