原文:
多个DS18B20 ROM自动搜索 展示
多点测温网络的三种方法:
㈠ 先读出每个DS18B20的64位ROM码,然后写到程序中进行匹配
方法:
在硬件系统搭建完成时在总线上每次挂接一个DS18B20,对该DS18B20发送读取ROM序列号命令(0x33),这样DS18B20就按照从高位到低位的顺序发送8字节地址到总线上,单片机依次读取、保存即可得到一个DS18B20的序列号。然后在总线上单独挂接另一个DS18B20芯片得到该芯片的序列号。有了这些序列号后,将这些序列号固化在程序中(如数组、查表),当单片机向总线发送匹配ROM命令之后紧跟发送一个序列号,这样接下去的读取温度操作将只有ROM序列号匹配的那个DS18B20做出相应的操作。
㈡ 每一个I/O口可挂一个DS18B20,如
一种快速查询多点DS18B20温度的方法
㈢ 利用SEARCH ROM 指令 动态搜索64位ROM码(二叉树遍历)
SEARCH ROM指令:发出search rom 指令后,ds18b20将所有的第一位0,0,0放到总线上,单片机读到的是相与的结果为0.接着ds18b20将所有器件的第一位的补码1,1,1放到总线上,单片机读到的数据是相与的结果为1.等待主机响应之后,继续将下一位及其反码,发送到总线上。
每次读ds18b20发出的两位会得到00,01,10,11的结果其含义如下:
00:挂在总线上的ds18b20在这一位上有冲突, 即有的在这一位上为0, 有的在 这一位上为1。
01:所有DS18B20此位数据均为0
10:所有DS18B20此位数据均为1
11:没有DS18B20
ROM 搜索过程是简单三步过程的重复:
(1)读一位(2)读核位的补码
(3)写所需的那一位的值:
发0, 则选中这一位为0的ds18b20, 在此后的过程中, 仅这一位为0的ds18b20参与向总线收发数据。如发1, 则选中这一位为1的ds18b20, 在此后的过程中, 仅这一位为1的ds18b20参与向总线收发数据。
总线主机在ROM 的每一位上完成这简单的三步过程。在全部过程完成之后总线主机便知道一个器件中ROM 的内容。
……
一周热门 更多>