这是我编的一个能产生4路不同PWM波的程序,谁能给看看,为什么产生不了正确的波形呢。

2019-07-15 14:28发布

本帖最后由 烈焰123 于 2016-4-12 18:36 编辑

这是我编的一个能产生4路不同PWM波的程序,谁能给看看,为什么产生不了正确的波形呢。
注:180度舵机用PWM控制,通过控制jd的大小控制角度,
360度舵机也用PWM控制,不过控制方法不同,通过给定一个jd值,使其进行正反转,同时通过控制给的jd值得时间来控制圈数,时间一到,给一个停止的jd值,达到控制360度舵机的目的。但是,通过仿真,无法产生想要的四路pwm波,谁能给看看怎么回事,C程序如下:
#include<reg52.h>
unsigned char count;
sbit pwm1=P1^0;        //jiao
sbit pwm2=P1^1;        //jing
sbit pwm3=P1^2;        //gao
sbit pwm4=P1^3;        //zhua
unsigned char jd1,jd2,jd3,jd4,m1,m2,m3,m4,t1,t2;
unsigned char a,b,c,d;   
//延时程序
void delay(unsigned int x)
{
   unsigned char i,j;
   for(i=x;i>0;i--)
      for(j=125;j>0;j--);
//延时0.1ms,
}
void timer0_Init()
{
TMOD=0x01;
IE=0x82;
TH0=0xff;//65436/256;           定时0.1ms
TL0=0xA4;//65436%256
TR0=1;
}
void Timer0_Int() interrupt 1//中断程序
{
   TH0=0xff;
   TL0=0xA4;
   //m1=count;
   //m2=count;
  if(m1<jd1)
   pwm1=1;
  else
   pwm1=0;
  if(m2<jd2)
   pwm2=1;
  else
   pwm2=0;
  if(m3<jd3)
   pwm1=1;
  else
   pwm1=0;
   if(m4<jd4)
   pwm1=1;
  else
   pwm1=0;
count++;
    count%=200; //20m秒需要数200次
    m1=count;
   m2=count;
        m3=count;
   m4=count;
/********************************************************/
/*根据io口及pwm需要情况可加m3,m4,m5……                         */
/******************************************************/
}        
void pwm360_jd1()
{
if(a>0)
{
jd1=20;
a--;
}
else
{jd1=15;
}
}
void pwm360_jd2()
{
if(b>0)
{
jd2=20;
b--;
}
else
{jd2=15;}
}
void pwm180_jd3()
{
if(jd3<30&&jd3>0)
{
jd3+=1;
}
if(jd3>30)
{jd3=30;}
while(c>0)
{c--;}
}
void pwm180_jd4()
{
if(jd4<30&&jd4>0)
{
jd4+=1;
}
if(jd4>30)
{jd4=30;}


while(d>0)
{d--;}
}
void main()
{
jd3=1;
jd4=1;
pwm1=1;
pwm2=1;
pwm3=1;
pwm4=1;
a=25;
b=15;
c=200;
d=150;
count=0;
Timer0_Init();
while(1)
{
pwm360_jd1();
pwm360_jd2();
pwm180_jd3();
pwm180_jd4();
  }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。