1-Wire總線(xiàn)與DS18B20應用仿真
首先右擊選 中protues編輯區中的DS18B20仿真模型然后再左擊,此時(shí)彈出如圖4所示的屬性設置對話(huà)框。其中,Family Code是器件的家族碼,對于DS18B20來(lái)說(shuō)是28H。ROM Serial Number對應于器件的48bit序列號,格式為十六進(jìn)制,在填寫(xiě)過(guò)程中要保證同一條1-Wire總線(xiàn)上所有仿真模型的ROM Serial Number都不相同。Automatic Serialization設置為No時(shí)仿真模型將使用ROM Serial Number中的序列號,設置為Yes時(shí)模型的序列號將由仿真環(huán)境自動(dòng)生成,在此設置為Yes,這樣可以免去手動(dòng)修改ROM Serial Number的麻煩。Current Value中是仿真模型當前的溫度值。Cranularity中是單擊仿真模型的溫度值增減按鈕時(shí)溫度值的改變量,在此設置為1.1。其他選項保持默認即可。單擊OK按鈕,設置完成。
本文引用地址:http://dyxdggzs.com/article/84508.htm圖3 多點(diǎn)測溫系統仿真原理圖
?、劬幹圃闯绦?/strong>
主機是通過(guò)Reset()、Readbit()、Writebit()三種基本操作與1-Wire總線(xiàn)進(jìn)行通信的,只要這三個(gè)函數的時(shí)序準確,那么對于有一定C語(yǔ)言編程基礎的用戶(hù)來(lái)說(shuō)程序其他部分的編寫(xiě)將不是難事,按照前面介紹的流程向總線(xiàn)發(fā)送功能命令并進(jìn)行相應讀寫(xiě)操作即可。多點(diǎn)測溫系統編程的難點(diǎn)在于器件的查找,系統上電時(shí)主機首先要查找總線(xiàn)上掛接著(zhù)多少個(gè)1-Wire器件并將各個(gè)器件的ROM編碼讀入單片機的RAM中,這需要一套復雜的算法,限于篇幅關(guān)于此算法在此不再詳述。本仿真實(shí)例大體工作過(guò)程如圖3右下角注釋部分所示,“查找總線(xiàn)上所有器件的ROM編碼并存儲”這一步可以由 uchar B20ReadROM(uchar B20ROM[]函數完成,該函數的返回值是查找到的器件數目,各個(gè)器件的ROM編碼將存儲在二維數組B20ROM[]中。
圖4 DS18B20仿真模型屬性設置
“統一開(kāi)始溫度轉換”的通信流程為:發(fā)送復位信號;發(fā)送跳過(guò)ROM(CCH)命令;發(fā)送啟動(dòng)溫度轉換(44H)命令。
“逐器件讀取溫度值”的通信流程為:發(fā)送復位信號;發(fā)送匹配ROM(55H)命令;發(fā)送第i(i=0~7)個(gè)器件的ROM編碼;發(fā)送讀RAM(BEH)命令;讀取2字節,其中低字節在前,高字節在后,讀取到的值符合溫度值數據格式。
?、茉赑roteus中添加監視變量
為了檢驗程序運行的正確與否,通常的做法是將運行結果通過(guò)單片機的UART接口輸出到虛擬終端上,這種方法的缺點(diǎn)是會(huì )占用一定的單片機資源,在此介紹另外一種程序調試技巧——監視變量。在Proteus的運行狀態(tài)下點(diǎn)擊Debug→Watch Window會(huì )彈出監視窗口(Watch Window),然后按下Alt+A鍵會(huì )彈出如圖5所示的添加存儲器條目對話(huà)框(Add Memory Item)。所謂監視變量也就是監視相應存儲單元中的內容,圖5中
圖5 添加存儲器條目對話(huà)框
Memory用于選擇待監視變量所在的存儲器;Name用于填寫(xiě)變量名稱(chēng),為了含義清晰該名稱(chēng)最好與源程序中定義的變量名稱(chēng)一致;Address用于填寫(xiě)待監視變量的地址;Data Type和Display Fomat用于設置數據格式和顯示格式。設置完成后單擊Add按鈕即可添加一個(gè)監視變量。在本實(shí)例中將測量到的溫度值轉化成ACSLL碼字符串的格式存儲在二維數組TempBuffer中,因此Data Type選擇為ASCLLZ String,Watch Window的最終結果如圖6所示。Value一欄中顯示的即為8個(gè)DS18B20測量到的溫度值,單擊仿真模型的溫度增減按鈕溫度值的改變會(huì )自動(dòng)映射在 Watch Window中。
圖6 監視窗口
圖6中TempBuffer[i](i=0~7)的地址在Keil中可以按以下步驟得到:
● 單擊Keil工具欄中的按鈕,進(jìn)入調試狀態(tài)。
● 通過(guò)View→Output Window菜單調出Keil的Output Window,并選中Command標簽。
● 在Output Window的命令輸入區輸入TempBuffer[i]然后回車(chē)即可得到TempBuffer[i]的地址,在本實(shí)例中i=0~7。對于非數組類(lèi)型的變量在輸入時(shí)需要在變量名前加取地址符號&,如圖7所示。
圖7 變量地址的獲取
評論