Cómo implementar un retraso de horas usando el microcontrolador 51
Suponiendo que el número que desea cronometrar es M, el valor inicial es igual a M/ciclos de máquina (que indica cuántos ciclos de máquina se ejecutaron).
Si el valor inicial es menor que 65536
TH0=(65536-valor inicial)256
TL0=(65536-valor inicial)/256 p>
51 El tiempo máximo a 24MHZ es 65536*T=0.032768s, que es mucho menos de una hora.
Entonces, para facilitar el cálculo, supongamos que el tiempo es 0,01 s y luego ejecutemos 3600/0,01 veces.
M=0.01/T=20000
TH0=(65536-inicial)256=0xB1
TL0=(65536-inicial)/256=0x7F
Usando este número una vez, el valor preciso del tiempo es 0.0100485s. El valor exacto de 360000 veces es 3617,46 segundos.
El programa de interrupción es el siguiente:
timer0() interrupción 1
{
TR0=0;
ET0 =0;
TH0=0xB1;
TL0=0x7F;
if(retraso_ 1hora)
{ p>
if(j) //Si j es mayor que 0
{
TR0=1; //Esto significa que no se han realizado 3600 veces; alcanzado
}
else
{
if(i) Incluso si j es igual a 0 e i es mayor que 0, significa que no se han alcanzado 100 veces
p>{
TR=1;j=3600;
}
else
{
flag_1hour=0; // Realiza un bucle 3600000 veces, 10 milisegundos cada vez, y desactiva el indicador de retraso.
}
}
}
ET0=1;
}
Programa de llamada:
void delay1hour()
{
delay_1hour=1; i=100; j=3600;
} // Agregue esta función donde necesite iniciar un retraso de una hora.
Durante el período de retardo, el microcontrolador también puede ejecutar otras instrucciones.