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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4274|回復: 3
打印 上一主題 下一主題
收起左側

新手請教一下單片機串口PC通信控制燈的問題

[復制鏈接]
跳轉到指定樓層
樓主
ID:210889 發表于 2017-6-18 00:56 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
新手自學到串口通信那部分,用了教程里面的發送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. }
復制代碼

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

使用道具 舉報

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

評分

參與人數 1黑幣 +5 收起 理由
LIPPPP + 5 贊一個!

查看全部評分

回復

使用道具 舉報

板凳
ID:210889 發表于 2017-6-18 21:51 | 只看該作者
HC6800-ES-V2.0 發表于 2017-6-18 09:27
我用你的程序,在我的板子上試驗了一下,完全是正確的。輸入HEX的數據1,可以開燈,輸入HEX的數據2,可以關 ...

原來如此!!! 我搞了好久不知道哪里出錯。我這 新手確實好多小細節都沒弄懂,學習學習了。
回復

使用道具 舉報

地板
ID:123289 發表于 2017-6-18 23:19 | 只看該作者
執行“SBUF = 0x01;  //開發板開關開啟接收到,01 FF數據”,是向串口發送一個01,發完后會產生一個中斷,程序轉入中斷服務去。
在中斷服務程序中你:“a = SBUF;” -----由于SBUF中原來沒有一個確定的數據(發送的SBUF與接收的SBUF是不同的,請你認真仔細讀單片機手冊),所以a不知道是等于什么,=01的可能性為1/256。
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 韩日免费视频 | 有码一区 | 成人一区二区电影 | 亚洲欧美视频一区 | 国产精品久久久久久久久免费桃花 | 日韩在线小视频 | 黄色网址免费在线观看 | 欧美日韩一二三区 | 国产成人精品一区二区三 | 国产伦精品一区二区三区高清 | 国产专区在线 | 国产精品久久网 | 91久久久久久久久久久 | 在线免费观看黄色av | 日韩小视频在线 | 国产99视频精品免费视频7 | 国产91在线播放精品91 | 欧美性猛交一区二区三区精品 | 欧美日韩在线免费观看 | 精品国产乱码久久久久久蜜柚 | 97精品超碰一区二区三区 | 久久高清国产视频 | 日本欧美在线观看视频 | 久久久精品 | 亚洲国产二区 | 99re国产精品 | 久久亚洲精品视频 | 精品久久不卡 | 91香蕉嫩草| 午夜免费视频 | 欧美九九九 | 国产精品一区在线观看 | 欧洲色综合 | 凹凸日日摸日日碰夜夜 | 精品国产乱码久久久久久a丨 | 夜夜爽99久久国产综合精品女不卡 | 婷婷久久精品一区二区 | 亚洲色在线视频 | 俺去俺来也www色官网cms | 国产一区二区在线播放视频 | 久久国产精品一区二区 |