• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 關 閉

    新聞中心

    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編碼,搜索結束。

    本文引用地址:http://www.czjhyjcfj.com/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 下一頁

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 朔州市| 临澧县| 衢州市| 台南市| 甘谷县| 台安县| 玉林市| 赞皇县| 临颍县| 防城港市| 志丹县| 大同县| 台江县| 德昌县| 韩城市| 红原县| 濮阳市| 鄱阳县| 抚顺市| 东兰县| 潜山县| 礼泉县| 肇源县| 长顺县| 侯马市| 永城市| 上饶市| 京山县| 合山市| 忻城县| 江口县| 乡宁县| 会宁县| 沐川县| 乐陵市| 大荔县| 酉阳| 廊坊市| 溆浦县| 盈江县| 宜兰县|