Explicación detallada del análisis de oraciones del microcontrolador.
#Define SYSCLK 12000000 //Definición de macro: use SYSCLK para representar el número 12000000.
#Define c_TMR 1-(sysclk/12.0)/1000 * 50 //Definición de macro: use //c_tmr1.
//-(SYSCLK/12.0)/1000 * 50
//Esta declaración
#define TIMES_50MS 10 //Definición de macro: use TIMES_50MS para representar 10 .
Datos flotantes float//Declaración de variable: variable de punto flotante FREQ
Datos de caracteres sin firmar TMR0_COUNTER//Declaración de variable: variable de caracteres sin firmar TMR0_COUNTER.
Datos de caracteres sin firmar TMR 1_COUNTER; //Declaración de variable: variable de caracteres sin firmar TMR1_COUNTER.
Bit START_EN //Declaración de variable de bit:
Datos int sin signo TMR 1; //Declaración de variable: variable entera sin signo tmr1
Inicio vacío (no válido) ); //Declaración de función
Void main(void) //Cuerpo de la función principal
{
TMOD = 0x 15 //Cambiar TMOD El registro Los ajustes son: Modo de temporizador de 16 bits Modo de contador de 16 bits.
ET0 = 1; //Activa el contador 0
et 1 = 1; //Inicia el temporizador 1
TMR 1 = c _ TMR 1;/ /Asignar valor inicial a tmr1
START _ EN = 1; /bit variable = 1 (debe usarse como bit de bandera 1)
While(1)//Bucle grande p >
{
If(START_EN) //Si el bit de bandera es 1
{
START _ EN = 0; bit de bandera primero
start(); // Luego ejecute este programa de función.
}
}
}
Inicio vacío(void)//Cuerpo de función
{ p>
TM r0 _ COUNTER = 0; //Valor inicial de la asignación de variable
TMR 1 _ COUNTER = TIMES _ 50m s; //Valor inicial de la variable = 10
TH0 = 0; //Borra los 8 bits superiores de la calculadora 0.
TL0 = 0; //Borra los 8 bits inferiores de la calculadora 0.
th 1 = TMR 1 gt; //La asignación alta de 8 bits del temporizador 1 (el cálculo de la definición de macro es problemático)
tr 1 = TMR 1; 1 Asignación de los 8 bits inferiores (debe ser TL1 = tmr1)
TR0 = 1; //Activar temporizador 0
tr 1 = 1 //Activar contador 1
TF0 = 0; //TF0 se configura automáticamente por hardware y no es necesario eliminarlo.
TF 1 = 0; //TF1 lo configura automáticamente el hardware y no es necesario eliminarlo.
EA = 1; enciende el interruptor de interrupción principal
}
Voidtmr0 _ ISR (void) interrupción 1 // Función de servicio de interrupción del contador 0 (16- contador de bits)
{
TM r0 _ contador; // TMR0_COUNTER variable automática (0~255)
}
Voidtmr1 _ ISR (void) Interrupción 3//Función de servicio de interrupción del temporizador 1 (temporizador de 16 bits)
{
Datos enteros sin signo I;
Si (-TMR 1 _ contador ==0) //Si la variable disminuye == 0 (inicialmente asignada a 10)
{
TR0 = 0 //Cerrar contador 0
tr 1 = 0; //Apaga el temporizador 1
EA = 0; //Apaga las interrupciones generales (generalmente no uso esta oración)
FREQ =( TM r0 _ COUNTER * 65536 TH0 256 TL0)* 20;
//Calcular FREQ (No entiendo lo que está calculando)
FREQ = FREQ/TIMES _ 50m s ;
//Calcular FREQ (No entiendo lo que está calculando)
START_EN = 1; //Marcar posición 1
}
De lo contrario // De lo contrario
{
tr 1 = 0 //Apagar el temporizador 1
I = TMR 1 TL 1 16 ; //Uso Las siguientes tres oraciones establecen el valor inicial del temporizador 1.
TL 1 = I;
th 1 = I gt8
tr 1 = 1; >}
}
Conclusión: Este programa es realmente muy simple, así de complicado es. ¡No es que el autor sea de alto nivel, sino que no está dispuesto a enseñar a otros ni a competir con él! ! !