51 控制 很简单的舵机 ,我让他 一直正传,可以,一直 反转,可以 ,正传后 反转就不行,求大神,求原子哥救援啊!!!
#include "reg51.h"
#define uint unsigned int
#define uchar unsigned char
sbit LEFT= P1^1 ;
sbit RIGHT =P1^2 ;
uchar num0=0; //左PWM 标志
uchar num1=0; //右PWM 标志
uint start=0;
uint TIME=0;
uchar motor[2][2]={0};//motor[0][0] 左电机 方向 motor[0][1] 左电机 延迟
void delay_ms(uint x)
{
start=1;
TIME=0;
while(1)
{
i f(TIME>x)
{
start=0;
break;
}
}
}
void Time0_Init()
{
TMOD|=0X01; //方式一 16 位定时器
TH0=(65536-45872)/256; //50MS 自动重装值
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1; //开定时器0
}
//////************/////
//dir0/1 time 左/右电机方向(0/1 前进/后退) 延迟
void Motor(uchar dir0,uchar dir1,uchar time)
{
motor[0][0]=dir0;
motor[0][1]=time;
motor[1][0]=dir1;
motor[1][1]=time;
delay_ms(time);
}
void main ()
{
Time0_Init();
while(1)
{
Motor(1,0,5000);//l两个轮子 直走
Motor(0,1,5000);//两个轮子后传
}
}
void T0_Time() interrupt 1
{
TH0=(65536-1000)/256;//1ms 中断
TL0=(65536-1000)%256;
if(start)
TIME++;
else
TIME=0;
if(num0<20) num0++; //pwm 周期 20ms
else num0=0;
if(num1<20) num1++;
else num1=0;
if(motor[0][0] ==0) //左电机 前进 1/20 pwm 占空比
{
if(num0<1) LEFT=1;
else LEFT=0;
}
else
{
if(num0<3) LEFT=1;
else LEFT=0;
}
if(motor[1][0] ==0) //右电机 前进 1/20 pwm 占空比
{
if(num1<1) RIGHT=1;
else RIGHT=0;
}
else //右电机 后退 3/20 pwm 占空比
{
if(num1<3) RIGHT=1;
else RIGHT=0;
}
}
|