请教di18b20程序一些问题

2019-07-20 08:58发布

本帖最后由 wrta 于 2018-3-27 23:30 编辑

u8 DS18B20_Check(void)            
{   
        u8 retry=0;
        DS18B20_IO_IN();//SET PA0 INPUT         
    while (DS18B20_DQ_IN&&retry<200)
        {
                retry++;
                delay_us(1);
        };         
        if(retry>=200)return 1;
        else retry=0;
    while (!DS18B20_DQ_IN&&retry<240)
        {
                retry++;
                delay_us(1);
        };
        if(retry>=240)return 1;            
        return 0;
}

想问这里面的存在脉冲是60-240us,这里面为什么分出来200,如果跟存在脉冲没关系,那这个200是什么,延时吗?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
学习stm32f4
1楼-- · 2019-07-20 12:47
其实第一个while是等待DQ为零的。例如,若DQ一直为1,则等待200微秒后程序就返回1了。这避免了DQ不变成0时,程序死在第一个while时的情况。若在进入改函数时DQ就是0,就不会执行第一个while。
wrta
2楼-- · 2019-07-20 17:18
 精彩回答 2  元偷偷看……
学习stm32f4
3楼-- · 2019-07-20 17:24
wrta 发表于 2018-3-27 23:34
DS18B20_DQ_IN&&retry

<的优先级大于&&,先<再&&

一周热门 更多>