在DHT11实验中下面的代码不是很能理解,比如注释//DHT11会拉低40~80us这一行,此时是计算DHT11_DQ_IN被拉低的时间,也就是DHT11_DQ_IN=0时循环,但是
while (DHT11_DQ_IN&&retry<100)在DHT11_DQ_IN=0时直接就跳出来了啊,根本起不到循环计数作用啊,下面拉高的也是一个情况,求原子哥指教
等待DHT11的回应
//返回1:未检测到DHT11的存在
//返回0:存在
u8 DHT11_Check(void)
{
u8 retry=0;
DHT11_IO_IN();//SET INPUT
//return 0;
while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
{
retry++;
delay_us(1);
};
if(retry>=100)return 1; //DQ变为 0 时跳出循环
else retry=0;
while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us
{
retry++;
delay_us(1); //返回1:未检测到DHT11的存在
}; //返回1:未检测到DHT11的存在
if(retry>=100)return 1; //返回1:未检测到DHT11的存在
return 0; //返回1:未检测到DHT11的存在
}
|