51单片机控制舵机程序文档格式.doc
《51单片机控制舵机程序文档格式.doc》由会员分享,可在线阅读,更多相关《51单片机控制舵机程序文档格式.doc(3页珍藏版)》请在冰点文库上搜索。
sbitKeyLeft=P1^0;
//左转按键端口
sbitKeyRight=P1^1;
//右转按键端口
sbitKeyStop=P1^2;
//归位按键端口
unsignedcharTimeOutCounter=0,LeftOrRight=0;
//TimeOutCounter:
定时器溢出计数 LeftOrRight:
舵机左右旋转标志
voidInitialTimer(void)
{
TMOD=0x10;
//定时/计数器1工作于方式1
TH1=(65535-500)/256;
//0.25ms
TL1=(65535-500)%256;
EA=1;
//开总中断
ET1=1;
//允许定时/计数器1中断
TR1=1;
//启动定时/计数器1中断
}
voidControlLeftOrRight(void)//控制舵机函数
if(KeyStop==0)
{
//while(!
KeyStop);
//使标志等于Stop(0),在中断函数中将用到
LeftOrRight=Stop;
}
if(KeyLeft==0)
KeyLeft);
//使标志等于Left
(1),在中断函数中将用到
LeftOrRight=Left;
if(KeyRight==0)
KeyRight);
//使标志等于Right
(2),在中断函数中将用到
LeftOrRight=Right;
voidmain(void) //主函数
InitialTimer();
for(;
;
)
ControlLeftOrRight();
voidTimer1(void)interrupt3//定时器中断函数
TimeOutCounter++;
switch(LeftOrRight)
case0:
//为0时,舵机归位,脉宽1.5ms
{
if(TimeOutCounter<
=6)
{
ControlPort=1;
}
else
ControlPort=0;
break;
}
case1:
//为1时,舵机左转,脉宽1ms(理论值),实际可以调试得出
=2)
case2:
//为2时,舵机右转,脉宽2ms(理论值),实际可以调试得出
=10)
default:
break;
if(TimeOutCounter==80) //周期20ms(理论值),比较可靠,最好不要修改
TimeOutCounter=0;