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

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

[复制链接]

该用户从未签到

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

EDA365欢迎您登录!

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

x
关于DS18B20单总线如何区分时钟还是数据和uint延时问题9 k0 E+ x7 X; _" s9 p
  I& v# B4 H8 G7 f

7 a$ t( i' k3 z8 f我用的是普中科技的实验程序 先声明一下..
: `. @2 t4 g4 R接下来是读字节循环里的一部分我给提出来了
% Q" R3 B) W# `' P! D4 ?- A& b1 Z# ?4 z+ G) Z3 B0 O& p2 i: m0 V
其中DSPORT是传感器管脚
' u) c! ]3 g- O) X4 y& M8 {DSPORT = 0;2 Z, k* x' K' P8 v) I# ^4 N) e
DSPORT = 1;
! J- p9 L* n2 B% |$ {+ D% n# Hi++;9 T2 m: a( i% h/ P- a. p
i++;//延时6us等待数据稳定/ @$ H! T, e9 i7 e5 n! y% `
bi = DSPORT;         //读取数据,从最低位开始读取7 o4 A& r" o  s# l. w& y

; F3 V' f7 w( f# O
5 A( b: h8 |, ~先拉低 再拉高 读数据. 可是这和IIC不一样。前几天看得IIC有SDA和SCL两根线7 q( m' g! _3 T% c( O% i
但是这个只有一个根线..它是咋识别的 是说如果赋值的话就是数据内容 被赋值
* ~1 m1 G; e. b7 _( g就改变的是时钟??  
0 ]* F8 V2 u8 |1 F5 P2 x另一个问题是 6 \& V4 Q/ t+ n+ o$ m: x! K; l
比如我现在有一个 uint i;
* r) i/ ^2 ^* r* Y我执行while(i--);
; k# Q, w2 l) K2 {我进行调试发现它每次需要花9us才执行一次i--8 {; x- M$ U& p0 Q; ]
就算是算上判断 我感觉还是很多啊
2 E% ~4 Y/ a) O5 z; p4 q因为一个指令周期不应该是1-4us么?; d$ B8 i. F* J  w
而且这种不应该是比较低级的么... 还是有什么别的因素?
8 e( E. G0 i; V1 k0 ^晶振就是普通的12M..3 R3 G4 x  V% N. P3 e9 m! m
求教..谢谢大家。/ d4 V0 e" O- X* p7 P

该用户从未签到

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

该用户从未签到

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

该用户从未签到

4#
发表于 2019-3-28 14:34 | 只看该作者
DS18B20是单总线,是一种与IIC不同的总线方式,是两个不同规范的总线协议。
0 ?4 y: L) {0 w指令周期会根据数据类型的不同而消耗不同的执行时间,uint是16位数据,如果是8位单片机的话,需要进行两次减法运算,才算完成一次16位数的减法,而用uchar的话,8位数据,只需要做一次减法运算就可以了。
8 j  {8 l2 ^+ u; k你可以试试再定义一个uchar,对比一下两种数据类型的运行时间。

点评

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

该用户从未签到

5#
 楼主| 发表于 2019-3-28 14:40 | 只看该作者
relchhiclty 发表于 2019-3-28 14:34, y7 a6 W" P, W5 L
DS18B20是单总线,是一种与IIC不同的总线方式,是两个不同规范的总线协议。- e' |/ n* C, @6 j
指令周期会根据数据类型的不同 ...
0 N( \. p) L5 L& o$ Q$ r4 m
我当时自己试的时候的确是uchar快很多.原来是这样 thanks
( a& ~/ g+ l- H- d

该用户从未签到

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

本版积分规则

关闭

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

EDA365公众号

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

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

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

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

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