Estoy buscando un programa en lenguaje C para generar pulsos PWM desde la interfaz P2.0 del microcontrolador 89c51 con ciclo de trabajo y frecuencia ajustables.
¡Gracias! necesidad urgente!
#define uchar unsigned char
#define uint unsigned int
sbit key =P2^5;
clave de bits1=P2^4;
clave de bits2=P2^3;
clave de bits3=P2^2;
bit pwm=P1^0 ;
uint pwm_value=1960;
uint count=0;
void timer0(void) usa 1
{
cambiar(cuenta)
{
caso 1: pwm=1;
TH0=-pwm_value/256;
TL0=-pwm_value%256;
ruptura;
caso 2: pwm=0;
TH0=-(2700-pwm_value)/256;
TL0=-(2700-pwm_value)%256;
descanso;
/*caso 3: pwm1=1
TH0; =-pwm_value/256;
TL0=-pwm_value%256;
romper;
caso 4: pwm1=0;
TH0=-(2700-pwm_value)/256;
TL0=-(2700-pwm_value)%256;
descanso;
caso 5:pwm2= 1;
TH0=-pwm_value/256;
TL0=-pwm_value%256;
romper;
caso 6: pwm2 =0;
TH0=-(2700-pwm_value)/256;
TL0=-(2700-pwm_value)%256;
descanso; p>
p>
caso 7:pwm3=1;
TH0=-pwm_value/ 256;
TL0=-pwm_value%256;
romper;
caso 8: pwm3=0;
TH0=-(2700-pwm_value)/256;
TL0=-(2700-pwm_value )%256;
rotura;
caso 9: pwm4=1;
TH0=-pwm_value/256;
TL0=- pwm_value%256;
descanso;
caso 10: pwm4=0;
TH0=-(2700-pwm_value)%256; < (2700-pwm_value )/256;
TL0=-(2700-pwm_value)%256;
descanso;
caso 11:count=0;
}
count++;
}
void InitTimer0(void)
{
count=1 ;
TMOD=0x11;
TH0=-1500/256;
TL0=-1500%256;
EA=1 ;
ET0=1;
TR0=1;
}
retraso nulo(anulo)
{
uint i=100;
while(i--);
}
void main(void)
{
InitTimer0();
mientras(1)
{
if(pwm_value<2200)
pwm_value+=2;
if(pwm_value>1000)
pwm_value-=2;
}
}
El ancho de pulso de la modulación PWM no excede los 2,5 MS y el tiempo de ciclo es de 20 MS, por lo que 8 pueden Se emitirá en un ciclo. Pulso para controlar 8 servos. La frecuencia se puede cambiar modificando TH0 y TL0, y el ciclo de trabajo se puede cambiar modificando pwm_value. Espero que te sea útil, ¡gracias!