关于DS18B20单总线如何区分时钟还是数据和uint延时问题

2019-07-15 10:07发布

我用的是普中科技的实验程序 先声明一下..
接下来是读字节循环里的一部分我给提出来了

其中DSPORT是传感器管脚
DSPORT = 0;
DSPORT = 1;
i++;
i++;//延时6us等待数据稳定
bi = DSPORT;         //读取数据,从最低位开始读取


先拉低 再拉高 读数据. 可是这和IIC不一样。前几天看得IIC有SDA和SCL两根线
但是这个只有一个根线..它是咋识别的 是说如果赋值的话就是数据内容 被赋值
就改变的是时钟??  
另一个问题是
比如我现在有一个 uint i;
我执行while(i--);
我进行调试发现它每次需要花9us才执行一次i--
就算是算上判断 我感觉还是很多啊
因为一个指令周期不应该是1-4us么?
而且这种不应该是比较低级的么... 还是有什么别的因素?
晶振就是普通的12M..
求教..谢谢大家。



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
3条回答
moon548834
2019-07-15 19:25
人中狼 发表于 2017-7-24 19:23
DS18B20是单总线,是一种与IIC不同的总线方式,是两个不同规范的总线协议。
指令周期会根据数据类型的不同而消耗不同的执行时间,uint是16位数据,如果是8位单片机的话,需要进行两次减法运算,才算完成一次16位数的减法,而用uchar的话,8位数据,只需要做一次减法运算就可以了。
你可以试试再定义一个uchar,对比一下两种 ...

我当时自己试的时候的确是uchar快很多.原来是这样 thanks

一周热门 更多>