找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2628|回复: 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
}

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

使用道具 举报

板凳
ID:608600 发表于 2020-7-9 11:55 | 只看该作者
应该是数据手册中的一个经过测试得来的数值
回复

使用道具 举报

地板
ID:213173 发表于 2020-7-9 12:49 | 只看该作者
此200是延时等待时间的经验数据,多一点少一点无所谓,差多了就会量变转质变。
回复

使用道具 举报

5#
ID:207421 发表于 2020-7-9 12:52 | 只看该作者
只能说是个人测试之后的经验值,可能你的环境也不合适,需要微调
回复

使用道具 举报

6#
ID:282850 发表于 2020-7-9 16:37 | 只看该作者
200是判断正常状态DS拉低DQ最大时间,200us多。一般几十us就返回应答信号。
回复

使用道具 举报

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

使用道具 举报

8#
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 单片机教程网

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