本帖最后由 newkiwi 于 2012-11-7 20:15 编辑
#include<reg52.h>
typedef unsigned int uint;
typedef unsigned char uchar;
sbit pwm=P0^3;//输出PWM信号
uint pwm_value=1500;//初值为1.5ms
void delay_ms(uint x)
{
uint i;
while(x--)for(i=0;i<125;i++);
}
void InitTimer(void)
{
TMOD=0x11;//开定时器0,1
TH0=-20000/256;//定时20MS,20MS为一个周期
TL0=-20000%256;
TH1=-500/256;//定时1.5MS,这时舵机处于0度
TL1=-500%256;
EA=1;//开总断
TR0=1;//开定时器0
ET0=1;
TR1=1;//开定时器1
ET1=1;
}
void timer0(void) interrupt 1//定时器0中断函数
{
pwm=1;
TH0=-20000/256;
TL0=-20000%256;
TR1=1;
}
void timer1(void) interrupt 3//定时器1中断函数
{
pwm=0;
TH1=-pwm_value/256;
TL1=-pwm_value%256;
TR1=0;
}
void main(void)//主函数
{
InitTimer();
pwm_value=1500;
while(1)
{
pwm_value=1500;//通过数组就可以改变舵机的转角度 <----------------
delay_ms(2000);
pwm_value=1000;//通过数组就可以改变舵机的转角度 <----------------
delay_ms(2000);
}
}
这是一个舵机控制程序,箭头所指的地方是控制多级角度的指令,但是假如这两条指令所赋值的差大于550左右,舵机的角度就不正常了,就会出现应该转90度或者更多,但是最多只能来回转差不多50度,只是什么原因啊,加的延迟应该足够舵机转满超过50度的啊。 |