1、 DHT21与C8051F020的连接方式
如图5所示为C8051F020与DHT21的通信形式按单总线方式连接,即它们之间读时钟信号与传送数据都在DATA单根信号信号线上完成。当传感器与单片机的连接距离在20m范围内时,需要并接5KW电阻,超过20m距离则根据实际情况选择不同的电阻值。单片机每次对DHT21的读取与写入操作时间不宜超过5毫秒,否则容易丢失数据。
2、读DHT21时序
C8051F020与DHT21之间的数据传输操作是双向的,在本设计中规定每次传送时间为5ms。每次发送的数据格式为40bit,且地址高位先被传送,按从高到低的顺序,40bit数据内容为:(8bit湿度整数值.8bit湿度小数值)+(8bit温度整数值.8bit温度小数值)+8bit校验值。校验值是8bit湿度整数值、8bit湿度小数值、8bit温度整数值、8bit温度小数值这四个8bit数值之和的末8位值,用来校验数据传送是否正确。在试验中也验证过这样的数据格式,当系统显示出65.2%RH和35.1℃时,我们可以在keil环境里查看到存储DHT21温湿度数据值的寄存器内容为:0000 0010 1000 1100 0000 0001 0101 1111。如果温度低于0℃时,16bit温度数据的位会置1。
如图6所示,空闲状态时总线为高电平,需要读取DHT21的测量数据时,C8051F020拉低总线至少500s以上的低电平,表示主机发出开始信号,延时20~40s后主机开始从总线读取DHT21的响应信号,如果读取响应信号为高电平,说明DHT 11没有响应这时需要检查线路是否连接正常。如果检测到的是低电平则说明DHT21正常发送了响应信号。假设传感器良好,此时DHT21应该从低功耗模式转换到高速模式,检测到总线上的开始信号时,等待20~40s延时结束后,发送80s低电平的响应信号。
DHT21发送完响应信号后,将总线拉高80ms,准备发送数据。每一位数据都以50ms低电平时隙开始,以高电平的时长来区分数据位是0或1,26~28ms的高电平表示0,70ms的高电平表示1。当最后一位数据传送完毕后,DHT21拉低总线50ms,随后总线由上拉电阻拉高进入空闲状态。图7为读“0”与“1’的时序图。
//www.auto-fm.com