89c51单片机控制舵机!

本人初学者,想求一89c51单片机控制一个舵机得程序,要求是不用按键控制,街上电源就可以连续旋转得,谢谢!

  程序:
  //12MHz
#include <reg51.h>

void InitTimer0(void)
{
TMOD = 0x01;
TH0 = 0x0B1;
TL0 = 0x0E0;
EA = 1;
ET0 = 1;
TR0 = 1;
}
void delay(void) //误差 0us 延时1ms 此处可以修改高电平周期
//修改此处的延时可以更改舵机转的角度 ,45度具体是多少 你可以试试
{
unsigned char a,b,c;
for(c=1;c>0;c--)
for(b=142;b>0;b--)
for(a=2;a>0;a--);
}
void main(void)
{
InitTimer0();
P1_2=0;
while(1);
}

void Timer0Interrupt(void) interrupt 1
{
//20ms中断
TH0 = 0x0B1;
TL0 = 0x0E0;
P1_2=1;
delay();
P1_2=0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-07-28
控制舵机应该是3根线吧,方向和速度,直接通过I/O口输出脉冲信号控制舵机转,另外加一个方向控制,不太懂舵机哈
第2个回答  2012-07-30
我想知道你没有去掉限位环吧
第3个回答  2012-07-28
/********************************************************************************
注:更改P0^0可改变输出的IO口。改变hight_votage的值(5-25)可以改变舵机转过的角度,
注意不要超出5-25。另外舵机要单独5V供电,不然会对单片机产生干扰信号。且和单片机共地。
*******************************************************************************/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar key_stime_counter,hight_votage,timeT_counter; /*变量定义*/
bit key_stime_ok;
sbit control_signal=P0^0;
/*****************************************************************
名称:定时器0初始化
功能:20ms定时,11.0592M晶振
初值=65536-11059200*0.02/12=65536-18432=47104=0xB800 20ms
初值=65536-11059200*0.0001/12=65536-92.16=64430=0xFFA3 0.1ms
*****************************************************************/
void TimerInit()
{
control_signal=0;

EA=1; //开总中断
ET0=1; //定时器0中断允许
TMOD=0x01; //设置定时器0为工作方式1
TH0 = 0xFF; //定时器装初值
TL0 = 0xA3;
TR0=1; //启动定时器0
}
/**********************************************
定时器0中断服务函数
***********************************************/
void timer0(void) interrupt 1 using 1
{
TH0=0xFF;
TL0=0xA3; //定时器0重新装入数值
if (++key_stime_counter>=200)
{
key_stime_counter=0;
control_signal=1;
key_stime_ok = 1; // 20ms到
timeT_counter=0;
}
if (key_stime_ok&&(++timeT_counter>=hight_votage))
{
key_stime_ok=0;
timeT_counter=0;
control_signal=0; // hight_votage*0.1ms到
}
}

void delay()
{
unsigned char i,j;
for (i=0;i<255;i++)
for (j=0;j<255;j++);

}

void main(void)
{
TimerInit();

hight_votage=5;
while(1)
{
delay();
hight_votage=hight_votage+2 ;
delay();

if(hight_votage>=25)hight_votage=5;
}
}

//最后提醒一下,舵机一定要单独供电且共地!本回答被网友采纳
第4个回答  2012-07-23
PWM循环调整占空比