Red de conocimiento informático - Conocimiento informático - Problemas de programación del sistema integrado

Problemas de programación del sistema integrado

El microcontrolador 51 está equipado con un oscilador de cristal de 12 Mhz y el software es el siguiente (depuración aprobada).

# 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 ;

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.