微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 红外控制小车速度问题

红外控制小车速度问题

时间:10-02 整理:3721RD 点击:
我写了一个红外遥控 控制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

这位兄台,你这程序是完整的吗?

不是   红外接收没写

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top