Red de conocimientos turísticos - Información de alquiler - Si el microcontrolador quiere generar 640 kHz, ¿cómo cronometrarlo?

Si el microcontrolador quiere generar 640 kHz, ¿cómo cronometrarlo?

El ciclo de un microcontrolador binario 51 es de 12 ciclos de oscilación de reloj, es decir, el temporizador aumentará una vez cada 12 veces que oscila el oscilador de cristal.

Para un oscilador de cristal de 12M, el ciclo de pulso es T=1/ 12000000. Entonces puedes obtener el tiempo t=12T por cada aumento del temporizador.

Es decir, si calculamos 1us, el temporizador es como un cubo grande. Cada aumento de 1us equivale a sumar. una gota de agua en él. Cada 1us equivale a agregar una gota de agua al balde. Configurar el modo de funcionamiento del temporizador equivale a configurar el tamaño del balde. Por ejemplo, el modo de conteo de 16 bits del modo temporizador 1 de uso frecuente. del balde, también necesitamos configurar la cantidad de agua en el balde al principio, es decir, antes de comenzar a gotear agua en el balde. No es difícil imaginar que si el balde tiene mucha agua al principio, luego, cuando empecemos a gotear agua, el balde estará lleno de agua. No es difícil imaginar que si hay mucha agua en el balde al principio, cuando iniciamos el cronómetro para que gotee agua en el balde, el balde se llenará rápidamente de agua y se desbordará.

le dará al microcontrolador un indicador de interrupción.

Una vez que se desborde, se le dará un indicador de interrupción al microcontrolador. Si se permite que la interrupción esté activada en este momento, entonces nosotros. Podemos ingresar la interrupción y subir el nivel de cualquier pin o bajarlo para que produzca la frecuencia que queremos producir, así podemos comenzar a programar los pines para producir la frecuencia que queremos.

Señal de 500KHZ

Analiza la señal de 500KHZ, es decir, el período T = 1/500000 = 2us Sabemos que solo las señales de CA tienen períodos

Por lo tanto. , podemos diseñar un ciclo de 2us, en el que el nivel alto supone 1us del tiempo total y el nivel bajo también supone 1us

El programa se escribe así:

Primero configure el modo del temporizador 0 en modo de temporizador de 16 bits TMOD=0x01

Luego configure el valor inicial del temporizador 0, que es la cantidad de agua que se llenará en el balde al comienzo del ciclo. son 16 bits, hay 8 niveles altos y 8 niveles bajos

Son estos registros de 8 bits de alto nivel y 8 bits de bajo nivel los que forman el depósito

. En este momento tenemos un problema. ¿Cuál es la capacidad total del balde? Después de configurar el modo de temporizador, podemos analizar que la capacidad del depósito es de 16 bits, que son dos bytes de 0 a 0xFFFF. Cuando agregamos un bit a 0xFFFF, el depósito se desbordará, es decir, el superior. Se borrarán los registros de 8 bits y de 8 bits inferiores. Nuestro programa requiere que cada vez que pasa un cierto período de tiempo, el nivel bajo en el pin cambie a nivel alto o el nivel alto cambie a nivel bajo, es decir, el nivel se invierte. es decir, la duración del nivel alto y el nivel bajo es 1 us

En otras palabras, esperamos ingresar un valor inicial en el balde, de modo que cada gota de agua en el balde se desborde y genere una interrupción. Y luego maneje la interrupción En el programa, el pin se establece en cero y el agua en el balde se desbordará.

En el manejador de interrupciones invertimos el nivel del pin para obtener la señal de 500KHZ que queremos, el valor inicial debe establecerse en 0XFFFF

51 Alto del microcontrolador Los 8 bits y los 8 bits inferiores se configuran por separado. Por lo tanto, debemos escribir TH0=0xFF TL0=0xFF

y escribir TH0=0xFF TL0=0xFF en el controlador de interrupciones. Escriba estos dos. el controlador de interrupciones debe configurarse en 0XFFFF. ¿Por qué? Porque en el modo de 16 bits,

Después de que el temporizador se desborda, si el valor inicial no se recarga, cuando el conteo comienza nuevamente después del desbordamiento, su valor inicial se convertirá en 0,

1us La memoria no se desbordará nuevamente, por lo que TH0=0xFF TL0=0xFF debe recargarse en el controlador de interrupciones

Limpieza.

Programa:

#include

Bit P10=P1^0;//Usa el pin P1.0 para generar una señal

# incluir< reg52.h>

Bit P10=P1^0;//Utilice el pin P1.0 para generar una señal. 0 pin genera señal

void main()

{

TMOD=0x01/// Establecido en modo de temporización de 16 bits

TH0=0xFF; cargar valor inicial TH0=0xFF; cargar valor inicial TL0=0xFF

El manejador de interrupciones también necesita recargar el valor inicial TH0=0xFF TL0=0xFF

Ordenar 0xFF; cargar valor inicial

TL0=0xFF;

EA=1;//Habilitar interrupciones generales

ET0=1//Habilitar interrupciones del temporizador

TR0=1;//Inicia el cronómetro

while(1);

}

Luego interrumpe el controlador

void Timer0() Interrupción 1

{

TH0=0xFF; recargar valor inicial

TL0=0xFF;

P10=~P10 ; //Invierte el nivel de P10 para que puedas obtener la señal cada vez que ingresas la interrupción

}

Piensa en usar un microcontrolador 51 ordinario en un oscilador de cristal de 12M para generar tal una frecuencia de señal de CA Hasta 500 KHZ ¿Por qué? Debido a que el valor inicial asignado en

se puede cargar hasta un máximo de 0xFFFF, la interrupción máxima es una vez cada 1us. De hecho, si piensa detenidamente en el programa anterior, es un problema. problema, podrá comprender el temporizador de 8 bits. Después de recargar el modo, naturalmente sabrá dónde radica el problema después de ponerse en contacto gradualmente con él. Lo dicho anteriormente es bueno, pero no es bueno porque las interrupciones ocurren con demasiada frecuencia

También puedes contactarnos para conocer los 51 microcontroladores con funciones mejoradas de STC, como los microcontroladores 1T de la serie STC12

No puedo leer ni un solo carácter chino, así que comí un poco desordenado y apurado. Espero que te ayude. Gracias LX por escribirte.