关 闭

新闻中心

EEPW首页 > 工控自动化 > 设计应用 > DSl8820 ROM编码的一种搜索算法

DSl8820 ROM编码的一种搜索算法

作者: 时间:2009-09-21 来源:网络 收藏

首先作如下几个定义:对“两读”数据为00的位,之后“一写”操作要写的数据定义为“00写位”;所有00写位的集合定义为“00写位组”。那么所要解决的问题就是:确立一个00写位组,确保命令能够到一个唯一的,并在完成一次搜索后对00写位组做出更新,以确保下次的搜索命令能够搜索到一个唯一的并且不会搜索到已经搜索到的ROM编码,直到完成总线上所有器件的ROM编码搜索。
在给出搜索规则前再作如下几个定义:00写位组中最高ROM编码位对应的00写位定义为“最高00写位”;00写位组中邻近最高00写位的00写位定义位“次高00写位”;如果更新后的00写位组不足以搜索到一个唯一的ROM编码,则添加新的00写位,这个新的00写位定义为“新00写位”。
DS18820 ROM编码的搜索规则:
①第一次搜索确立一个00写位组,其中所有00写位全部为0。
②每次搜索后更新00写位组并从最高00写位开始更新。
③00写位组更新规则:如果最高00写位为0,则改最高00写位为1,更新完成;如果最高00写位为1,则弃去最高00写位并把次高00写位作为新的最高00写位。
④如果出现新00写位,新00写位一律为0并作为新的最高00写位。
⑤如果0写位组全为1,则搜索所有器件的ROM编码,搜索结束。

本文引用地址:https://www.eepw.com.cn/article/163566.htm

3 算法的C51实现
对一条“单线总线”上多片DS18820的ROM编码搜索与识别,具体由C51编写的函数uchar SearchRomID(uchar RomID[n][8])来实现。函数的返回值是总线上查找到的器件个数,总线上所有器件的ROM编码存入二维数组RomID[n][8]。其中n为总线上允许挂器件的最大值,这里取16。
首先对程序中的几个重要变量做一些说明:
_00wbit:一维数组,用来存储00写位组全部内容。它的长度由总线上允许挂接器件的最大值决定。每写一个00写位都可以“排除”至少一个总线上的器件,当总线上器件数为n时,_00wbit数组的长度应为n-1。当然这是最坏情况下的取值,很多情况下_00wbit数组的长度小于这个值,这时不用的 _00wbit数组位用2来填充。
Rom:一维数组,临时存储64位ROM编码。
b:搜索结束标志位。
R1、R2:“两读”数据位。
编者注:程序略。

结 语
本文提出了一种对挂接在同一条“单线总线”上的多片DS18B20 ROM编码的搜索算法,并给出了具体的C51实现方法,经验证完全可行。由于该算法可自动识别总线上的器件个数,因此实际运用中,在总线上添加和删除器件都十分灵活,这为多点测温带来了很大的方便。该算法也适用于其他“单线总线”器件。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