四天时间加老师完善搞出来的程序,晶振12M,周期20ms,占空比j自己设定。利用占空比产生pwm波控制电机转动,用示波器输出的波形是正确的,但是连接舵机是舵机不转,或者转一个角度然后回来。想了一天完全没头绪,希望有懂的朋友帮帮忙。下面的写的程序。恳请各位大神帮帮忙,找出错误。
#include<reg52.h>
sbit P10=P1^0;
unsigned char i,t,flag;
float j;//占空比
void delayms(unsigned int a)
{
unsigned char b;//基准延时时间
while(a--)
{
for(b=0;b<125;b++)
{;}
}
}
main()
{
TMOD=0x10;//定时器方式1
TH1=0xFC;//高八位,定时器1ms
TL1=0x18;//低八位
EA=1;//开总中断
ET1=1;//选择定时器1
TR1=1;//启动定时器
P10 =1;
while(1)//利用占空比产生的pwm波驱动舵机旋转,不同占空比舵机旋转角度不同
{
j = 0.025;
delayms(1000);
j = 0.05;//定义占空比为0.1,无限死循环
delayms(1000);
/*j = 0.075;
delayms(1000);
j = 0.10;
delayms(1000);
j = 0.125;
delayms(1000);*/
}
}
void timer1(void) interrupt 3 //定时器1中断符号
{
TH1=0xFC;//工作在定时器方式1下,每次计数后高低8位必须重新置数
TL1=0x18;
t++;
i++;
if(i==20*j)//正向导通时间,通过定时器*定时次数实现
{
P10 = 0;//正向导通结束P10口改为下降沿
}
if(t == 20)//总周期,通过定时器*定时次数实现
{
P1 = 1;//总周期结束P10口重新改为正脉冲
i = 0;//正向导通计数清零
t = 0;//总周期计数清零
}
}
|