¿Cómo utilizar la programación en lenguaje C para hacer que el 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 sencillo si simplemente emitiera 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 p>
{
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
} p>
?//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))? //Detecta 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>
}
}
}
}