我是靠谱客的博主 含糊宝贝,最近开发中收集的这篇文章主要介绍DHT11温湿度传感器,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

1、封装信息

2、DHT11通讯总介

❶微处理器与DHT 11之间的通讯和同步, 采用单总线数据格式,一次通讯时间4ms左右,数据分小数部分和整数部分。一次完整的数据传输为40bit, 高位先出。

❷数据格式:8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和

❸数据传送正确时, 校验和数据等于“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据”所得结果的末8位。

3、DHT11唤醒工作和睡眠

❶DHT 11在没有主机唤醒的时候处于低功耗模式。

❷当需要使用的时候, MCU发送一次开始信号, DHT 11从低功耗模式转换到高速模式, 等待主机开始信号结束后, DHT 11发送响应信号, 送出40bit的数据, 并触发一次信号采集。

❸如果没有接收到主机发送开始信号, DHT 11不会主动进行温湿度采集.采集数据后转换到低速模式。

4、DHT11通讯过程

❶总线在空闲的时候为高电平

❷主机把总线拉低等待DHT 11的响应。拉低的时间必须大于18毫秒, 保证DHT 11能检测到起始信号。

❸DHT 11接收到主机的开始信号后, 等待主机开始信号结束,然后发送80us低电平响应信号。

❹主机发送开始信号结束后, 延时等待20-40us后, 读取DHT 11的响应信号。(主机发送开始信号后,可以切换到输入模式,或者输出高电平均可)

❺当最后一bit数据传送完毕后, DHT 11拉低总线50us, 随后总线由上拉电阻拉高进入空闲状态。

5、DHT11通讯时序图

❶总时序图

❷主机呼叫和DHT11回应

❸信号0表示方式

❸信号1表示方式

6、参考代码

 void COM(void)
      {    
         U8 i;
       for(i=0;i<8;i++)    
     {
         U8FLAG=2;
    //----------------------
          P2_1=0 ; //T
          P2_1=1 ; //T
     //---------------------- 
    while((!P2_0)&&U8FLAG++);
    Delay_10us();
    Delay_10us();
   // Delay_10us();
      U8temp=0;
      if(P2_0)U8temp=1;
      U8FLAG=2;
   while((P2_0)&&U8FLAG++);
   
     //----------------------
           P2_1=0 ; //T
           P2_1=1 ; //T
    //----------------------
    //超时则跳出for循环    
    if(U8FLAG==1)break;
    //判断数据位是0还是1 
   // 如果高电平高过预定0高电平值则数据位为 1     
     U8comdata<<=1;
        U8comdata|=U8temp;        //0
      }//rof
    
}








void RH(void)
{
   //主机拉低18ms 
       P2_0=0;
    Delay(180);
    P2_0=1;
//总线由上拉电阻拉高 主机延时20us
    Delay_10us();
    Delay_10us();
    Delay_10us();
    Delay_10us();
//主机设为输入 判断从机响应信号 
    P2_0=1;
//判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行   
    if(!P2_0)   //T !   
    {
    U8FLAG=2;
//判断从机是否发出 80us 的低电平响应信号是否结束 
    while((!P2_0)&&U8FLAG++);
    U8FLAG=2;
//判断从机是否发出 80us 的高电平,如发出则进入数据接收状态
    while((P2_0)&&U8FLAG++);
//数据接收状态   
    COM();
    U8RH_data_H_temp=U8comdata;
    COM();
    U8RH_data_L_temp=U8comdata;
    COM();
    U8T_data_H_temp=U8comdata;
    COM();
    U8T_data_L_temp=U8comdata;
    COM();
    U8checkdata_temp=U8comdata;
    P2_0=1;
//数据校验 
    U8temp=(U8T_data_H_temp+U8T_data_L_temp+U8RH_data_H_temp+U8RH_data_L_temp);
    if(U8temp==U8checkdata_temp)
    {
       U8RH_data_H=U8RH_data_H_temp;
       U8RH_data_L=U8RH_data_L_temp;
    U8T_data_H=U8T_data_H_temp;
       U8T_data_L=U8T_data_L_temp;
       U8checkdata=U8checkdata_temp;
    }//fi
    }//fi

最后

以上就是含糊宝贝为你收集整理的DHT11温湿度传感器的全部内容,希望文章能够帮你解决DHT11温湿度传感器所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(40)

评论列表共有 0 条评论

立即
投稿
返回
顶部