找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2143|回复: 7
收起左侧

求助单片机DS18B20程序一个简单小问题,就是下文中这个200是根据什么来的

[复制链接]
ID:799865 发表于 2020-7-8 17:02 | 显示全部楼层 |阅读模式
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
}

回复

使用道具 举报

ID:584814 发表于 2020-7-9 10:05 | 显示全部楼层
应该是根据手册时序来的经验值,时间太长会影响其他事务,时间太短难达目标。
回复

使用道具 举报

ID:608600 发表于 2020-7-9 11:55 | 显示全部楼层
应该是数据手册中的一个经过测试得来的数值
回复

使用道具 举报

ID:213173 发表于 2020-7-9 12:49 | 显示全部楼层
此200是延时等待时间的经验数据,多一点少一点无所谓,差多了就会量变转质变。
回复

使用道具 举报

ID:207421 发表于 2020-7-9 12:52 | 显示全部楼层
只能说是个人测试之后的经验值,可能你的环境也不合适,需要微调
回复

使用道具 举报

ID:282850 发表于 2020-7-9 16:37 | 显示全部楼层
200是判断正常状态DS拉低DQ最大时间,200us多。一般几十us就返回应答信号。
回复

使用道具 举报

ID:799404 发表于 2020-7-9 16:55 | 显示全部楼层
等待IO口拉低的一个超时处理吧,不一定200,理论上这个值只要大于正常响应的最大延迟就好了,保险起见留一些余量。等待太长也不合适,影响效率。假如你去约会被放了鸽子,那可能你等上三天三夜也没用,还耽误正常的吃饭睡觉
回复

使用道具 举报

ID:799865 发表于 2020-7-9 17:48 | 显示全部楼层
wjianing 发表于 2020-7-9 16:55
等待IO口拉低的一个超时处理吧,不一定200,理论上这个值只要大于正常响应的最大延迟就好了,保险起见留一 ...

啊哈,知道了,谢谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表