循迹小车程序错误1.C(35): error C141: syntax error near '='

发布时间:2019-08-26 21:04:29

#include<reg52.h>

sbit Left_moto_pwm=P1^6; //PWM信号端

sbit Right_moto_pwm=P1^7; //PWM信号端

sbit Left_led=P3^7; //左传感器 

sbit Right_led=P3^6; //右传感器

#define Left_moto_go      {P1^2=1,P1^3=0;}  //左电机向前走

#define Left_moto_back    {P1^2=0,P1^3=1;} //左边电机向后转

#define Left_moto_Stop    {P1^2=0,P1^3=0;}  //左边电机停转                     

#define Right_moto_go     {P1^4=1,P1^5=0;}//右边电机向前走

#define Right_moto_back   {P1^4=0,P1^5=1;}//右边电机向后走

#define Right_moto_Stop   {P1^4=0,P1^5=0;}  //右边电机停转 

#define uchar unsigned char

#define uint unsigned int

uchar pwm_val_left  =0;//变量定义

uchar push_val_left =0;// 左电机占空比N/20

uchar pwm_val_right =0;

uchar push_val_right=0;// 右电机占空比N/20

uchar Right_moto_stop=1;

uchar Left_moto_stop =1;

uint  time=0;

/************************************************************************/

//延时函数

   void delay(unsigned int k)

{    

     unsigned int x,y;

for(x=0;x<k;x++) 

   for(y=0;y<2000;y++);

}

/************************************************************************/

//前速前进

     void  run(void)

{

     push_val_left=12; //速度调节变量 0-20。。。0最小,20最大

push_val_right=12;

Left_moto_go ;   //左电机往前走

Right_moto_go ;  //右电机往前走

}

//后退函数 

     void  backrun(void)

{

     push_val_left=12; //速度调节变量 0-20。。。0最小,20最大

push_val_right=12;

Left_moto_back;   //左电机往后走

Right_moto_back;  //右电机往后走

}

//左转

     void  leftrun(void)

     push_val_left=5;

push_val_right=15;

Right_moto_go ;  //右电机往前走

     Left_moto_back   ;  //左电机后走

}

//右转

     void  rightrun(void)

push_val_left=16;

push_val_right=8;

     Left_moto_go  ;   //左电机往前走

Right_moto_back    ;  //右电机往后走

}

/************************************************************************/

/*                    PWM调制电机转速                                   */

/************************************************************************/

/*                    左电机调速                                        */

/*调节push_val_left的值改变电机转速,占空比            */

void pwm_out_left_moto(void)

{  

   if(Left_moto_stop)

   {

    if(pwm_val_left<=push_val_left)

       {

     Left_moto_pwm=1; 

   }

else 

       {

         Left_moto_pwm=0; 

   }

if(pwm_val_left>=20)

       pwm_val_left=0;

   }

   else    

          {

           Left_moto_pwm=0;

  }

}

/******************************************************************/

/*                    右电机调速                                  */  

   void pwm_out_right_moto(void)

  if(Right_moto_stop)

   { 

    if(pwm_val_right<=push_val_right)

      {

       Right_moto_pwm=1; ; 

   }

else 

      {

   Right_moto_pwm=0; 

  }

if(pwm_val_right>=20)

       pwm_val_right=0;

   }

   else    

          {

           Right_moto_pwm=0;

      }

}

/***************************************************/

//*TIMER0中断服务子函数产生PWM信号*/

 void timer0()interrupt 1   using 2

{

     TH0=0XFc;  //1Ms定时

TL0=0X18;

time++;

pwm_val_left++;

pwm_val_right++;

pwm_out_left_moto();

pwm_out_right_moto();

 }

/*********************************************************************/

void main(void)

{

unsigned char i;

    P1  =0X00;   //关电机

 TMOD=0X01;

TH0= 0XFc; //1ms定时

 TL0= 0X18;

   TR0= 1;//打开定时器T0

ET0= 1;

    EA = 1;//开总中断

while(1)//无限循环

          if(Left_led==0&&Right_led==0)  //有信号为0  没有信号为1

  run();   //调用前进函数

  else

{  

if(Left_led==1&&Right_led==0)    //左边检测到黑线

{

  leftrun();//调用小车左转  函数

     }

    if(Right_led==1&&Left_led==0)//右边检测到黑线

  {  

      rightrun();   //调用小车右转函数

  }

}

}


推荐回答

你的

#define Left_moto_go      {P1^2=1,P1^3=0;}  //左电机向前走

#define Left_moto_back    {P1^2=0,P1^3=1;} //左边电机向后转

#define Left_moto_Stop    {P1^2=0,P1^3=0;}  //左边电机停转                     

#define Right_moto_go     {P1^4=1,P1^5=0;}//右边电机向前走

#define Right_moto_back   {P1^4=0,P1^5=1;}//右边电机向后走

#define Right_moto_Stop   {P1^4=0,P1^5=0;}  //右边电机停转 

全是错的

你可以先用

sbit P12 = P1^2;

然后再用

P12=1或P12=0

但不能用

P1^2=1,这样的写法的

以上问题属网友观点,不代表本站立场,仅供参考!