Red de conocimiento informático - Material del sitio web - Cómo hacer un temporizador de cuenta regresiva simple usando un microcontrolador

Cómo hacer un temporizador de cuenta regresiva simple usando un microcontrolador

El microcontrolador 51 realiza la cuenta regresiva de 99 segundos del tubo digital. En realidad, es muy simple y se implementa mediante interrupciones de temporizador. El propósito es aprender a usar un microcontrolador para implementar una cuenta regresiva, a fin de lograr algunas cosas como el control de retardo. 99 segundos es solo un ejemplo, puedes hacer cualquier programa de cuenta regresiva como 10 segundos. La fórmula de cálculo del tiempo de sincronización del temporizador es: valor inicial X = M (temporización máxima) -valor de conteo.

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;

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

}