微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 请教大神 这个程序有啥问题吗?

请教大神 这个程序有啥问题吗?

时间:10-02 整理:3721RD 点击:

   

         |TRIG接 P0.1  ECH0 接P0.2|

L298N接线:

   

       |1A1----P2.5 |1A2-----P2.6|

       |2A1----P2.3 |2A2-----P2.2|   

#include <reg52.h> //器件配置文件

#include <intrins.h>

sbit  RX=P0^1;  //接受端口

sbit  TX=P0^0;  //发射端口

//驱动引脚定义

sbit IN1=P2^6;//M2

sbit IN2=P2^5;

sbit IN3=P2^3;//M1

sbit IN4=P2^2;

unsigned int  time=0;

unsigned long S=0,num=0;

  bit      flag =0;

int m=0;

uS延时函数大致延时

void DelayUs2x(unsigned char t)

{   

while(--t);

}

/*---------------------------------

       mS延时函数

---------------------------------*/

void DelayMs(unsigned char t)

{

  while(t--)

{

     //大致延时1mS

     DelayUs2x(245);

DelayUs2x(245);

}

}

void delay(void)//

{

DelayMs(200);DelayMs(200);

DelayMs(200);DelayMs(200);

DelayMs(200);DelayMs(200);

}

/*********驱动模块********************/

forword()//前进

{

IN1=1;

IN2=0;

IN3=1;

IN4=0;

}

turn_left()//左拐

{

IN1=1;

IN2=0;

IN3=0;

IN4=0;

}

/*turn_right()//右拐

{

IN1=0;

IN2=0;

IN3=1;

IN4=0;

} */

stop()//停止

{

IN1=0;

IN2=0;

IN3=0;

IN4=0;

}

/*****T0中断用来计数器溢出,超过测距范围******/

void zd0() interrupt 1   

  {

    flag=1; //中断溢出标志

  }

/*********启动超生波模块*****************/

void StartModule()           

  {

  TX=1;   //启动一次模块

  DelayUs2x(8);   //延时大概20us

  TX=0;

      while(!RX);   //当RX为零时等待

  TR0=1;   //开启计数

  while(RX);   //当RX为1计数并等待

  TR0=0;          //关闭计数

}

unsigned int count()

{

  

  time=TH0*256+TL0;

  TH0=0;            

  TL0=0;

S=(time*1.7)/100;     //算出来是CM

  if((S>=30)||flag==1) //超出测量范围

   {  

flag=0;S=1;

   }

     else S=0;

   DelayMs(80);//80MS

  return S;

}

//定时器T1溢出中断一定时间启动一次测距模块

void time1() interrupt 3

{

ET1=0;TR1=0;

TH1=(65536-15536)/256;

TL1=(65536-15536)%256;

StartModule();

num=count();

    switch (S)

{

   case 1:{ turn_left();

           delay();

   delay();

   stop();

   m=1;

   break;

  }

  case 0: { m=2;

           

   break;

         }

}

   ET1=1;TR1=1;

}

/**************主函数*********************/

void main()

{  

  unsigned int i=0;

  TMOD=0x11;    //设T0为方式1,GATE=1;

  TH0=0;

  TL0=0;         

  ET0=1;            //允许T0中断

  TH1=(65536-15536)/256;

  TL1=(65536-15536)%256;         

  ET1=1;            //允许T1中断

  TR1=1;

  EA=1;             //开启总中

  forword();

  while(1)

   {

   

if(m==1) {

   m=0;

ET1=1;TR1=1;

}

  if(m==2) { m=0;

               forword();

              ET1=1;TR1=1; }

}

}


是编译出错还是功能无法实现啊?

报错是啥?要说清楚呀

运行不出来效果呀,没障碍也躲,转转的就停了

运行不出来效果呀,没障碍也躲,转转的就停了

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

网站地图

Top