1. 读取一个Bit
首先我们看图
- DHT11初始化 (看图)
根据图片可以看出低电平需要18微秒以上的延时时间
- 拉高数据线
-
DHT11_Pin =1;
- 拉低数据线
DHT11_Pin =0;
-
Delay22um(); //低电平需要持续至少18毫秒
- 再次拉高数据线
DHT11_Pin =0;
-
DHT11检测应答
- DHT11的DATA引脚检测到外部信号有低电平时,等待外部信号低电平结束,会输出83微秒的低电平作为应答信号,紧接着输出87微秒的高电平通知外设准备接收数据
- 判断DHT11是否反应
-
-
if(!DHT11_Pin) //如果DHT11检测到数据该引脚会变成低电平 { while(!DHT11_Pin); //跳过剩余的低电平 while(DHT11_Pin); //以及DHT11发出微秒的高电平 return 1; //开始传输数据 } return 0; //检测不到低电平说明DHT11未发出作答信号 初始化失败
-
- 下面就是等待从机相应信号也就是发送0或者1(个人理解的不对欢迎指正)
- 位数据“0”的格式为:54微秒的低电平和23-27微秒的高电平
- 位数据“1”的格式为:54微秒的低电平加68-74微秒的高电平
- 最好就是把位数据整理成字节数据了非常简单