使用51单片机驱动舵机

单片机用的是普中科技的学习板,芯片STC89C52RC,舵机futaba s3003。我只用的是直接接P1^0,P1^1,P1^2。但是发现舵机不转。是什么原因我不知道,我是通过两个中断,使得程序产生方波的,不知道对不对。
#include <reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit a=P1^0;//黑线地
sbit b=P1^1;//红线Vcc
sbit c=P1^2;//白线控制线
void begin() //初始化程序
{
a=0;
b=1;
c=1;
TMOD=0x11; //设置定时器0和定时器1的工作方式为方式1
TH0=(65536-1500)/256; //求模
TL0=(65536-1500)%256; //求余
TH1=(65536-18500)/256; //求模
TL1=(65536-18500)%256; //求余
EA=1;//开总中断
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}

void main()
{
begin();
while(1);
}

void timer0() interrupt 1 //定时器0中断服务程序
{
a=0;
b=1;
c=0;
TH0=(65536-1500)/256; //求模
TL0=(65536-1500)%256; //求余
ET1=1;//开定时器1中断
TR1=1;//启动定时器1
ET0=0;//关定时器0中断
TR0=0;//关闭定时器0

}

void timer1() interrupt 3 //定时器1中断服务程序
{
a=0;
b=1;
c=1;
TH1=(65536-18500)/256; //求模
TL1=(65536-18500)%256; //求余
ET1=0;//关定时器1中断
TR1=0;//关闭定时器1
ET0=1;//开定时器0中断
TR0=1;//启动定时器0
}

先别着急调试程序,先用5v电源试试舵机的电机(假如是5V工作的)转不转,如果转,那就用示波器观察一下各引脚是否有波形输出,再就是你驱动电机的电路是否损坏,比如三极管坏了等等。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-09-07
sbit a=P1^0;//黑线地
sbit b=P1^1;//红线Vcc
sbit c=P1^2;//白线控制线
黑线 和VCC要接电源,单片机的电压还不能够驱动舵机,还有你没有了解什么是PWM,你好好研究下单片机怎么模拟PWM 这里可以认为用PWM来输出电压,舵机通过对控制电压的比较来控制转动角度!本回答被提问者采纳
第2个回答  2010-12-31
想用io口直接驱动舵机 电流够么?? 先用示波器看看你的信号对不对,其次 我认为 io口做高低电平驱动不了 你还是用5v电试吧 还有 外部电源一定要和单片机公地 也可以直接从板上拉出5v电 只要信号对 我保证好使