标题: 求助单片机DS18B20程序一个简单小问题,就是下文中这个200是根据什么来的 [打印本页]

作者: 大家一起变好玩    时间: 2020-7-8 17:02
标题: 求助单片机DS18B20程序一个简单小问题,就是下文中这个200是根据什么来的
u8 DS18B20_Check(void)            
{   
        u8 retry=0;
        DS18B20_IO_IN();//IO口配置为输入,目的是为了接收DS18B20发过来的数据         
    while (DS18B20_DQ_IN&&retry<200)//如果IO口是低电平,则是正常的,否则一直进while循环
        {
                retry++;
                delay_us(1);
        };         
        if(retry>=200)
        {//通讯有误,返回1
                return 1;
        }
        else
        {//正常
                retry=0;
        }
    while (!DS18B20_DQ_IN&&retry<240)//继续读取电平,如果IO口是高电平,则是正常的
        {
                retry++;
                delay_us(1);
        };
        if(retry>=240)
        {//通讯有误,返回1
                return 1;
        }            
        return 0;//通讯正常,返回0
}


作者: man1234567    时间: 2020-7-9 10:05
应该是根据手册时序来的经验值,时间太长会影响其他事务,时间太短难达目标。
作者: 小黑的大表舅    时间: 2020-7-9 11:55
应该是数据手册中的一个经过测试得来的数值
作者: wulin    时间: 2020-7-9 12:49
此200是延时等待时间的经验数据,多一点少一点无所谓,差多了就会量变转质变。
作者: lwh999995    时间: 2020-7-9 12:52
只能说是个人测试之后的经验值,可能你的环境也不合适,需要微调
作者: f556    时间: 2020-7-9 16:37
200是判断正常状态DS拉低DQ最大时间,200us多。一般几十us就返回应答信号。
作者: wjianing    时间: 2020-7-9 16:55
等待IO口拉低的一个超时处理吧,不一定200,理论上这个值只要大于正常响应的最大延迟就好了,保险起见留一些余量。等待太长也不合适,影响效率。假如你去约会被放了鸽子,那可能你等上三天三夜也没用,还耽误正常的吃饭睡觉
作者: 大家一起变好玩    时间: 2020-7-9 17:48
wjianing 发表于 2020-7-9 16:55
等待IO口拉低的一个超时处理吧,不一定200,理论上这个值只要大于正常响应的最大延迟就好了,保险起见留一 ...

啊哈,知道了,谢谢




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1