首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
DSl8820 ROM编码的一种搜索算法
来源:本站整理  作者:佚名  2009-09-21 09:31:27




    首先作如下几个定义:对“两读”数据为00的ROM编码位,之后“一写”操作要写的数据定义为“00写位”;所有00写位的集合定义为“00写位组”。那么搜索算法所要解决的问题就是:确立一个00写位组,确保搜索命令能够搜索到一个唯一的ROM编码,并在完成一次搜索后对00写位组做出更新,以确保下次的搜索命令能够搜索到一个唯一的ROM编码并且不会搜索到已经搜索到的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编码,搜索结束。

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]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:127,054.70000 毫秒