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

2019-07-16 00:31发布

            |TRIGtimes New Roman">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;//M2sbit IN2=P2^5;sbit IN3=P2^3;//M1sbit 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);   //RX1计数并等待  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为方式1GATE=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; }}}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。