找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2881|回复: 5
打印 上一主题 下一主题
收起左侧

求助:dht11时序问题--温湿度一直显示0的问题

[复制链接]
跳转到指定楼层
楼主
ID:997537 发表于 2022-5-26 13:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
按照时序图改了很多次,但是总是输出为0,有没有大神能够帮忙解答一下

dht11.c
  1. #include "STC8A.h"
  2. #include "time111.h"
  3. #include <string.h>
  4. #include "stdio.h"
  5. #include "dht111.h"

  6. sbit dht11=P0^3;
  7. sbit led=P2^0;
  8. sbit led1=P2^1;
  9. unsigned char s[5]=0;
  10. unsigned char rec[5]=0;


  11. void start()
  12. {
  13.         
  14.         dht11=1;
  15.         Delay1us();
  16.         Delay1us();
  17.         dht11=0;
  18.         Delay18ms();
  19.         dht11=1;
  20.         Delay30us();
  21.         //dht11=1;
  22.         while(!dht11)
  23.         {
  24.                 led=0;
  25.         }
  26. }

  27. unsigned char readbyte()
  28. {
  29.         unsigned char i,dat=0;
  30.         for(i=0;i<8;i++)    //从高到低依次接收8位数据
  31.    {         
  32.       while(!dht11);   //等待50us低电平过去
  33.       Delay50us();     //延时60us,如果还为高则数据为1,否则为0
  34.       dat<<=1;           //移位使正确接收8位数据,数据为0时直接移位
  35.       if(dht11==1)    //数据为1时,使dat加1来接收数据1
  36.          dat+=1;
  37.       while(dht11);  //等待数据线拉低   
  38.     }  
  39.          return dat;
  40. }

  41. void readall(unsigned char *rec)
  42. {

  43.         unsigned char R_H,R_L,T_H,T_L,RH,RL,TH,TL,revise;
  44.         start();
  45.         if(start==1)led1=0;
  46.         if(dht11==0)
  47.         {
  48.                 while(dht11==0);//等待拉高   
  49.                 Delay80us(); //拉高后延时80us
  50.                 R_H=readbyte();    //接收湿度高八位  
  51.     R_L=readbyte();    //接收湿度低八位  
  52.     T_H=readbyte();    //接收温度高八位  
  53.     T_L=readbyte();    //接收温度低八位
  54.     revise=readbyte(); //接收校正位

  55.     Delay25us();    //结束
  56.                 if((R_H+R_L+T_H+T_L)==revise)      //校正
  57.         {
  58.                                        
  59.             RH=R_H;
  60.             RL=R_L;
  61.             TH=T_H;
  62.             TL=T_L;
  63.                                         //led1=0;
  64.         }
  65.                         rec[0]=(RH)/10;
  66.       rec[1]=(RH)%10;        
  67.       rec[2]=(TH)/10;
  68.       rec[3]=(TH)%10;        
  69.                                        
  70.         }
  71.            

  72. }
复制代码
main.c
  1. #include "STC8A.h"
  2. #include <intrins.h>
  3. #include <string.h>
  4. #include "stdio.h"
  5. #include "Uart.h"
  6. #include "time111.h"
  7. #include "dht111.h"

  8. extern unsigned char s[5];

  9. sbit led1=P2^0;

  10. void main()
  11. {
  12.         
  13.         Uart1Init();
  14.         EA=1;//开启总中断


  15.         while(1)
  16.         {
  17.                 char send[2]={'O','k'};
  18.                 char dht11_data[4]=0;
  19.                 start();
  20.                
  21.     send_string(send);
  22.                
  23.                 readall(dht11_data);
  24.     sprintf(s,"%d",dht11_data);
  25.                 send_string(s);
  26.                 Delay2000ms();
  27.         }
  28. }
复制代码
dht11时序图



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:735831 发表于 2022-5-26 15:29 | 只看该作者
校验位不一定有效果可以试着屏蔽编译校验位检测看看结果,我之前调的时候也是校验位的问题。如果上述无效果的话,可能是延时问题,有示波器确定发出的时序的话会好确认很多,建议用stc isp自带的延时工具调整软件延时,还有,你这里显示是用数码管还是使用串口,走串口中断的话是会影响单片机本身软件的延时的,再试一试keil的仿真,看看延时是否符合时序?
回复

使用道具 举报

板凳
ID:887371 发表于 2022-5-28 16:58 | 只看该作者
hzhehe 发表于 2022-5-26 15:29
校验位不一定有效果可以试着屏蔽编译校验位检测看看结果,我之前调的时候也是校验位的问题。如果上述无效果 ...

校验通不过还是时序问题。
楼主应该找别人写的代码,参考他们的时序。附上正点原子的代码。 DHT11.rar (1.92 KB, 下载次数: 98)



我发现的坑:dht11的端口在读取前必须持续大于100m高电平,减小上拉电阻值会有改善些。假如dht11的端口不复用其它功能可忽略这个坑。
回复

使用道具 举报

地板
ID:735831 发表于 2022-5-30 11:38 | 只看该作者
datouyuan 发表于 2022-5-28 16:58
校验通不过还是时序问题。
楼主应该找别人写的代码,参考他们的时序。附上正点原子的代码。

谢谢大哥指点
回复

使用道具 举报

5#
ID:997537 发表于 2022-6-12 16:20 | 只看该作者
datouyuan 发表于 2022-5-28 16:58
校验通不过还是时序问题。
楼主应该找别人写的代码,参考他们的时序。附上正点原子的代码。

感谢大佬!
回复

使用道具 举报

6#
ID:997537 发表于 2022-6-12 16:21 | 只看该作者
hzhehe 发表于 2022-5-26 15:29
校验位不一定有效果可以试着屏蔽编译校验位检测看看结果,我之前调的时候也是校验位的问题。如果上述无效果 ...

嗯嗯校验位的我也检查了 最后还是时序的问题 感谢指点!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表