微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于DS18B20单总线如何区分时钟还是数据和uint延时问题

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

时间:10-02 整理:3721RD 点击:
我用的是普中科技的实验程序 先声明一下..
接下来是读字节循环里的一部分我给提出来了
其中DSPORT是传感器管脚
DSPORT = 0;
DSPORT = 1;
i++;
i++;//延时6us等待数据稳定
bi = DSPORT;         //读取数据,从最低位开始读取

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

DS18B20是单总线,是一种与IIC不同的总线方式,是两个不同规范的总线协议。
指令周期会根据数据类型的不同而消耗不同的执行时间,uint是16位数据,如果是8位单片机的话,需要进行两次减法运算,才算完成一次16位数的减法,而用uchar的话,8位数据,只需要做一次减法运算就可以了。
你可以试试再定义一个uchar,对比一下两种数据类型的运行时间。

这个看你单片机的性能了,有的1T的,有的不是

如果你要精确的计算时间的话你要去看汇编代码,因为我们的代码都会转换为汇编,然而汇编是对寄存器的操作,我们不知道它是如何通过汇编来实现while(i--)这个操作的。

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

DS18B20是单总线通讯器件。单总线不需要时钟线
它的同步方式是这样的,主机拉低总线并释放,从机接手总线,开始发送数据,数据以低电平+高电平组成一个位,低电平的持续时间判断是位1还是位0。
指令执行速度的问题,得看那句C语言被编译器编译出几句汇编语句。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top