[求助] 关于dht11的程序问题

zhaoxiao2   2015-9-28 20:54 楼主
//等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)           
{   
        u8 retry=0;
        DHT11_IO_IN();//SET INPUT         
    while (DHT11_DQ_IN&&retry<120)//DHT11会拉低80us
        {
                retry++;
                delay_us(1);
        };         
        if(retry>=120)return 1;
        else retry=0;
       
    while (!DHT11_DQ_IN&&retry<120)//DHT11拉低后会再次拉高80us
        {
                retry++;
                delay_us(1);
        };
        if(retry>=120)return 1;            
        return 0;
}

总感觉这两句while (DHT11_DQ_IN&&retry<100)与while (!DHT11_DQ_IN&&retry<100) 要换一下,哪位高手给解释一下,谢谢

回复评论 (6)

是否要换得根据时序来确定。
我的博客
点赞  2015-9-29 12:11
怎么靠感觉呢?看具体的时序是怎样,就是怎样的。 本帖最后由 academic 于 2015-9-29 13:03 编辑
点赞  2015-9-29 12:18
这个需要看器件的数据手册,根据时序,看看是应该先检测哪种电平信号。
点赞  2015-9-29 20:22
你可以试着换换,看还能正常工作不。。
专业电子方案/zigbee方案设计,毕业设计。QQ:1397905781
点赞  2015-9-30 09:36
这个还是要看时序,应该不用换。在做DHT11一致的时候注意将IO口的工作模式 要使用开漏pull up的,还有就是看看delayus(1)软件延时准不准了。 Image 1.png
点赞  2015-10-4 16:30
不错
点赞  2015-10-9 12:10
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复