Red de conocimiento informático - Material del sitio web - Cómo utilizar la programación en lenguaje C para hacer que un microcontrolador genere una señal de onda cuadrada

Cómo utilizar la programación en lenguaje C para hacer que un microcontrolador genere una señal de onda cuadrada

El 51 normal necesita simular PWM. Si es la versión mejorada 51, tiene un módulo PWM incorporado.

PIC, AVR, 430 y STM también tienen modelos con. ¡PWM integrado!

Sería simple si simplemente generara una onda cuadrada.

El programa es el siguiente:

//Función, presione el interruptor de P1_0 para reducir la frecuencia, presione P1_1 para aumentar la frecuencia

#includelt; AT89X52.Hgt; //Haga referencia al archivo de biblioteca de AT89X52

#define?uchar?unsigned?char ?//Reemplace el nombre corto

#define?uint?unsigned?int ?//Reemplazar el nombre corto

uchar?sm; //Definir variables temporales

void?delay_ms(uint?ms) //Subfunción de retardo, un ciclo 12uS

{

while(--ms);

}

void?T0_IRQ(void)?interrupt?TF0_VECTOR ?//Temporizador 0 función de interrupción

{

TH0=sm;//Asigna la variable al bit alto del temporizador 0

P2_0=!P2_0; IO

}

?//Subfunción de inicialización de registro

void?mcu_init()

{

ET0=1; //Habilitar interrupción del temporizador 0

EA=1; //Habilitar interrupción total

TMOD=0x01; //Establecer en temporizador 0 de 16 bits

p>

TH0=0xFF; // Llenar el bit alto del temporizador

TR0=1; //Abrir temporizador 0

sm=0xFF; /p>

}

void?main() //Función principal

{

mcu_init() //Llamar a la función de inicialización

while(1) //Bucle principal

{

if((!P1_0)||(!P1_1))? //Detectar si un botón está presionado

{

delay_ms(8333); //Retraso del rebote

if(!P1_0) //Si se presiona el botón P1_0

{

while(! P1_0); //Espera a que se suelte el botón

if(sm) //La variable de detección no es 0

{

? --sm; //Disminuir usted mismo 1

P2_1=1; //Cancelar LED de límite

}

¿otra cosa? P2_1=0; //Se enciende el LED al llegar al límite

}

else?if(!P1_1) //De lo contrario, si se presiona el botón P1_1

{

while(!P1_1); //Espera el botón Soltar

if(smlt; 0xFF) //Detecta que la variable es menor que 0xFF

{

? sm; //Aumentar 1

P2_1=1

}

más?P2_1=0; /p>

}

}

}

}