找回密码
 注册
关于网站域名变更的通知
查看: 790|回复: 6
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2019-3-28 14:09 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
关于DS18B20单总线如何区分时钟还是数据和uint延时问题
' {4 H% E$ y5 e& p9 e5 d) i" L1 f( E( p3 c# E. I1 k3 f

* n) p) {7 U  k我用的是普中科技的实验程序 先声明一下..) \3 J% H6 V5 X9 i0 j" M
接下来是读字节循环里的一部分我给提出来了
. z: e8 F; T- l! r% U7 e
5 M+ [+ f" x  V其中DSPORT是传感器管脚
, t; W) V4 h; x  g/ P+ f0 C) YDSPORT = 0;
' g' v6 ]( |3 GDSPORT = 1;
* h9 s) h( g6 G' z+ f1 k1 ?i++;
% y2 \7 u- {# L" K" {8 ~i++;//延时6us等待数据稳定
6 c2 v: J# H' p3 dbi = DSPORT;         //读取数据,从最低位开始读取- D$ L4 k. s4 ?

# M  V, X2 W6 W$ r1 h
: U5 X0 v, w& z! h) A3 l/ E% }" J) t/ C先拉低 再拉高 读数据. 可是这和IIC不一样。前几天看得IIC有SDA和SCL两根线9 M9 _% V! V3 R7 d( M
但是这个只有一个根线..它是咋识别的 是说如果赋值的话就是数据内容 被赋值0 Y9 w" a5 k5 b" w7 Q; y8 Y
就改变的是时钟??  * u2 V* S+ T7 }' a
另一个问题是
& k6 ~# _& X$ i, L, |0 ?- Y+ J比如我现在有一个 uint i;
2 m8 X! ?7 g' A1 ^我执行while(i--);
2 [7 I* S$ |7 u/ N$ ~我进行调试发现它每次需要花9us才执行一次i--
, L; B- s* N8 W; s. W就算是算上判断 我感觉还是很多啊; ^& `- T" o1 h& U) j! x  U
因为一个指令周期不应该是1-4us么?
# L* j0 H! B3 v. H/ V1 F而且这种不应该是比较低级的么... 还是有什么别的因素?# L1 f" e5 H0 X" [. p
晶振就是普通的12M..
: |; O; |5 ^1 n% G5 L2 l1 ]求教..谢谢大家。
! r6 W* o- d& y" [4 B6 w

该用户从未签到

2#
发表于 2019-3-28 14:18 | 只看该作者
这个看你单片机的性能了,有的1T的,有的不是

该用户从未签到

3#
发表于 2019-3-28 14:24 | 只看该作者
如果你要精确的计算时间的话你要去看汇编代码,因为我们的代码都会转换为汇编,然而汇编是对寄存器的操作,我们不知道它是如何通过汇编来实现while(i--)这个操作的。

该用户从未签到

4#
发表于 2019-3-28 14:34 | 只看该作者
DS18B20是单总线,是一种与IIC不同的总线方式,是两个不同规范的总线协议。
& _* \. L  l/ a. Q# }# d指令周期会根据数据类型的不同而消耗不同的执行时间,uint是16位数据,如果是8位单片机的话,需要进行两次减法运算,才算完成一次16位数的减法,而用uchar的话,8位数据,只需要做一次减法运算就可以了。
# y  O# N" ~+ F. s5 ?6 R你可以试试再定义一个uchar,对比一下两种数据类型的运行时间。

点评

我当时自己试的时候的确是uchar快很多.原来是这样 thanks  详情 回复 发表于 2019-3-28 14:40

该用户从未签到

5#
 楼主| 发表于 2019-3-28 14:40 | 只看该作者
relchhiclty 发表于 2019-3-28 14:34  v  A( K( C5 g$ v$ v. E- _) B
DS18B20是单总线,是一种与IIC不同的总线方式,是两个不同规范的总线协议。
% u% y. [$ t9 ~  v指令周期会根据数据类型的不同 ...

1 E' r8 X0 ?5 f. }1 q我当时自己试的时候的确是uchar快很多.原来是这样 thanks; N) B0 V. \& B2 i

该用户从未签到

6#
发表于 2019-3-28 14:47 | 只看该作者
DS18B20是单总线通讯器件。单总线不需要时钟线
: D+ G+ V9 C5 Z它的同步方式是这样的,主机拉低总线并释放,从机接手总线,开始发送数据,数据以低电平+高电平组成一个位,低电平的持续时间判断是位1还是位0。
% _1 f1 Z5 r. l6 ^$ g指令执行速度的问题,得看那句C语言被编译器编译出几句汇编语句。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-23 13:37 , Processed in 0.125000 second(s), 27 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

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