新聞中心

        EEPW首頁(yè) > EDA/PCB > 設(shè)計(jì)應(yīng)用 > 1-Wire總線與DS18B20應(yīng)用仿真

        1-Wire總線與DS18B20應(yīng)用仿真

        作者: 時(shí)間:2008-06-19 來(lái)源:今日電子 收藏

          首先右擊選 中protues編輯區(qū)中的DS18B20模型然后再左擊,此時(shí)彈出如圖4所示的屬性設(shè)置對(duì)話框。其中,F(xiàn)amily Code是器件的家族碼,對(duì)于DS18B20來(lái)說(shuō)是28H。ROM Serial Number對(duì)應(yīng)于器件的48bit序列號(hào),格式為十六進(jìn)制,在填寫(xiě)過(guò)程中要保證同一條總線上所有模型的ROM Serial Number都不相同。Automatic Serialization設(shè)置為No時(shí)模型將使用ROM Serial Number中的序列號(hào),設(shè)置為Yes時(shí)模型的序列號(hào)將由仿真環(huán)境自動(dòng)生成,在此設(shè)置為Yes,這樣可以免去手動(dòng)修改ROM Serial Number的麻煩。Current Value中是仿真模型當(dāng)前的溫度值。Cranularity中是單擊仿真模型的溫度值增減按鈕時(shí)溫度值的改變量,在此設(shè)置為1.1。其他選項(xiàng)保持默認(rèn)即可。單擊OK按鈕,設(shè)置完成。

        本文引用地址:http://www.104case.com/article/84508.htm

         圖3 多點(diǎn)測(cè)溫系統(tǒng)仿真原理圖

          ③編制源程序

          主機(jī)是通過(guò)Reset()、Readbit()、Writebit()三種基本操作與總線進(jìn)行通信的,只要這三個(gè)函數(shù)的時(shí)序準(zhǔn)確,那么對(duì)于有一定C語(yǔ)言編程基礎(chǔ)的用戶(hù)來(lái)說(shuō)程序其他部分的編寫(xiě)將不是難事,按照前面介紹的流程向總線發(fā)送功能命令并進(jìn)行相應(yīng)讀寫(xiě)操作即可。多點(diǎn)測(cè)溫系統(tǒng)編程的難點(diǎn)在于器件的查找,系統(tǒng)上電時(shí)主機(jī)首先要查找總線上掛接著多少個(gè)器件并將各個(gè)器件的ROM編碼讀入單片機(jī)的RAM中,這需要一套復(fù)雜的算法,限于篇幅關(guān)于此算法在此不再詳述。本仿真實(shí)例大體工作過(guò)程如圖3右下角注釋部分所示,“查找總線上所有器件的ROM編碼并存儲(chǔ)”這一步可以由 uchar B20ReadROM(uchar B20ROM[]函數(shù)完成,該函數(shù)的返回值是查找到的器件數(shù)目,各個(gè)器件的ROM編碼將存儲(chǔ)在二維數(shù)組B20ROM[]中。

        圖4 DS18B20仿真模型屬性設(shè)置

          “統(tǒng)一開(kāi)始溫度轉(zhuǎn)換”的通信流程為:發(fā)送復(fù)位信號(hào);發(fā)送跳過(guò)ROM(CCH)命令;發(fā)送啟動(dòng)溫度轉(zhuǎn)換(44H)命令。

          “逐器件讀取溫度值”的通信流程為:發(fā)送復(fù)位信號(hào);發(fā)送匹配ROM(55H)命令;發(fā)送第i(i=0~7)個(gè)器件的ROM編碼;發(fā)送讀RAM(BEH)命令;讀取2字節(jié),其中低字節(jié)在前,高字節(jié)在后,讀取到的值符合溫度值數(shù)據(jù)格式。

          ④在Proteus中添加監(jiān)視變量

          為了檢驗(yàn)程序運(yùn)行的正確與否,通常的做法是將運(yùn)行結(jié)果通過(guò)單片機(jī)的UART接口輸出到虛擬終端上,這種方法的缺點(diǎn)是會(huì)占用一定的單片機(jī)資源,在此介紹另外一種程序調(diào)試技巧——監(jiān)視變量。在Proteus的運(yùn)行狀態(tài)下點(diǎn)擊Debug→Watch Window會(huì)彈出監(jiān)視窗口(Watch Window),然后按下Alt+A鍵會(huì)彈出如圖5所示的添加存儲(chǔ)器條目對(duì)話框(Add Memory Item)。所謂監(jiān)視變量也就是監(jiān)視相應(yīng)存儲(chǔ)單元中的內(nèi)容,圖5中

         圖5 添加存儲(chǔ)器條目對(duì)話框

           Memory用于選擇待監(jiān)視變量所在的存儲(chǔ)器;Name用于填寫(xiě)變量名稱(chēng),為了含義清晰該名稱(chēng)最好與源程序中定義的變量名稱(chēng)一致;Address用于填寫(xiě)待監(jiān)視變量的地址;Data Type和Display Fomat用于設(shè)置數(shù)據(jù)格式和顯示格式。設(shè)置完成后單擊Add按鈕即可添加一個(gè)監(jiān)視變量。在本實(shí)例中將測(cè)量到的溫度值轉(zhuǎn)化成ACSLL碼字符串的格式存儲(chǔ)在二維數(shù)組TempBuffer中,因此Data Type選擇為ASCLLZ String,Watch Window的最終結(jié)果如圖6所示。Value一欄中顯示的即為8個(gè)DS18B20測(cè)量到的溫度值,單擊仿真模型的溫度增減按鈕溫度值的改變會(huì)自動(dòng)映射在 Watch Window中。

        圖6 監(jiān)視窗口

          圖6中TempBuffer[i](i=0~7)的地址在Keil中可以按以下步驟得到:

          ● 單擊Keil工具欄中的按鈕,進(jìn)入調(diào)試狀態(tài)。
          ● 通過(guò)View→Output Window菜單調(diào)出Keil的Output Window,并選中Command標(biāo)簽。
          ● 在Output Window的命令輸入?yún)^(qū)輸入TempBuffer[i]然后回車(chē)即可得到TempBuffer[i]的地址,在本實(shí)例中i=0~7。對(duì)于非數(shù)組類(lèi)型的變量在輸入時(shí)需要在變量名前加取地址符號(hào)&,如圖7所示。

        圖7 變量地址的獲取


        上一頁(yè) 1 2 3 下一頁(yè)

        關(guān)鍵詞: 仿真 1-Wire 傳感器

        評(píng)論


        相關(guān)推薦

        技術(shù)專(zhuān)區(qū)

        關(guān)閉
        主站蜘蛛池模板: 凉城县| 汕头市| 怀集县| 比如县| 泊头市| 西乌珠穆沁旗| 柞水县| 家居| 班戈县| 台南县| 榆中县| 临邑县| 上蔡县| 磐石市| 新绛县| 房产| 团风县| 夏邑县| 镇坪县| 红安县| 叶城县| 福州市| 中宁县| 德安县| 陕西省| 乐平市| 泰安市| 崇礼县| 合肥市| 上杭县| 平乐县| 蒙山县| 渝中区| 梧州市| 昭平县| 嘉祥县| 霍林郭勒市| 黎川县| 虎林市| 芷江| 涪陵区|