原创
已于 2024-09-23 09:40:07 修改
·
2.5k 阅读
已于 2024-09-23 09:40:07 修改
·
2.5k 阅读
·
2
·
33
·
CC 4.0 BY-SA版权
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

文章标签:
于 2023-02-20 14:31:34 首次发布
该文介绍了如何使用STC89C52RC微控制器通过串口与DHT22温湿度传感器进行通信。文中提供了接线方法、代码段,包括引脚定义、通信协议的时序对用代码,以及数据接收和校验的过程。实验中注意电源极性避免损坏设备,并建议在连接后进行复位操作。
一、基本参数
二、接线
| DHT22温湿度模块 | STC89C52RC |
|---|---|
| VCC | 5V |
| GND | GND |
| SDA | 串行数据,双向口 |
三、部分代码
引脚定义
sbit DHT22_DAT=P1^0;javascript
通信协议
时序对用代码
void DHT22_T_RH(void) { //主机拉低18ms DHT22_DAT=0; DelayMs(18); DHT22_DAT=1; //总线由上拉电阻拉高 主机延时20us Delay_10us(); Delay_10us(); Delay_10us(); Delay_10us(); //主机设为输入 判断从机响应信号 DHT22_DAT=1; //判断从机是否有低电平响应信号 如不响应则跳出,响应则向下运行 if(!DHT22_DAT) //T ! { Flag=2; //判断从机是否发出 80us 的低电平响应信号是否结束 while((!DHT22_DAT)&&Flag++); Flag=2; //判断从机是否发出 80us 的高电平,如发出则进入数据接收状态 while((DHT22_DAT)&&Flag++); //数据接收状态 DHT22_COM(); RH_data_H_temp=comdata; DHT22_COM(); RH_data_L_temp=comdata; DHT22_COM(); T_data_H_temp=comdata; DHT22_COM(); T_data_L_temp=comdata; DHT22_COM(); checkdata_temp=comdata; DHT22_DAT=1; //数据校验 temp=(T_data_H_temp+T_data_L_temp+RH_data_H_temp+RH_data_L_temp); if(temp==checkdata_temp) { RH_data_H=RH_data_H_temp; RH_data_L=RH_data_L_temp; T_data_H=T_data_H_temp; T_data_L=T_data_L_temp; U8checkdata=checkdata_temp; R_Date=RH_data_H_temp*256+RH_data_L_temp; T_Date=T_data_H_temp*256+T_data_L_temp; } } }javascript
四、实验现象
五、注意事项
1、VCC GND切勿接反 接反易烧
2、不断电接上模块后建议按键复位下