关于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条回答
莫有会
1楼-- · 2019-07-15 18:15
如果你要精确的计算时间的话你要去看汇编代码,因为我们的代码都会转换为汇编,然而汇编是对寄存器的操作,我们不知道它是如何通过汇编来实现while(i--)这个操作的。

评分

参与人数 1积分 +5 收起 理由 ElecFans王岑 + 5

查看全部评分

moon548834
2楼-- · 2019-07-15 19:25
人中狼 发表于 2017-7-24 19:23
DS18B20是单总线,是一种与IIC不同的总线方式,是两个不同规范的总线协议。
指令周期会根据数据类型的不同而消耗不同的执行时间,uint是16位数据,如果是8位单片机的话,需要进行两次减法运算,才算完成一次16位数的减法,而用uchar的话,8位数据,只需要做一次减法运算就可以了。
你可以试试再定义一个uchar,对比一下两种 ...

我当时自己试的时候的确是uchar快很多.原来是这样 thanks
he07413
3楼-- · 2019-07-15 20:39
DS18B20是单总线通讯器件。单总线不需要时钟线
它的同步方式是这样的,主机拉低总线并释放,从机接手总线,开始发送数据,数据以低电平+高电平组成一个位,低电平的持续时间判断是位1还是位0。
指令执行速度的问题,得看那句C语言被编译器编译出几句汇编语句。

评分

参与人数 1积分 +5 收起 理由 ElecFans王岑 + 5

查看全部评分

一周热门 更多>