久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2050|回復(fù): 1
打印 上一主題 下一主題
收起左側(cè)

51單片機(jī)超聲波測(cè)距避障小車 進(jìn)入不了while循環(huán)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:308093 發(fā)表于 2018-4-27 21:04 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
代碼如上,我是小白~
請(qǐng)問(wèn)下各位大佬 , 為什么進(jìn)入不了while循環(huán)呢 輪子一直轉(zhuǎn)但是超聲波模塊不能正常運(yùn)轉(zhuǎn) 幫忙改一下代碼并給我一下理由和建議 謝謝啦
  1. #include <AT89x51.H>
  2. #include <intrins.h>
  3. #define ECHO P2_4 //超聲波接口定義
  4. #define TRIG P2_5 //超聲波接口定義
  5. #define Left_moto_go {P1_0=1,P1_1=0,P1_2=1,P1_3=0;} //左邊兩個(gè)電機(jī)向前走
  6. #define Left_moto_back {P1_0=0,P1_1=1,P1_2=0,P1_3=1;} //左邊兩個(gè)電機(jī)后轉(zhuǎn)
  7. #define Left_moto_Stop {P1_0=0,P1_1=0,P1_2=0,P1_3=0;} //左邊停止
  8. #define Right_moto_go {P1_4=1,P1_5=0,P1_6=1,P1_7=0;} //右邊的兩個(gè)前進(jìn)
  9. #define Right_moto_back {P1_4=0,P1_5=1,P1_6=0,P1_7=1;} //右邊的后轉(zhuǎn)
  10. #define Right_moto_Stop {P1_4=0,P1_5=0,P1_6=0,P1_7=0;} //右邊停止
  11. typedef unsigned int u16;
  12. typedef unsigned char u8;
  13. unsigned long S=0;
  14. unsigned int time=0; //時(shí)間變量
  15. unsigned int timer=0; //延時(shí)基準(zhǔn)變量
  16. unsigned char timer1=0; //掃描時(shí)間變?
  17. bit           flag =0;
  18. /**********************測(cè)距**************************************************/
  19. void zd0() interrupt 1          //T0中斷
  20. {
  21.     flag=1;                     //中斷溢出標(biāo)志
  22. }
  23. void delay(unsigned int k) //延時(shí)函數(shù)
  24. {
  25. unsigned int x,y;
  26. for(x=0;x<k;x++)
  27. for(y=0;y<2000;y++);
  28. }
  29. /************************************************************************/
  30. //前進(jìn)
  31. void run(void)
  32. {
  33. Left_moto_go ; //左
  34. Right_moto_go ; //右
  35. }
  36. /************************************************************************/
  37. //后退
  38. void backrun(void)
  39. {
  40. Left_moto_back ; //左
  41. Right_moto_back ; //右
  42. }
  43. /************************************************************************/
  44. //左轉(zhuǎn)
  45. void leftrun(void)
  46. {
  47. Left_moto_back ;
  48. Right_moto_go ;
  49. }
  50. /************************************************************************/
  51. //右轉(zhuǎn)
  52. void rightrun(void)
  53. {
  54. Left_moto_go ;
  55. Right_moto_back ;
  56. }
  57. /************************************************************************/
  58. //停止
  59. void stoprun(void)
  60. {
  61. Left_moto_Stop ;
  62. Right_moto_Stop ;
  63. }
  64. /************************************************************************/
  65. void StartModule() //啟動(dòng)模塊
  66. {
  67. TRIG=1;
  68. _nop_();
  69. _nop_();
  70. _nop_();
  71. _nop_();
  72. _nop_();
  73. _nop_();
  74. _nop_();
  75. _nop_();
  76. _nop_();
  77. _nop_();
  78. _nop_();
  79. _nop_();
  80. _nop_();
  81. _nop_();
  82. _nop_();
  83. _nop_();
  84. _nop_();
  85. _nop_();
  86. _nop_();
  87. _nop_();
  88. _nop_();
  89. TRIG=0;
  90. }
  91. /***************************************************/
  92. void Conut(void) //啟動(dòng)測(cè)距
  93. {
  94. while(!ECHO);
  95. TR0=1;
  96. while(ECHO);
  97. TR0=0;
  98. time=TH0*256+TL0;
  99. TH0=0;
  100. TL0=0;
  101. S=(time*1.7)/100;
  102. }
  103. /************************************************************************/
  104. void time1()interrupt 3 using 2
  105. {
  106. TH1=(65536-100)/256; //100US??
  107. TL1=(65536-100)%256;
  108. timer++; //???100US???????????  
  109. }
  110. void main(void)
  111. {  TMOD=0x21;                  
  112.     SCON=0x50;
  113.     TH1=0xFD;
  114.     TL1=0xFD;
  115.     TH0=0;
  116.     TL0=0;
  117.     TR0=1;  
  118.     ET0=1;                     
  119.     TR1=1;                       
  120.     TI=1;
  121.    
  122.     EA=1;                       
  123.      
  124. run();   
  125.     while(1)
  126. {
  127.     if(timer>=1000) //100MS檢查一次
  128. {
  129. timer=0;
  130. StartModule(); //啟動(dòng)檢測(cè)
  131. Conut(); //計(jì)算距離
  132. if(S<50)
  133. {
  134. stoprun(); //小車停止
  135. delay(500);
  136. backrun();
  137. delay(500);
  138. leftrun();
  139.     if(S<30)
  140.     {
  141.     stoprun();
  142.     delay(500);
  143.     rightrun();
  144.     delay(500);
  145.     run();
  146.     }
  147.     else
  148.     run();
  149. timer=0;
  150. StartModule(); //啟動(dòng)測(cè)超聲模塊
  151. Conut();
  152.     //計(jì)算
  153. }
  154. else
  155. run();
  156. }
  157. }
  158. }
