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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2366|回復: 2
收起左側

一個單片機超聲波避障程序錯誤的問題

[復制鏈接]
ID:397735 發表于 2020-3-6 23:42 | 顯示全部樓層 |閱讀模式
  1. HELLO 51MUC
復制代碼

萌新半抄半改寫了一個程序但是出現了同一個語法錯誤(大霧)
  1. compiling wuluchaoshengbo.c...
  2. wuluchaoshengbo.c(205): error C141: syntax error near '=', expected ';'
  3. wuluchaoshengbo.c(209): error C141: syntax error near '=', expected ';'
  4. wuluchaoshengbo.c(216): error C141: syntax error near '=', expected ';'
  5. wuluchaoshengbo.c(228): error C141: syntax error near '=', expected ';
復制代碼

放眼望去全是錯誤,頭發都要掉完了,涂涂改改
希望有好心人指點下錯誤,幫助下小娃娃
  1. #include <STC12C5A60S2.h
  2. #include <intrins.h>

  3. #define  RX1  P3^6                   //小車左側超聲波HC-SR04接收端
  4. #define  TX1  P1^7                   //發送端

  5. #define  RX2  P3^3                   //左前方超聲波
  6. #define  TX2  P0^2

  7. #define  RX3  P2^4                   //正前方超聲波
  8. #define  TX3  P2^5

  9. #define  RX4  P3^5                   //右前方超聲波
  10. #define  TX4  P3^4

  11. #define  RX5  P3^7                   //右側超聲波
  12. #define  TX5  P1^6

  13. #define Left_moto_pwm          P1^5         //PWM信號端
  14. #define Right_moto_pwm          P1^4          //PWM信號端

  15. //定義小車驅動模塊輸入IO口
  16. sbit IN1=P1^0;
  17. sbit IN2=P1^1;
  18. sbit IN3=P1^2;
  19. sbit IN4=P1^3;
  20. sbit EN1=P1^4;
  21. sbit EN2=P1^5;

  22. bit Right_moto_stop=1;
  23. bit Left_moto_stop =1;

  24. #define Left_moto_go      {IN1=0,IN2=1,EN1=1;}  //左電機向前走
  25. #define Left_moto_back    {IN1=1,IN2=0,EN1=1;}         //左邊電機向后走
  26. #define Left_moto_Stop    {EN1=0;}  //左邊電機停轉
  27. #define Right_moto_go     {IN3=1,IN4=0,EN2=1;}        //右邊電機向前走
  28. #define Right_moto_back   {IN3=0,IN4=1,EN2=1;}        //右邊電機向后走
  29. #define Right_moto_Stop   {EN2=0;}        //右邊電機停轉


  30. unsigned char pwm_val_left  =0;//變量定義
  31. unsigned char push_val_left =0;// 左電機占空比N/20
  32. unsigned char pwm_val_right =0;
  33. unsigned char push_val_right=0;// 右電機占空比N/20


  34. unsigned int  time=0;
  35. unsigned int  timer=0;
  36. unsigned long S1=0;
  37. unsigned long S2=0;
  38. unsigned long S3=0;
  39. unsigned long S4=0;
  40. unsigned long S5=0;



  41. void delay_1ms(unsigned char x)          //1ms延時函數,100ms以內可用
  42. {
  43. unsigned char i;
  44. while(x--)
  45. for(i=124;i>0;i--);
  46. }


  47. /********************************************************/

  48. void Count1()          //計算左側超聲波距離的函數
  49. {
  50. while(!RX1);                //當RX1為零時等待
  51. TR0=1;                            //開啟計數
  52. while(RX1);                //當RX1為1計數并等待
  53. TR0=0;                                //關閉計數
  54. time=TH0*256+TL0;
  55. TH0=0;
  56. TL0=0;
  57. S1=(time*1.7)/100;     //算出來是CM
  58. }

  59. void Count2()          //計算函數
  60. {
  61. while(!RX2);                //當RX2為零時等待
  62. TR0=1;                            //開啟計數
  63. while(RX2);                //當RX2為1計數并等待
  64. TR0=0;                                //關閉計數
  65. time=TH0*256+TL0;
  66. TH0=0;
  67. TL0=0;
  68. S2=(time*1.7)/100;     //算出來是CM
  69. }


  70. void Count3()          //計算函數
  71. {
  72. while(!RX3);                //當RX3為零時等待
  73. TR0=1;                            //開啟計數
  74. while(RX3);                //當RX3為1計數并等待
  75. TR0=0;                                //關閉計數
  76. time=TH0*256+TL0;
  77. TH0=0;
  78. TL0=0;
  79. S3=(time*1.7)/100;     //算出來是CM
  80. }

  81. void Count4()          //計算函數
  82. {
  83. while(!RX4);                //當RX4為零時等待
  84. TR0=1;                            //開啟計數
  85. while(RX4);                //當RX4為1計數并等待
  86. TR0=0;                                //關閉計數
  87. time=TH0*256+TL0;
  88. TH0=0;
  89. TL0=0;
  90. S4=(time*1.7)/100;     //算出來是CM
  91. }

  92. void Count5()          //計算函數
  93. {
  94. while(!RX5);                //當RX5為零時等待
  95. TR0=1;                            //開啟計數
  96. while(RX5);                //當RX5為1計數并等待
  97. TR0=0;                                //關閉計數
  98. time=TH0*256+TL0;
  99. TH0=0;
  100. TL0=0;
  101. S5=(time*1.7)/100;     //算出來是CM
  102. }



  103. /************************************************************************/
  104. //前進
  105. void run(void)
  106. {
  107. push_val_left=8;         //左電機調速,速度調節變量 0-20。。。0最小,20最大,四驅大輪>6
  108. push_val_right=8;         //右電機調速
  109. Left_moto_go ;   //左電機往前走
  110. Right_moto_go ;  //右電機往前走
  111. }
  112. /************************************************************************/
  113. //后退
  114. void backrun(void)
  115. {
  116. push_val_left=20;
  117. push_val_right=20;
  118. Left_moto_back ; //左電機往前走
  119. Right_moto_back ; //右電機往前走
  120. }
  121. /************************************************************************/
  122. //左轉
  123. void leftrun(void)
  124. {
  125. push_val_left=20;
  126. push_val_right=20;
  127. Left_moto_back ; //左電機往后走
  128. Right_moto_go ; //右電機往前走
  129. }
  130. /************************************************************************/
  131. //右轉
  132. void rightrun(void)
  133. {
  134. push_val_left=20;
  135. push_val_right=20;
  136. Left_moto_go ; //左電機往前走
  137. Right_moto_back ; //右電機往后走
  138. }
  139. /************************************************************************/
  140. //停止
  141. void stoprun(void)
  142. {
  143. Left_moto_Stop ; //左電機停
  144. Right_moto_Stop ; //右電機停
  145. }




  146. /************************************************************************/
  147. /*                    PWM調制電機轉速                                   */
  148. /************************************************************************/

  149. /*                    左電機調速                                        */
  150. /*調節push_val_left的值改變電機轉速,占空比            */

  151. void pwm_out_left_moto(void)
  152. {
  153. if(Left_moto_stop)
  154. {
  155. if(pwm_val_left<=push_val_left)
  156. {
  157. Left_moto_pwm=1;
  158. }
  159. else
  160. {
  161. Left_moto_pwm=0;
  162. }
  163. if(pwm_val_left>=20)
  164. pwm_val_left=0;
  165. }
  166. else
  167. {
  168. Left_moto_pwm=0;
  169. }
  170. }
  171. /******************************************************************/
  172. /*                    右電機調速                                  */
  173. void pwm_out_right_moto(void)
  174. {
  175. if(Right_moto_stop)
  176. {
  177. if(pwm_val_right<=push_val_right)
  178. {
  179. Right_moto_pwm=1;
  180. }
  181. else
  182. {
  183. Right_moto_pwm=0;
  184. }
  185. if(pwm_val_right>=20)
  186. pwm_val_right=0;
  187. }
  188. else
  189. {
  190. Right_moto_pwm=0;
  191. }
  192. }



  193. /********************************************************/
  194. void timer0() interrupt 1                  //T0中斷
  195. {

  196. }

  197. /***************************************************/
  198. ///*TIMER1中斷服務子函數產生PWM信號*/

  199. void timer1()interrupt 3
  200. {
  201. TH1=(65536-1000)/256;         //1ms定時
  202. TL1=(65536-1000)%256;
  203. timer++;
  204. pwm_val_left++;
  205. pwm_val_right++;
  206. pwm_out_left_moto();
  207. pwm_out_right_moto();
  208. }


  209. /*********************************************************
  210. **********************************************************/

  211. void  main(void)

  212. {
  213. TMOD=0x11;                   //設T0為方式1,GATE=1;
  214. TH0=0;
  215. TL0=0;
  216. TH1=(65536-1000)/256;         //1ms定時
  217. TL1=(65536-1000)%256;
  218. ET0=1;             //允許T0中斷
  219. ET1=1;                           //允許T1中斷
  220. TR1=1;                           //開啟定時器
  221. EA=1;                           //開啟總中斷

  222. while(1)
  223. {

  224. TX1=1;                                 //開啟超聲波1探測
  225. delay_1ms(1);
  226. TX1=0;
  227. Count1();                        //測距

  228. TX2=1;
  229. delay_1ms(1);
  230. TX2=0;
  231. Count2();

  232. TX3=1;
  233. delay_1ms(1);
  234. TX3=0;
  235. Count3();

  236. TX4=1;
  237. delay_1ms(1);
  238. TX4=0;
  239. Count4();

  240. TX5=1;
  241. delay_1ms(1);
  242. TX5=0;
  243. Count5();


  244. if(S3<20 && S1<20 && S5<20)        //進入狹窄通道
  245. {
  246. backrun();                        //倒車
  247. delay_1ms(100);
  248. }

  249. else if(S3<20 && S1<S5 ) //車子與障礙物90度垂直,左邊距離小右轉
  250. {
  251. rightrun();
  252. }
  253. else if(S3<20 && S5<S1 )        //車子與障礙物90度垂直,右邊距離小左轉
  254. {
  255. leftrun();
  256. }

  257. else if(S2<20)
  258. {
  259. rightrun(); //車與障礙物呈45度角時,車的左邊比車的右邊距離小,右轉

  260. }
  261. else if(S4<20)
  262. {
  263. leftrun(); //車與障礙物呈45度角時,車的右邊比車的左邊距離小,左轉
  264. }

  265. else
  266. {
  267. run();
  268. }

  269. }
  270. }



