dht11实验问题

2019-10-14 21:11发布

u8 DHT11_Check(void)           
{   
        u8 retry=0;
        DHT11_IO_IN();//SET INPUT         
    while (DHT11_DQ_IN&&retry<100)//DHT11会拉低40~80us
        {
                retry++;
                delay_us(1);
        };         
        if(retry>=100)return 1;
        else retry=0;
    while (!DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高40~80us
        {
                retry++;
                delay_us(1);
        };
        if(retry>=100)return 1;            
        return 0;
}


想问一下这里的 while (DHT11_DQ_IN&&retry<100)只是用于检测有没有低电平的到来吧,应该没有办法来计算这里的低电平的延时时间在40—-80us之间吧?
同时  while (!DHT11_DQ_IN&&retry<100)这里如果有低电平进入这个循环,可是挡高电平时间如果比40us小的话有该肿么办呢?

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
正点原子
1楼-- · 2019-10-14 23:39
第一个是等待低电平的到来,并不判断低电平有多长。第二个是等到高电平的到来,并不判断高电平有多长。  但是他们之间的关系,就是你说的这个时间范围。这里的等待时间,也就在这个范围内。 实际上这里就是等待一次拉低和变高
wangzx
2楼-- · 2019-10-15 01:51
DHT11说是40~80us的数据能够采集到,但是时间不一定准确,因为你运行代码的时候,每条语句都占用时间,我将DHT11改为am2320   按照历程上说也是40~80Us,但是通过打印看出只有30us   只要数据正常  大一点  或者小一点都没问题,程序上只是说大部分都在40~80
wangzx
3楼-- · 2019-10-15 01:51
你的目的只是收取正常数据就行了
heqicheng
4楼-- · 2019-10-15 02:36
 精彩回答 2  元偷偷看……
wangzx
5楼-- · 2019-10-15 03:51
其实你说错了    因为有上拉电阻  输出口的电平会随之升高  其实有低电平信号  才是正常的应答信号
2557046847
6楼-- · 2019-10-15 07:20
帮顶。。。。。。

一周热门 更多>