大神们,请教一个问题,关于dht11的读每一位的过程,时序图上是开始位12-14us的低电平,之后是数据位
0表示是26-28us的高电平
1表示是116-118的高电平
但是代码上的实现不有点不懂。
u8 DHT11_Read_Bit(void)
{
u8 retry=0;
while(DHT11_DQ_IN&&retry<100)//等待低电平
{
retry++;
delay_us(1);
}
retry=0;
while(!DHT11_DQ_IN&&retry<100)//等待高电平
{
retry++;
delay_us(1);
}
delay_us(40);//延时40us
if(DHT11_DQ_IN)return 1;
else return 0;
}
1.为什么要在100us内等待低电平的到来时?到了后呢,不是还要有12-14us的低电平时间吗
2.为什么要在100us内等待高电平的到来时?
3.为什么要延时40us,假设高电平来了,过了40us后,如果是数据位0,则40us后就是低电平。如果是数据为1,那么现在一定还是高电平
while(DHT11_DQ_IN&&retry<100)//等待低电平
{
retry++;
delay_us(1);
}
retry=0;
while(!DHT11_DQ_IN&&retry<100)//等待高电平
{
retry++;
delay_us(1);
}
这个是起始位,检测一个低电平后再检测一个高电平。
delay_us(40);//延时40us
这个是确定得到1还是0的超时检测。
if(DHT11_DQ_IN)return 1;
else return 0;
检测高低电平,如果高电平则说明1,如果低电平说明是0
一周热门 更多>