Red de conocimiento informático - Conocimiento del nombre de dominio - Cómo implementar un retraso de horas usando el microcontrolador 51

Cómo implementar un retraso de horas usando el microcontrolador 51

51 El ciclo de la máquina de un microcontrolador es el recíproco del cristal dividido por 12. Entonces el período de su máquina de 24Mhz es T=12/12M=0.5us.

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

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)

{

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.