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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 757|回復: 9
打印 上一主題 下一主題
收起左側(cè)

用51單片機串口打印DHT11溫濕度數(shù)據(jù)顯示亂碼

[復制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:1144670 發(fā)表于 2025-3-2 12:54 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
芯片是STC89C52RC,在csdn等地方試了很多人的代碼都不成功,所以來求助各位大佬,我想把dht11采集到的溫濕度打印到串口上。
在Keil5點擊build以后,燒錄到單片機上,打開串口打印的都是“?借鑒的main.c代碼:DHT11溫濕度傳感器連接51單片機打印到串口_dht11與51單片機怎么連接-CSDN博客
main.c
  1. #include <at89c51RC2.h>
  2. #include<intrins.h>
  3. #define uchar unsigned char
  4. #define uint unsigned int
  5. sbit Data=P3^6;   //定義數(shù)據(jù)線
  6. uchar rec_dat[9];   //用于顯示的接收數(shù)據(jù)數(shù)組

  7. void DHT11_delay_us(uchar n)
  8. {
  9.     while(--n);
  10. }

  11. void DHT11_delay_ms(uint z)
  12. {
  13.    uint i,j;
  14.    for(i=z;i>0;i--)
  15.       for(j=110;j>0;j--);
  16. }

  17. void DHT11_start()
  18. {
  19.    Data=1;
  20.    DHT11_delay_us(2);
  21.    Data=0;
  22.    DHT11_delay_ms(20);   //延時18ms以上
  23.    Data=1;
  24.    DHT11_delay_us(30);
  25. }

  26. uchar DHT11_rec_byte()      //接收一個字節(jié)
  27. {
  28.    uchar i,dat=0;
  29.   for(i=0;i<8;i++)    //從高到低依次接收8位數(shù)據(jù)
  30.    {         
  31.       while(!Data);   等待50us低電平過去
  32.       DHT11_delay_us(8);     //延時60us,如果還為高則數(shù)據(jù)為1,否則為0
  33.       dat<<=1;           //移位使正確接收8位數(shù)據(jù),數(shù)據(jù)為0時直接移位
  34.       if(Data==1)    //數(shù)據(jù)為1時,使dat加1來接收數(shù)據(jù)1
  35.          dat+=1;
  36.       while(Data);  //等待數(shù)據(jù)線拉低   
  37.     }  
  38.     return dat;
  39. }

  40. void DHT11_receive()      //接收40位的數(shù)據(jù)
  41. {
  42.     uchar R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  43.     DHT11_start();
  44.     if(Data==0)
  45.     {
  46.         while(Data==0);   //等待拉高     
  47.         DHT11_delay_us(40);  //拉高后延時80us
  48.         R_H=DHT11_rec_byte();    //接收濕度高八位  
  49.         R_L=DHT11_rec_byte();    //接收濕度低八位  
  50.         T_H=DHT11_rec_byte();    //接收溫度高八位  
  51.         T_L=DHT11_rec_byte();    //接收溫度低八位
  52.         revise=DHT11_rec_byte(); //接收校正位

  53.         DHT11_delay_us(25);    //結(jié)束

  54.         if((R_H+R_L+T_H+T_L)==revise)      //校正
  55.         {
  56.             RH=R_H;
  57.             RL=R_L;
  58.             TH=T_H;
  59.             TL=T_L;
  60.         }
  61.         /*數(shù)據(jù)處理,方便顯示*/
  62.         rec_dat[0]='0'+(RH/10);
  63.         rec_dat[1]='0'+(RH%10);
  64.         rec_dat[2]='R';
  65.         rec_dat[3]='H';
  66.         rec_dat[4]=' ';
  67.         rec_dat[5]=' ';
  68.         rec_dat[6]='0'+(TH/10);
  69.         rec_dat[7]='0'+(TH%10);
  70.         rec_dat[8]='C';
  71.     }
  72. }

  73. void initSBUF()        //設定定時器1,用于串口中斷
  74. {
  75.         TMOD=0x20;        //設定T1定時器工作方式2
  76.         TH1=0xfd;                //T1定時器裝初值
  77.         TL1=0xfd;                //T1定時器裝初值
  78.         TR1=1;                        //啟動T1定時器
  79.         REN=1;                        //允許串口接收
  80.         SM0=0;                        //設定串口工作方式1
  81.         SM1=1;                        //設定串口工作方式1
  82.         EA=1;                                //開總中斷
  83.         ES=1;                                //開串口中斷
  84. }

  85. void main()
  86. {
  87.          char code Ready_dat[13]="\tReady OK!\n";
  88.      uchar i;
  89.      initSBUF(); //串口初始化
  90.         //每次使用printf函數(shù)TI要先置1
  91.          ES=0;
  92.          for(i=0 ;i<13 ;i++)        //修改輸出的字符數(shù)量
  93.          {
  94.                 SBUF=Ready_dat[i];
  95.                 while(!TI);
  96.                 TI=0;
  97.          }
  98.         
  99.    while(1)
  100.    {   
  101.        DHT11_delay_ms(4500);    //DHT11上電后要等待1S以越過不穩(wěn)定狀態(tài)在此期間不能發(fā)送任何指令
  102.        DHT11_receive();
  103.            ES=0;
  104.            for(i=0 ;i<9 ;i++)        //修改輸出的字符數(shù)量
  105.            {
  106.           SBUF=rec_dat[i];
  107.           while(!TI);
  108.           TI=0;
  109.           }
  110.                                  
  111.          for(i=0 ;i<13 ;i++)        //修改輸出的字符數(shù)量
  112.          {
  113.                 SBUF=Ready_dat[i];
  114.                 while(!TI);
  115.                 TI=0;
  116.          }
  117.    }
  118. }
復制代碼

intrins.h
  1. #ifndef __INTRINS_H__
  2. #define __INTRINS_H__

  3. extern void          _nop_     (void);
  4. extern bit           _testbit_ (bit);
  5. extern unsigned char _cror_    (unsigned char val, unsigned char n);
  6. extern unsigned int  _iror_    (unsigned int val,  unsigned char n);
  7. extern unsigned long _lror_    (unsigned long val, unsigned char n);
  8. extern unsigned char _crol_    (unsigned char val, unsigned char n);
  9. extern unsigned int  _irol_    (unsigned int val,  unsigned char n);
  10. extern unsigned long _lrol_    (unsigned long val, unsigned char n);
  11. extern unsigned char _chkfloat_(float);
  12. extern void          _push_    (unsigned char _sfr);
  13. extern void          _pop_     (unsigned char _sfr);

  14. #endif
復制代碼












下載 (1).png (358.61 KB, 下載次數(shù): 0)

Keil界面

Keil界面

下載 (2).png (4.39 MB, 下載次數(shù): 0)

實物接線

實物接線

下載.png (287.29 KB, 下載次數(shù): 0)

串口助手

串口助手

csdn3.zip

24.92 KB, 下載次數(shù): 0

壓縮包里是所有代碼文件

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

使用道具 舉報

沙發(fā)
ID:57657 發(fā)表于 2025-3-3 08:28 | 只看該作者
樓主把串口中斷打開了,串口中斷的入口函數(shù)去哪了?
另外把 intrins.h 等Keil自帶的頭文件貼出來沒有任何意義,這個指令在Keil內(nèi)部。
回復

使用道具 舉報

板凳
ID:583948 發(fā)表于 2025-3-3 09:06 | 只看該作者
你講仿真調(diào)試平臺軟件串口波特率設置為9600試一試呢?是不是波特率兩邊不一致導致的
回復

使用道具 舉報

地板
ID:446156 發(fā)表于 2025-3-3 09:57 | 只看該作者
你第一次使用串口嗎,之前有沒有串口發(fā)送正常的程序
回復

使用道具 舉報

5#
ID:1144670 發(fā)表于 2025-3-3 21:25 | 只看該作者
qinlu123 發(fā)表于 2025-3-3 09:57
你第一次使用串口嗎,之前有沒有串口發(fā)送正常的程序

之前有用過串口

串口.png (493.26 KB, 下載次數(shù): 0)

串口.png
回復

使用道具 舉報

6#
ID:1144670 發(fā)表于 2025-3-3 21:27 | 只看該作者
zpwgf 發(fā)表于 2025-3-3 09:06
你講仿真調(diào)試平臺軟件串口波特率設置為9600試一試呢?是不是波特率兩邊不一致導致的

看“打開串口”右上角波特率那里我調(diào)的就是9600
回復

使用道具 舉報

7#
ID:1144670 發(fā)表于 2025-3-3 21:48 | 只看該作者
npn 發(fā)表于 2025-3-3 08:28
樓主把串口中斷打開了,串口中斷的入口函數(shù)去哪了?
另外把 intrins.h 等Keil自帶的頭文件貼出來沒有任何意 ...

沒有串口中斷的入口函數(shù),應該沒有關(guān)系吧,我把串口中斷關(guān)閉了以后也是這樣。
回復

使用道具 舉報

8#
ID:446156 發(fā)表于 2025-3-4 07:48 | 只看該作者

你為什么不把你好用的串口程序和DHT11讀取程序結(jié)合一下試試呢
回復

使用道具 舉報

9#
ID:446156 發(fā)表于 2025-3-4 07:58 | 只看該作者

你抄的這個程序PCON寄存器沒有設置啊
回復

使用道具 舉報

10#
ID:1110945 發(fā)表于 2025-3-4 09:16 | 只看該作者
用Hex模式看看接收到的是啥數(shù)據(jù),再分析。
如果只有一個字節(jié),說明串口中斷有問題,比如沒開中斷或中斷函數(shù)出錯等,
如果有很多字節(jié)的數(shù)據(jù),那就要對著ASCII碼表分析數(shù)據(jù)了,波特率不對或中
斷函數(shù)有問題沒有按順序發(fā)送數(shù)據(jù)等。
回復

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 91色在线| 一区二区三区回区在观看免费视频 | 不卡一二三区 | 婷婷毛片| 日本在线播放一区二区 | 日韩精品一区二区三区四区 | 欧美黑人一区二区三区 | 亚洲一区二区中文字幕 | 国产精品夜夜夜一区二区三区尤 | www国产成人免费观看视频 | 久久成人精品视频 | 欧美xxxx在线 | 美女天堂 | 亚洲一区二区三区视频在线 | 亚洲欧美视频一区 | 国产乱码精品一区二区三区五月婷 | 一级在线观看 | 亚洲国产一区二区在线 | 国产农村妇女毛片精品久久麻豆 | 四虎影院新地址 | 免费看黄色国产 | 日韩欧美国产一区二区 | 久久国产精品-国产精品 | 人人草天天草 | 精品国产高清一区二区三区 | 日本成人福利视频 | 欧美成年黄网站色视频 | 久久久人成影片免费观看 | 免费黄色大片 | 免费在线观看一区二区 | 午夜网 | 成人黄色网址大全 | 天天拍天天射 | 国产一区二区三区久久久久久久久 | 国产日韩欧美一区 | 亚洲美女在线视频 | 日韩第一页| 欧美精品久久久 | 成人免费视频观看 | 综合久久av | 国产特级毛片aaaaaa |