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

標題: 用51單片機串口打印DHT11溫濕度數據顯示亂碼 [打印本頁]

作者: LEVKAY    時間: 2025-3-2 12:54
標題: 用51單片機串口打印DHT11溫濕度數據顯示亂碼
芯片是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;   //定義數據線
  6. uchar rec_dat[9];   //用于顯示的接收數據數組

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

  40. void DHT11_receive()      //接收40位的數據
  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);    //結束

  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.         /*數據處理,方便顯示*/
  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函數TI要先置1
  91.          ES=0;
  92.          for(i=0 ;i<13 ;i++)        //修改輸出的字符數量
  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以越過不穩定狀態在此期間不能發送任何指令
  102.        DHT11_receive();
  103.            ES=0;
  104.            for(i=0 ;i<9 ;i++)        //修改輸出的字符數量
  105.            {
  106.           SBUF=rec_dat[i];
  107.           while(!TI);
  108.           TI=0;
  109.           }
  110.                                  
  111.          for(i=0 ;i<13 ;i++)        //修改輸出的字符數量
  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, 下載次數: 0)

Keil界面

Keil界面

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

實物接線

實物接線

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

串口助手

串口助手

csdn3.zip

24.92 KB, 下載次數: 0

壓縮包里是所有代碼文件


作者: npn    時間: 2025-3-3 08:28
樓主把串口中斷打開了,串口中斷的入口函數去哪了?
另外把 intrins.h 等Keil自帶的頭文件貼出來沒有任何意義,這個指令在Keil內部。
作者: zpwgf    時間: 2025-3-3 09:06
你講仿真調試平臺軟件串口波特率設置為9600試一試呢?是不是波特率兩邊不一致導致的
作者: qinlu123    時間: 2025-3-3 09:57
你第一次使用串口嗎,之前有沒有串口發送正常的程序
作者: LEVKAY    時間: 2025-3-3 21:25
qinlu123 發表于 2025-3-3 09:57
你第一次使用串口嗎,之前有沒有串口發送正常的程序

之前有用過串口

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

串口.png

作者: LEVKAY    時間: 2025-3-3 21:27
zpwgf 發表于 2025-3-3 09:06
你講仿真調試平臺軟件串口波特率設置為9600試一試呢?是不是波特率兩邊不一致導致的

看“打開串口”右上角波特率那里我調的就是9600
作者: LEVKAY    時間: 2025-3-3 21:48
npn 發表于 2025-3-3 08:28
樓主把串口中斷打開了,串口中斷的入口函數去哪了?
另外把 intrins.h 等Keil自帶的頭文件貼出來沒有任何意 ...

沒有串口中斷的入口函數,應該沒有關系吧,我把串口中斷關閉了以后也是這樣。
作者: qinlu123    時間: 2025-3-4 07:48
LEVKAY 發表于 2025-3-3 21:25
之前有用過串口

你為什么不把你好用的串口程序和DHT11讀取程序結合一下試試呢
作者: qinlu123    時間: 2025-3-4 07:58
LEVKAY 發表于 2025-3-3 21:25
之前有用過串口

你抄的這個程序PCON寄存器沒有設置啊
作者: 明日之星8    時間: 2025-3-4 09:16
用Hex模式看看接收到的是啥數據,再分析。
如果只有一個字節,說明串口中斷有問題,比如沒開中斷或中斷函數出錯等,
如果有很多字節的數據,那就要對著ASCII碼表分析數據了,波特率不對或中
斷函數有問題沒有按順序發送數據等。




歡迎光臨 (http://www.zg4o1577.cn/bbs/) Powered by Discuz! X3.1
主站蜘蛛池模板: 91一区二区三区在线观看 | 乳色吐息在线观看 | 色婷婷综合久久久中字幕精品久久 | www.夜夜骑| 亚洲精品一区二区 | 91免费观看国产 | 尤物在线精品视频 | 羞羞涩涩在线观看 | 98久久| 奇米av | 国产精品久久一区 | 日韩国产一区二区三区 | 亚洲 成人 在线 | 精品成人免费视频 | 亚洲国产成人av好男人在线观看 | 一道本不卡 | 国产精品一区二区久久 | 一区二区三区四区毛片 | 亚洲国产精品精华素 | 99在线观看视频 | 男人天堂视频在线观看 | 影视先锋av资源噜噜 | 亚洲品质自拍视频 | 毛片一级黄色 | 一区 | 亚洲风情在线观看 | 欧美综合久久久 | 精品亚洲一区二区三区 | 一区在线视频 | 国产精品视频观看 | 国产精品视频网站 | 毛片一区二区三区 | 91人人看 | 国产黄色免费网站 | 久草成人网| 男人的天堂中文字幕 | 91亚洲国产亚洲国产 | 日本黄色影片在线观看 | 亚洲国产精品一区二区第一页 | 亚洲精品一区二区三区蜜桃久 | 国产乱肥老妇国产一区二 |