关于stm32F4 - dht11时序问题

2019-07-20 10:11发布

大神们,请教一个问题,关于dht11的读每一位的过程,时序图上是开始位12-14us的低电平,之后是数据位
0表示是26-28us的高电平
1表示是116-118的高电平
但是代码上的实现不有点不懂。
V5777TD%7U]~}S[FE{OW1VD.png


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,那么现在一定还是高电平
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。