復制代碼
錯誤的位置指向這里,一個部分錯誤用@標記
  1. void pwm_out_left_moto(void)
  2. {
  3.    if(Left_moto_stop)
  4.       {
  5.           if(pwm_val_left<=push_val_left)
  6.            {
  7. @ Left_moto_pwm=1;
  8.            }
  9.        else
  10.          {
復制代碼

感謝各位不吝賜教

回復

使用道具 舉報

ID:155507 發表于 2020-3-7 07:20 | 顯示全部樓層
P1^4是什么?C語言的意思是:P1這個變量的平方。你想表達的意思不是這個吧,是想表達為外部的IO口,但這個是不能這樣表達的。要在main()函數以前,用sbit 去說明定義。不能用 #define
sbit是keil特有的,這個叫位定義

sbit Left_moto_pwm  =        P1^5  ;       //PWM信號端
sbit Right_moto_pwm  =        P1^4  ;        //PWM信號端
回復

使用道具 舉報

ID:397735 發表于 2020-3-7 11:55 | 顯示全部樓層
angmall 發表于 2020-3-7 07:20
P1^4是什么?C語言的意思是:P1這個變量的平方。你想表達的意思不是這個吧,是想表達為外部的IO口,但這個 ...

謝謝謝謝!因為參考了很多程序有些地方也是一知半解。感謝賜教,以后不會錯了!
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩久久久 | 国产一区二区在线视频 | 婷婷桃色网 | 国产精品久久九九 | 国产免费一区 | 欧美激情亚洲天堂 | 国产日韩91 | 亚洲国产精品成人 | 欧美在线视频不卡 | 欧美日韩国产一区二区三区 | 在线视频一区二区三区 | 精品一区二区久久久久久久网站 | 日韩av高清在线 | 久久精品久久久久久 | 欧美电影免费观看 | 国产精品一区二区在线 | 蜜桃精品视频在线 | 第一av| 91视频久久| 四虎永久免费地址 | 日本电影免费完整观看 | 啪一啪| 在线不卡av | 亚洲巨乳自拍在线视频 | 日韩中文字幕免费在线观看 | 国产精品毛片久久久久久 | 日本成人在线网址 | 欧美操操操 | 久久精品成人 | 日本二区 | 国产精品一区久久久 | 国产目拍亚洲精品99久久精品 | 久久精品青青大伊人av | 超碰97人人人人人蜜桃 | 久久精品中文字幕 | 国产xxxx搡xxxxx搡麻豆 | 日韩精品一区在线 | 久久精品视频91 | 欧美日韩三级视频 | 亚洲一区二区日韩 | 91久久精品国产免费一区 |