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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)