復(fù)制代碼



分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

沙發(fā)
ID:164602 發(fā)表于 2018-4-28 09:20 | 只看該作者
看了你的程序,我認(rèn)為,程序肯定是進(jìn)入了主循環(huán)的!
只是沒(méi)有反應(yīng),原因是你的所有if語(yǔ)句都沒(méi)起作用!!!

先搞清楚距離計(jì)算:聲波空氣中速度約340m/s,來(lái)回雙程,定時(shí)器計(jì)次數(shù)的時(shí)間單位是us,好了,正確的計(jì)算公式為:S=(t*0.17)mm,看清楚沒(méi)?算清楚沒(méi)?以毫米為單位的距離結(jié)果。

而你的計(jì)算為:S=(time*1.7)/100,結(jié)果是十分一毫米。
你的if判斷有這樣幾個(gè):S<50,小于5毫米,S<30,小于3毫米,都是不會(huì)出現(xiàn)的條件,所以沒(méi)有反應(yīng)。

你改改看是不是我說(shuō)的原因。
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品不卡 | 99久久婷婷国产综合精品电影 | 日本高清中文字幕 | 欧美一区二区三区的 | 一区二区日本 | 色欧美日韩| 亚洲欧美日韩中文在线 | 日韩精品成人 | 亚洲精品成人网 | 黄色三级免费网站 | 亚洲成人自拍 | av黄在线观看| 欧洲亚洲一区二区三区 | av在线黄| 粉嫩一区二区三区四区公司1 | 五月天国产 | 久在线 | 尤物在线视频 | 久草青青草 | 国产日韩精品一区 | 一区欧美| 欧美一级三级在线观看 | 国产高清在线精品 | 国产一区二区电影 | 一级久久久久久 | 亚洲精品免费视频 | 欧美一区二区三区四区五区无卡码 | 欧美五月婷婷 | 国产高清在线精品 | 福利成人| 91美女在线观看 | 99久久精品国产毛片 | 日韩在线播放网址 | 中文字幕在线观看一区二区 | 国产精品成人国产乱一区 | 一级黄色毛片免费 | 国产一级精品毛片 | 中文字幕第十五页 | 91九色在线观看 | 久久久久久天堂 | 一级做a毛片 |