Cómo hacer un retraso de tiempo en 8051 (en C incrustado) usando un temporizador / contador

Lamentablemente, ha proporcionado muy pocos detalles. Hay varios microcontroladores disponibles en la actualidad que son derivados 8051 (el producto Intel original ya no está en el mercado). El tipo de temporizadores disponibles y cómo deben programarse depende en gran medida del proveedor de su chip y del producto / variante específico que esté utilizando. Sin embargo, intentaré responder de la manera más genérica posible. Deberá consultar la hoja de datos del producto para descubrir los detalles.

En primer lugar, necesitará saber a qué velocidad funciona su reloj principal. Este sería el reloj que ‘impulsa’ el periférico del temporizador. Esto generalmente depende de la frecuencia del oscilador de cristal que utiliza como reloj para el microcontrolador. Supongamos que esto es 1.024MHz. Esto significa que el reloj marcará más rápido que una vez cada 1 / 1,000,000 de segundo, o, 1 micro-segundo. Esto es innecesariamente demasiado rápido para su propósito. La mayoría de los periféricos del temporizador proporcionarán un preescalador, que es básicamente una función para reducir la escala del reloj de entrada para que pueda ejecutar un temporizador más lento que el reloj principal. Digamos que preescala el temporizador en 512. Esto se logra seleccionando esta configuración en uno de los registros del periférico del temporizador, según lo que diga la hoja de datos del producto. Una vez que haya realizado esta configuración, el temporizador funcionará a 2KHz. Entonces cuenta por 1 cada 0.5ms. Ahora, para obtener su retraso de 400 ms, debe contar 400 / 0.5 = 800 veces.

A partir del cálculo anterior, debe ingresar el valor de 800 en el registro del contador del temporizador (suponiendo un temporizador de 16 bits). Convirtiendo a hexadecimal, 800 = 0x320. Por lo tanto, debe alimentar TH = 0x03 y TL = 0x20.

¡Salud!

He escrito un retraso de 71 mili segundos para la variante SST 89E516RD microchips 8051.

Cargar TMOD : registro de modo de temporizador TMOD que debe cargarse con el valor adecuado para definir qué temporizador, temporizador 0 o temporizador 1, desea usar y si desea el modo temporizador o modo contador (el modo contador es para contar pulsos de reloj externos), bit de puerta para control de hardware del temporizador.

Cargar registros TH y TL

Si se selecciona el modo de temporizador de 16 bits, este contador contará desde 0000 hasta FFFF.

La variante de 8051 mencionada anteriormente mencioné que se ejecuta en una frecuencia de 11.0592 MHZ. Y el temporizador recibe 12 veces menos de la frecuencia principal, es decir, 11.0592 / 12 = 921.6 KHZ.

Entonces, la frecuencia del temporizador es de 921.6 KHZ.

Y tiempo para la frecuencia de 921.6 KHZ,

Será 1 / 921.6Khz = 1.085us, es decir, microsegundos.

Si carga TH = FF y TL = FF.

El temporizador comenzará a contar desde 0000 inicial hasta FFFF (porque hemos configurado FFFF en TL y TH).

Y el tiempo que tarda el temporizador en contar 0000 en FFFF será,

(El equivalente decimal de FFFF es 65535)

1.085 × 65535 = 71105.475 microsegundos .

Entonces, al usar los valores requeridos, puede obtener el retraso de tiempo deseado. Y si desea un tiempo superior a 71.105 mili segundos, debe llamar a este temporizador una y otra vez usando Q a para el bucle en C para lograr el retraso requerido.

P.ej .

Para (i = 0; i <= 100; i ++)

{

Timer_delay ();

}

He adjuntado una foto en la que los LED conectados en el pin 5 y el pin 7 del puerto 0 se ENCIENDEN-APAGAN usando el retardo del temporizador en un intervalo de 71 mili segundos (para el cálculo exacto, consulte los cálculos anteriores).