找回密码
 立即注册

QQ登录

只需一步,快速开始

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

求助DHT11相关问题

[复制链接]
跳转到指定楼层
楼主
最近在用DHT11测量温湿度的时候遇到了一些问题,查询相关资料需要在DHT11的数据口加上拉电阻,但是在仿真和实物中加上拉电阻DHT11读数不正常,不加上拉电阻反而能使用,看仿真好像是数据口不能正常下拉。
相关代码如下:
//DHT11相关函数
/*******************************************************************************
* 函 数 名   : rev_byte
* 函数功能  : DHT11接受字节
* 输    入    : 无
* 输    出    : rev_data
*******************************************************************************/
unsigned char  rev_byte( )        
{            
           unsigned char i,temp,rev_data=0;                  
       for(i=0;i<8;i++)           
            {                 
                    while(dat==0); //等待50us的低电平
                        Delay_10us();  //延时30us
                  Delay_10us();
                        Delay_10us();
                        temp=0;
                          if(dat==1)        //判断数据为0或1
                    temp=1;
                    while(dat==1); //等待1的高电平结束                    
                  rev_data<<=1;
                     rev_data|=temp;        
             }
                 return rev_data;           
        }

/*******************************************************************************
* 函 数 名       : RH
* 函数功能                   : DHT11读取
* 输    入       : *rh、*tem
* 输    出             : 无
*******************************************************************************/        
void RH(unsigned char *rh,unsigned char *tem)
{
        unsigned char rh_h,rh_l,tem_h,tem_l,rh_ht,rh_lt,tem_ht,tem_lt,check;
        dat=0; //拉低18ms
        dht_Delay(180);                                                           
        dat=1; //总线由上拉电阻拉高延时20us以上         
        Delay_10us();
        Delay_10us();
        Delay_10us();
        Delay_10us();
        dat=1;           //dat引脚设为读状态
        if(dat==0)         //判断是否有低电平响应信号                  
        {
           while(dat==0); //等待 80us 的低电平响应信号         
           while(dat==1);          //等待80us的高电平响应        
           rh_ht=rev_byte();                 //接收湿度高8位        
           rh_lt=rev_byte();                 //湿度低8位
           tem_ht=rev_byte();          //温度高8位
           tem_lt=rev_byte();         //温度低8位
           check=rev_byte();
           dat=1;         
           if(rh_ht+rh_lt+tem_ht+tem_lt==check) //数据校验
           {        
             rh_h=rh_ht;
                 rh_l=rh_lt;
                 tem_h=tem_ht;
                 tem_l=tem_lt;
                 *rh=rh_h;
                 *tem=tem_h;                     
           }
        }

}

f1340a3b-863a-4124-8f5c-0b4f75221f23.png (42.26 KB, 下载次数: 0)

不加上拉电阻

不加上拉电阻

e4084451-800e-4b8a-bb7a-8384e1445163.png (44.52 KB, 下载次数: 0)

加上上拉电阻

加上上拉电阻

8a82c04a-b37a-4641-ae9e-a0d9d164aa2e.png (10.64 KB, 下载次数: 0)

数据口不能正常下拉

数据口不能正常下拉
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:469589 发表于 2025-5-5 09:24 | 只看该作者
说明在仿真中:你的“端口”没有驱动能力,上拉换成10K以上试试。
回复

使用道具 举报

板凳
ID:1145127 发表于 2025-5-5 14:27 | 只看该作者
GlenXu 发表于 2025-5-5 09:24
说明在仿真中:你的“端口”没有驱动能力,上拉换成10K以上试试。

试了下12k,可以驱动了,请问这是为什么呢
回复

使用道具 举报

地板
ID:469589 发表于 2025-5-6 12:59 | 只看该作者
是因为一般驱动能力都没你想象的大!
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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