代码如上,我是小白~
请问下各位大佬 , 为什么进入不了while循环呢 轮子一直转但是超声波模块不能正常运转 帮忙改一下代码并给我一下理由和建议 谢谢啦
- #include <AT89x51.H>
- #include <intrins.h>
- #define ECHO P2_4 //超声波接口定义
- #define TRIG P2_5 //超声波接口定义
- #define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左边两个电机向前走
- #define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左边两个电机后转
- #define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左边停止
- #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右边的两个前进
- #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右边的后转
- #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右边停止
- typedef unsigned int u16;
- typedef unsigned char u8;
- unsigned long S=0;
- unsigned int time=0; //时间变量
- unsigned int timer=0; //延时基准变量
- unsigned char timer1=0; //扫描时间变?
- bit flag =0;
- /**********************测距**************************************************/
- void zd0() interrupt 1 //T0中断
- {
- flag=1; //中断溢出标志
- }
- void delay(unsigned int k) //延时函数
- {
- unsigned int x,y;
- for(x=0;x<k;x++)
- for(y=0;y<2000;y++);
- }
- /************************************************************************/
- //前进
- void run(void)
- {
- Left_moto_go ; //左
- Right_moto_go ; //右
- }
- /************************************************************************/
- //后退
- void backrun(void)
- {
- Left_moto_back ; //左
- Right_moto_back ; //右
- }
- /************************************************************************/
- //左转
- void leftrun(void)
- {
- Left_moto_back ;
- Right_moto_go ;
- }
- /************************************************************************/
- //右转
- void rightrun(void)
- {
- Left_moto_go ;
- Right_moto_back ;
- }
- /************************************************************************/
- //停止
- void stoprun(void)
- {
- Left_moto_Stop ;
- Right_moto_Stop ;
- }
- /************************************************************************/
- void StartModule() //启动模块
- {
- TRIG=1;
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- TRIG=0;
- }
- /***************************************************/
- void Conut(void) //启动测距
- {
- while(!ECHO);
- TR0=1;
- while(ECHO);
- TR0=0;
- time=TH0*256+TL0;
- TH0=0;
- TL0=0;
- S=(time*1.7)/100;
- }
- /************************************************************************/
- void time1()interrupt 3 using 2
- {
- TH1=(65536-100)/256; //100US??
- TL1=(65536-100)%256;
- timer++; //???100US???????????
- }
- void main(void)
- { TMOD=0x21;
- SCON=0x50;
- TH1=0xFD;
- TL1=0xFD;
- TH0=0;
- TL0=0;
- TR0=1;
- ET0=1;
- TR1=1;
- TI=1;
-
- EA=1;
-
- run();
- while(1)
- {
- if(timer>=1000) //100MS检查一次
- {
- timer=0;
- StartModule(); //启动检测
- Conut(); //计算距离
- if(S<50)
- {
- stoprun(); //小车停止
- delay(500);
- backrun();
- delay(500);
- leftrun();
- if(S<30)
- {
- stoprun();
- delay(500);
- rightrun();
- delay(500);
- run();
- }
- else
- run();
- timer=0;
- StartModule(); //启动测超声模块
- Conut();
- //计算
- }
- else
- run();
- }
- }
- }
复制代码
|