红外控制小车速度问题

2019-07-16 00:38发布

我写了一个红外遥控 控制PWM调速的程序,可是一个电机正常工作,可以产生PWM,另一个电机不行,两端电压一直不变,也就是不产生PWM波形,请高手看看怎么回事。程序如下
#include<reg52.h>
#include<intrins.h>
#include<math.h>
#define uchar unsigned char
#define uint unsigned int
#define motor_c P1

//uchar time_delay;
uchar count=0;
sbit PWM_R=P1^3;
sbit PWM_L=P1^0;
sbit PWM_HL=P1^1;
sbit PWM_HR=P1^2;
sbit en1=P1^4;
sbit en2=P1^5;

sbit IRIN=P3^2; //红外数据线
uchar IRCOM[7];
uchar m1=0;
uchar m2=0; //电机2速度值
uchar tmp1,tmp2; //电机当前速度值
//控制电机程序
void motor(uchar index,char speed)
{
if(index==1)  // 第一个电机
  {
   m1=abs(speed);  
   if(speed>0)   //正转
    {PWM_L=1;PWM_HL=0;}
   else         //反转
    {PWM_L=0;PWM_HL=1;}
  }

  if(index==2)   // 第二个电机
   {
    m2=abs(speed);
    if(speed>0)
     {PWM_R=1;PWM_HR=0;}
    else
     {PWM_R=0;PWM_HR=1;}

    }


}
void main()
{
//uchar i;
IRIN=1;
TMOD=0x02;
TH0=0x9B;
TL0=0x9B;
EA=1;
ET0=1;
TR0=1;

IT0=1;
EX0=1;
while(1)
{
  //for(i=0;i<100;i++)
  //motor(1,i);

  //delay(5000);
  }
}

void timer0() interrupt 1
{
if(count==0)     /* 1个PWM周期完成后才会接受新数值 */
  {tmp1=m1;tmp2=m2;}
  if(count<tmp1)  en1=1;   else en1=0;//产生电机1的PWM信号
  if(count<tmp2)  en2=1;    else en2=0;//产生电机1的PWM信号
  count++;   
  if(count>=100)
    count=0;  //1gePWM信号有100次中断产生
}
void delay(uchar x)    //x*0.14MS
{
uchar i;
while(x--)
{
for(i=0;i<13;i++);
}
}
void IR_IN(void) interrupt 0
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
yongaichina
1楼-- · 2019-07-16 06:03
 精彩回答 2  元偷偷看……
赛伯Man
2楼-- · 2019-07-16 10:29
这位兄台,你这程序是完整的吗?
hbdxzn
3楼-- · 2019-07-16 11:05
赛伯Man 发表于 2013-6-30 21:50
这位兄台,你这程序是完整的吗?

不是   红外接收没写

一周热门 更多>