Problemas de programación del sistema integrado
# include ltreg52.h gt
#Definir período (65536 l-50000 l)/0x 100//Establezca el valor inicial de interrupción de 50 ms una vez TH1.
#Definir período (65536 l-50000 l) 0x 100 //Establece el valor inicial de 50 ms de interrupción 1 multiplicado por TL1.
//Si se requieren retrasos extremadamente precisos, el tiempo dedicado al reensamblaje en la respuesta a la interrupción se deduce en función de las instrucciones de ensamblaje generadas después de la compilación real.
Recuento de enteros sin signo; //Variable de tiempo de retardo
El temporizador 1() no válido usa 1 para interrumpir 3
{//Temporizador cada 0,05 segundos Interrumpe una vez.
th 1 = período h;
TL 1 = período 1
if (recuento)
{//si el recuento es; menos de 0, mantenga el temporizador funcionando y el contador es -1.
cuenta-;
}
Otros
{//Cuenta hasta 0, cierra el cronómetro.
tr 1 = 0; //Detener el temporizador 1
}
}
//Usando segundos como unidad de cronometraje básica Subrutina
void Delay1S (carácter sin signo x)
{
ésimo 1 = período h;
TL 1 = período 1 ; p>
tr 1 = 1; //En este momento, comienza el cronometraje.
Count = 20 * x; //Debido a que hay una interrupción en 50 ms, multiplíquela por 20.
mientras(cuenta);
}
principal()
{
TMOD = 0x 10; //Modo 1
EA = 1; //Total de interrupciones permitidas
et 1 = 1; //El temporizador 1 permite interrupciones
while(1 )
{
retraso 1S(1); //Retraso 1 segundo
retraso 1S(2); //Retraso 2 segundos
retraso 1S(3); //Retraso 3 segundos
retraso 1S(4); //Retraso 4 segundos
}
}
La función Delay1S inicia el cronometraje cuando se llama y detiene el cronometraje según la duración de tiempo requerida. Si la precisión del tiempo no es alta, no es necesario apagar el temporizador en el programa de servicio intermedio y el error para cada llamada es de 50 ms.
Puedes utilizar la simulación KEIL para ver la hora real.