//等待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) 要换一下,哪位高手给解释一下,谢谢
怎么靠感觉呢?看具体的时序是怎样,就是怎样的。 本帖最后由 academic 于 2015-9-29 13:03 编辑
这个需要看器件的数据手册,根据时序,看看是应该先检测哪种电平信号。
你可以试着换换,看还能正常工作不。。
专业电子方案/zigbee方案设计,毕业设计。QQ:1397905781
这个还是要看时序,应该不用换。在做DHT11一致的时候注意将IO口的工作模式 要使用开漏pull up的,还有就是看看delayus(1)软件延时准不准了。