标题: 求助单片机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
啊哈,知道了,谢谢
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |