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

標題: 新手請教一下單片機串口PC通信控制燈的問題 [打印本頁]

作者: LIPPPP    時間: 2017-6-18 00:56
標題: 新手請教一下單片機串口PC通信控制燈的問題
新手自學到串口通信那部分,用了教程里面的發送a數據的串口通信程序例子,串口調試助手可以顯示數據a。然后我自己嘗試寫了,當a = 0x01 led亮,但是串口調試助手有顯示接收到的數據,可是開發板的燈卻沒亮。 下面是程序,先謝謝論壇中的為我解答的人
  1. #include <reg52.h>         
  2. #include <intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. //#define LED P1
  6. uchar dat,num = 0,a=0;
  7. uchar ON = 0;
  8. uchar OFF = 1;
  9. sbit led1 = P1^0;
  10. void initial_com();
  11. void delay(unsigned int z);   // 忽略這延時,本來還想用串口通信實現呼吸流水之類的,現在連燈亮都不行
  12. void delay2(unsigned int t);


  13. void  initial_com(void)
  14. { SCON = 0x50;
  15.   TMOD|= 0x20;   //設置波特率 9600
  16.   TH1 = 0xfd;
  17.   TL1 = 0xfd;
  18.   TR1 = 1;
  19.   REN = 1;           //串口初始化
  20.   SM0 = 0;
  21.   SM1 = 1;
  22.   EA = 1;
  23.   ES = 0;           //串口中斷開啟位  
  24. SBUF = 0x01;  //開發板開關開啟接收到,01 FF數據
  25.   while(!TI);
  26.   TI = 0;
  27.   ES = 1;
  28. }

  29. void main()
  30. {        
  31.         initial_com();
  32.         while(1)
  33.         {        
  34.                 if(num==1)
  35.                 {
  36.                      ES = 0;
  37.                          num = 0;
  38.                          SBUF = a;   //
  39.                          while(!TI);
  40.                          TI = 0;
  41.                          ES = 1;
  42.                         
  43.                 }
  44.                
  45.         }        
  46. }
  47. void ser() interrupt 4
  48. {
  49.         RI=0;
  50.         a = SBUF;
  51. //        ES=0;                                    //關閉串口中斷
  52.         num=1;
  53. /*在調試助手上確實可以顯示接收到 0x01 ,但是燈沒亮*/
  54.          if(a == 0x01)      
  55.          {
  56.            led1 = 0;
  57.                 }
  58.          if(a == 0x02)
  59.          {
  60.             led1 = 1;
  61.                 }
  62.                     

  63. }
復制代碼


作者: HC6800-ES-V2.0    時間: 2017-6-18 09:27
我用你的程序,在我的板子上試驗了一下,完全是正確的。輸入HEX的數據1,可以開燈,輸入HEX的數據2,可以關燈。
可能你的問題是:
我讀你程序時,特別注意了你的判斷用的數據類型——HEX十六進制數據類型,所以,串口通訊實驗時,我特地將輸入的選項,設置為HEX,所以是成功的。
如果你輸入的數據類型是字符型,輸入、輸出看起來都是1,但單片機可不那么想,‘1’和0x01是不同的。
你注意一下,返回的是01,則說明輸入的1是十六進制數據,若返回的是1,就是輸入的字符數據。
切切!數據類型在串口通訊中控制時,重要!!
作者: LIPPPP    時間: 2017-6-18 21:51
HC6800-ES-V2.0 發表于 2017-6-18 09:27
我用你的程序,在我的板子上試驗了一下,完全是正確的。輸入HEX的數據1,可以開燈,輸入HEX的數據2,可以關 ...

原來如此!!! 我搞了好久不知道哪里出錯。我這 新手確實好多小細節都沒弄懂,學習學習了。
作者: yzwzfyz    時間: 2017-6-18 23:19
執行“SBUF = 0x01;  //開發板開關開啟接收到,01 FF數據”,是向串口發送一個01,發完后會產生一個中斷,程序轉入中斷服務去。
在中斷服務程序中你:“a = SBUF;” -----由于SBUF中原來沒有一個確定的數據(發送的SBUF與接收的SBUF是不同的,請你認真仔細讀單片機手冊),所以a不知道是等于什么,=01的可能性為1/256。





歡迎光臨 (http://m.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 亚洲专区在线 | 夜夜夜夜操 | 久久免费毛片 | 不卡av在线播放 | 欧美日韩一区二区三区四区 | 在线播放亚洲 | 中文字幕在线观看一区二区三区 | www四虎影院 | 日韩欧美精品一区 | 欧美成人专区 | 欧美成人一级 | 国产一区高清 | 黄色网址在线播放 | 欧美日韩免费看 | 亚洲午夜精品 | 午夜免费福利 | 成人在线一区二区 | 欧美精品第一页 | 欧美视频一区 | 欧美成人一级片 | 黄色一级片黄色一级片 | 亚洲天堂一区二区三区 | 91精品91久久久中77777 | 精品免费国产一区二区三区四区 | 国产精品成人一区二区三区 | 无套内谢的新婚少妇国语播放 | 欧美一级淫片 | 日本中文字幕一区 | 在线一区 | 在线视频99| 免费av片 | 日本少妇一区二区 | 日韩毛片免费看 | 麻豆久久久 | 在线观看av的网站 | 日韩手机在线视频 | 中文字幕在线免费看 | 日日爱视频| 性久久久久久久 | 天天干天天色天天射 | 亚洲欧美另类在线观看 |