网站大量收购独家精品文档,联系QQ:2885784924

DHT11编程全解读.pdf

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DHT11编程全解读

DHT11 编程全解读 一、DHT11 数据格式(40bit) 数据格式: 8bit 湿度整数数据+8bit 湿度小数数据 +8bi 温度整数数据+8bit 温度小数数据 +8bit 校验和 说明:1)、其中温度湿度小数部分带扩展,目前读出数据为0;2 )、校验和数据等于“8bit 湿度整数数据+8bit 湿度小数数据+8bi 温度整数数据+8bit 温度小数数据”所得结果的末8 位。 二、时序编程 微处理器与DHT11 之间的通讯和同步,采用单总线数据格式,一次通讯时间4ms 左右。 DHT11 的单总线编程相对于DS18B20 的单总线编程简单很多,本文分析的DHT11 编程所 需要的条件是一个精度在+_5% 的50us 延时函数。 1、起始信号部分编程 1)、起始部分时序图如下 2 )、时序说明:①、控制器首先至少拉低18ms,然后拉高20-40us 后等待DHT11 的应答 ②、当DHT11 检测到信号后,首先将总线拉低约80us 然后在拉高80us 作 为应答信号。 3 )、程序代码: DHT11_DATA=0; //拉低至少18ms Hal_WaitUs (28000); DHT11_DATA=1; //拉高20us-40us Hal_WaitUs (50); if (!DHT11_DATA) //判断从机是否低电平应答 { while (!DHT11_DATA); while (DHT11_DATA); a=Read_Byte (); b=Read_Byte (); c=Read_Byte (); d=Read_Byte (); } 4 )、代码说明: 首先主机拉低总线,这里拉低了28ms ,然后拉高总线50us,由时序图可以知道若拉高 50us 后有从机应答,那么当主机释放总先后应该被 DHT11 拉低,if 判断语句判断是否有 DHT11 应答,若有应答向下执行读取数据。 2 、数据读取部分编程 1)、数据读取部分时序图如下 DHT11 通信时序 DHT11 0 信号时序图 DHT11 1 信号时序图 2 )、时序说明:①、DHT11 以低电平应答主机,然后拉高总线准备输出。输出0 信号和 1 信号都是以低电平开始高电平结束。 ②、DHT11 输出0、1 信号的低电平时间相同,而高电平的时间不同,输出 0 信号时高电平约26-28us,而当输出1 信号时高电平约为70us 。 3 )、程序代码(读取8bit): uchar Read_Byte (void) { uchar i,in_data,k; for(i=0;i8;i++) //读取8bit { while (!DHT11_DATA);// “渡过”数据起始位低电平 //延时50ms 后检测电平 Hal_WaitUs (50); k=DHT11_DATA; //读数据 if (k==1) //读到的数据是1 { in_data=in_data|0x01; while (DHT11_DATA); } else { in_data=in_data|0x00; } in_data=in_data1; //循环左移1 位 } return in_data; } 4 )、代码说明: 首先主机拉低总线,这里拉低了28ms ,然后拉高总线50us,由时序图可以知道若拉高 50us 后有从机应答,那么当主机释放总先后应该被DHT11 拉低,if 判断语句判断是否有 DHT11 应答,若有应答向下执行读取数据。其中下面两句代码w

文档评论(0)

mhk8089 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档