单片机控制舵机问题

我希望舵机从左转转到右,然后从右到左的转动,但是他只朝一个方向转,转到头了不往回转,为什么?
舵机型号:Micro servo 9g,舵机VCC接7.5v(我试过5v带不起来),信号线直接接单片机的I/O口。单片机晶振为11.0592Mhz,
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit moto = P1^0;
sbit LED = P1^7;
uint count;//0.5ms个数计数
uchar jd;//角度0~5,
timer0_init()
{
TMOD=0X01;
TH0=0xfe;//0.5ms
TL0=0x33;
ET0=1;
TR0=1;
EA=1;
}
main()
{
jd=3;//设置角度的值0~5,
count=0;
timer0_init();
while(1);
}
/**晶振11.0592MHZ*/
void timer0() interrupt 1
{
TH0=0XFE;
TL0=0X33;
if(count<jd)
moto=1;
else
moto=0;
count++;
count%=40;
}

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit moto = P1^0;
sbit LED = P1^7;
uint count;//0.5ms个数计数
uchar jd;//角度0~5,
timer0_init()
{
TMOD=0X01;
TH0=0xfe;//0.5ms
TL0=0x33;
ET0=1;
TR0=1;
EA=1;
}
main()
{
jd=3;//设置角度的值0~5,
count=0;
timer0_init();
while(1);
}
/**晶振11.0592MHZ*/
void timer0() interrupt 1
{
TH0=0XFE;
TL0=0X33;
if(count<(jd*8))
moto=1;
else
moto=0;
count++;
count%=40;
}追问

还是不对?我写的这个程序是让它转到一定的角度(预先给jd赋值),但无论值角度改为几,都是从一边到另一边然后就不转了!

追答

那就是你的方向控制信号moto没起作用,看看硬件电路是不是有问题。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-04-11
楼主你好,请问你的问题解决了吗?我也是控制舵机,也是这个型号,也是同样的思路——先让它偏转固定角度,也是同样的问题,偏转到一边不动了。
第2个回答  2013-03-28
舵机,是机械设备,其工作速度,要比计算机,慢的很多。

从一个角度,转到另一个角度,需要给它送去 PWM 波形。
这个波形必须重复很多、很多次,它才能转到目的地。

看楼主的程序,每中断一次(隔 0.5 ms),就输出一种新的占空比波形。
每种占空比,仅仅输出了一个周期。
每次,都设定了一个新的目的地。

这就把舵机,都弄糊涂了:你到底是想让我要转到哪儿去呀?

明显缺少舵机工作时间的概念。
这样一来,舵机,能转,就不错了;弄不好,光是抖动,不会转。