1-Wire總線的基本通信協(xié)議作為一種單主機多從機的總線系(共享)_第1頁
1-Wire總線的基本通信協(xié)議作為一種單主機多從機的總線系(共享)_第2頁
1-Wire總線的基本通信協(xié)議作為一種單主機多從機的總線系(共享)_第3頁
1-Wire總線的基本通信協(xié)議作為一種單主機多從機的總線系(共享)_第4頁
1-Wire總線的基本通信協(xié)議作為一種單主機多從機的總線系(共享)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1-wire總線的基本通信協(xié)議 作為-種單主機多從機的總線系統(tǒng),在一條1-wire總 線上可掛接的從器件數(shù)量幾乎不受限制。為了不引起邏輯上的沖突,所有從器件的1-wire 總線接口都是漏極開路的,因此在使用時必須對總線外加上拉電阻(一般取5kq左右)。主 機對1-wire總線的基木操作分為復(fù)位、讀和寫三種,其屮所有的讀寫操作均為低位在前高 位在后。復(fù)位、讀和寫是1-wire總線通信的基礎(chǔ),卜面通過具體程序詳細介紹這3種操作的 時序要求。(程序中dq代表1-wire總線,定義為pl. 0, uchar定義為unsigned char)1 1-wire總線的復(fù)位復(fù)位是1-wire總線通信中最為重要

2、的一種操作,在每次總線通信zlw主機必須首先發(fā) 送復(fù)位信號。如程序11所示,產(chǎn)牛復(fù)位信號時主機首先將總線拉低480960 us然后釋放, 由于上拉電阻的存在,此時總線變?yōu)楦唠娖健?-wire總線器件在接收到有效跳變的15 60 u s內(nèi)會將總線拉低60240卩s,在此期間主機可以通過對dq采樣來判斷是否有從器件 掛接在當前總線上。函數(shù)reset ()的返回值為0表示有器件掛接在總線上,返回值為1表示 沒有器件掛接在總線上。程序1. 1總線復(fù)位uchar reset(void)uchar tdq;dq二0;/主機拉低總線delay480 u s (); 等待480 u sdq二1; /主機釋放總

3、線delay60 u s();/等待60 卩 stdq=dq;/主機對總線采樣delay480us(); /等待復(fù)位結(jié)束return tdq; /返回采樣值2 1-wire總線的寫操作由于只有一條i/o線,主機1-wire總線的寫操作只能逐位進行,連續(xù)寫8次即可寫入總 線一個字節(jié)°如程序1. 2所示,當mcs-51單片機的時鐘頻率為12mhz時,程序中的語句_nop_0 ; 可以產(chǎn)生lus的延時,調(diào)用此函數(shù)時需包含頭文件"intrins.h”。向1-wire總線寫lbit 至少需要60 us,同時述要保證兩次連續(xù)的寫操作有l(wèi)us以上的間隔。若待寫位wbit為0則 主機拉低總

4、線60us然后釋放,寫0操作完成。若待寫位wbit為1,則主機拉低總線并在115us內(nèi)釋放,然后等待60us,寫1操作完成。程序1.2向總線寫lbitvoid writebit(uchar wbit)_nop_();/保證兩次寫操作間隔1 u s以上dq二 0;_nop_();/保證主機拉低總線lus以上if (wbit)/向總線寫1dq二 1;delay60 u s ();else向總線寫0delay60 u s ();dq二 1;)3 1-wire總線的讀操作與寫操作類似,主機對1-wire總線的讀操作也只能逐位進行,連續(xù)讀8次,即可讀入主 機一個字節(jié)。從1-wire總線讀取lbit同樣至

5、少需耍60 us,同時也要保證兩次連續(xù)的讀操作 間隔lus以上。如程序1.3所示,從總線讀數(shù)據(jù)時,主機首先拉低總線lus以上然示禪放, 在釋放總線后的115 us內(nèi)主機對總線的采樣值即為讀取到的數(shù)據(jù)。程序13從總線讀lbituchar readbit() uchar tdq;_nop_0 ;保證兩次連續(xù)寫操作間隔1 u s以上dq二0;_nop_ ();/保證拉低總線的時間不少于1 u sdq二 1;_nop_();tdq二dq;/主機對總線采樣delay60 u s ();等待讀操作結(jié)束return tdq;/返回讀取到的數(shù)據(jù)數(shù)字溫度傳感器ds18b201 ds18b20的基本特性采川1-w

6、ire總線接口,可以方便實現(xiàn)多點測溫。與主機連接方便,除5kq的總線上拉電阻外無須其他額外器件。電源電壓范圍為3.05. 5v,與3.3v和5v數(shù)字系統(tǒng)均町很好地兼容。測量范圍為-55+125°c,分辨率為912位對編程。通過編程可設(shè)置溫度報警上下限,設(shè)置值掉電不丟失。內(nèi)部集成了用于器件尋址的64bit光刻rom編碼。2 ds18b20屮的存儲器在ds18b20屮共有三種存儲器,分別是rom、ram、eeprom,每種存儲器部有其特定的功 能,可查閱相關(guān)資料。3 1-wire總線rom功能命令在ds18b20內(nèi)部光刻了一個長度為64bit的rom編碼,這個編碼是器件的身份識別標志。

7、當總線上掛接著多個ds18b20時町以通過rom編碼對特定器件進行操作。rom功能命令是針 對器件的rom編碼進行操作的命令,共有5個,長度均為8bit (lbyte)0 讀 r0m(33h)當掛接在總線上的1-wire總線器件接收到此命令時,會在主機讀操作的配合下將自身 的rom編碼按由低位到高位的順序依次發(fā)送給主機??偩€上掛接有多個ds18b20時,此命令 會使所有器件同時向主機傳送門身的rom編碼,這將導(dǎo)致數(shù)據(jù)的沖突。 匹配rom(55h)主機在發(fā)送完此命令示,必須緊接著發(fā)送一個64bit的rom編碼,與此rom編碼匹配的 從器件會響應(yīng)主機的后續(xù)命令,而具他從器件則處丁等待狀態(tài)。該命令主

8、要川于選擇總線上 的特定器件進行訪問。 跳過rom(cch)發(fā)送此命令后,主機不必提供rom編碼即可對從器件進行訪問。與讀rom命令類似,該 命令同樣只適用于單節(jié)點的1-wire總線系統(tǒng),當總線上有多個器件掛接時會引起數(shù)據(jù)的沖 突。 查找rom(foh)當主機不知道總線上器件的rom編碼時,可以使用此命令并配合特定的算法杳找出總線 上從器件的數(shù)量和各個從器件的rom編碼。 報警查找(ech)此命令用于查找總線上滿足報警條件的ds18b20,通過報警查找命令并配合特定的查找 算法,可以查找出總線上滿足報警條件的器件數(shù)h和各個器件的rom編碼。4 ds18b20器件功能命令與1-wire總線相關(guān)的

9、命令分為rom功能命令和器件功能命令兩種,rom功能命令具有通 用性,不僅適用于ds18b20也適用于其他具有1-wire總線接口的器件,主耍用于器件的識別 與尋址;器件功能命令具有專用性,它們與器件的具體功能緊密相關(guān)。下而是ds18b20的器 件功能命令。 啟動溫度轉(zhuǎn)換(44h)該命令發(fā)送完成后,主機"j以通過調(diào)用readbit ()函數(shù)判斷溫度轉(zhuǎn)換是否完成,若 readbit ()的返冋值為0則表示轉(zhuǎn)換正在進行,若readbit 0的返冋值為1則表示轉(zhuǎn)換完成。 讀 ram (beh)該命令發(fā)送完成示,主機可以通過調(diào)用readbit ()函數(shù)將ds18b20屮ram的內(nèi)容從低位 到

10、高位依次讀出。 寫 ram (4eh)該命令發(fā)出后,主機隨后寫入1-wire總線的3字節(jié)將依次被存儲到ds18b20的報警上限、 報警卜-限和配置寄存器中。 復(fù)制ram (4811)該命令會將ds18b20的報警上限、報警卜-限和配置寄存器屮的內(nèi)容復(fù)制到eeprom屮。 該命令發(fā)出示,主機可以通過調(diào)用readbit ()函數(shù)判斷復(fù)制操作是否完成,若readbit ()的 返回值為1,則表示復(fù)制操作完成。 回讀 eeprom (b8h)該命令會將存儲在eeprom中的報警上限、報警卜限和配置寄器的內(nèi)容回讀到ram中, 主機町以通過調(diào)用readbit ()函數(shù)判斷回讀操作是否完成,若readbit

11、 0的返回值為1則表示 回讀操作完成。ds18b20在上電時會自動進行-次回讀操作。圖1主機與ds18b20的通信流程圖5主機與ds18b20的通信流程如圖1所示,主機通過1-wire總線接口對ds18b20的每次訪問都以復(fù)位侑號和rom功能 命令開始,訪問的結(jié)束位査是不確定的,這與具體的功能命令相關(guān)。圖小圓角矩形小的操作 與主機發(fā)送的功能命令相對應(yīng),隨著功能命令的不同圓介矩形中的操作冇時可以被省略。對 總線上的ds18b20來說,復(fù)位信號意味著乂一次通信的開始,器件對此的響應(yīng)是拉低總線以 告知主機口身的存在,然后準備接收rom功能命令。多點測溫系統(tǒng)仿真實例ds18b20是一種比較廉價的溫度傳

12、感器,其封封裝形式如圖2所示。在proteus中包含有 ds18b20的仿真模型,這使得相關(guān)程序的調(diào)試變得簡單方便。下面以一個實例介紹用proteus 仿真多點測溫系統(tǒng)的步驟。dm1a8ds18201 2 3屁觀圖憾原正(voc) i齊用i |丨18111未用未用nr27tn未用vec lll36jjj未用dq rnd5th a©s0icjw«(150mil)| 地(gkd) |圖2 ds18b20封裝形式 繪制仿真原理圖如圖3所示,在木實例屮以單片機at89c52和8個ds18b20構(gòu)成了一個多點測溫系統(tǒng)。為 了有足夠的空間存儲各個ds18b20的rom編碼和溫度值,在實

13、例中用一片8kb的sram芯片 6116對單片機的ram進行了擴展。 設(shè)置ds18b20仿真模型的屈性首先右擊選中protues編輯區(qū)中的ds18b20仿真模烈然后再左擊,此時彈出如圖4所示 的屬性設(shè)置對話椎。具屮,1怡milycode是器件的家族碼,對于ds18b20來說是28horom serial number對應(yīng)于器件的48bit序列號,格式為十六進制,在填寫過程中要保證同一條1-wire 總線上所有仿真模型的rom serial number都不相同。automatic serialization設(shè)置為no 時仿真模型將使用rom serial number屮的序列號,設(shè)置為yes時

14、模型的序列號將由仿真環(huán) 境口動生成,在此設(shè)置為yes,這樣可以免去手動修改rom serial number的麻煩。current value屮是仿真模型當前的溫度值。cranularity屮是單擊仿真模型的溫度值增減按鈕時溫 度值的改變量,在此設(shè)置為1.1。具他選項保持默認即對。單擊0k按鈕,設(shè)置完成。圖3多點測溫系統(tǒng)仿真原理圖編制源程序主機是通過reset ()、readbit ()、writebit ()三種基本操作與lwire總線進行通信的, 只要這三個函數(shù)的時序準確,那么對于有一定c語言編程基礎(chǔ)的用戶來說程序其他部分的編 寫將不是難事,按照前血介紹的流程向總線發(fā)送功能命令并進行相應(yīng)讀

15、寫操作即可。多點測 溫系統(tǒng)編程的難點在于器件的杳找,系統(tǒng)上電時主機首先要查找總線上掛接著多少個1-wire 器件并將各個器件的rom編碼讀入單片機的ram中,這需要一套復(fù)雜的算法,限于篇幅關(guān)于 此算法在此不再詳述。本仿真實例人體工作過程如圖3右卜角注釋部分所示,“查找總線上 所有器件的rom編碼并存儲”這一步可以由uchar b20readr0m(uchar b20r0m函數(shù)完成, 該函數(shù)的返回值是查找到的器件數(shù)冃,各個器件的rom編碼將存儲在二維數(shù)組b20r0m中。圖4 ds18b20仿真模型屬性設(shè)置“統(tǒng)一開始溫度轉(zhuǎn)換”的通信流程為:發(fā)送復(fù)位信號;發(fā)送跳過rom(cch)命令;發(fā)送 啟動溫度

16、轉(zhuǎn)換(44h)命令?!爸鹌骷x取溫度值”的通信流程為:發(fā)送復(fù)位信號;發(fā)送匹配rom(55h)命令;發(fā)送 第i(i=07)個器件的rom編碼;發(fā)送讀ram(beh)命令;讀取2字節(jié),其中低字節(jié)在前,高 字節(jié)在后,讀取到的值符合溫度值數(shù)據(jù)格式。在proteus中添加監(jiān)視變量為了檢驗程序運行的正確與否,通常的做法是將運行結(jié)杲通過單片機的uart接口輸出 到虛擬終端上,這種方法的缺點是會占用一定的單片機資源,在此介紹另外一種程序調(diào)試技 巧監(jiān)視變最。在proteus的運行狀態(tài)下點擊debug-*watch window會彈出監(jiān)視窗口(watch window),然后按下alt"a鍵會彈出如圖5

17、所示的添加存儲器條冃對話框(add memory ttem)o所謂監(jiān)視變量也就是監(jiān)視和應(yīng)存儲單元中的內(nèi)容,圖5中圖5添加存儲器條ri對話椎memory川于選擇待監(jiān)視變量所在的存儲器;name川于填寫變量名稱,為了含義清晰該 名稱最好與源程序中定義的變量名稱一致;address用于填寫待監(jiān)視變量的地址;data type 和display fomat川于設(shè)置數(shù)據(jù)格式和顯示格式。設(shè)置完成后單擊add按鈕即可添加一個監(jiān) 視變量。在本實例中將測量到的溫度值轉(zhuǎn)化成acsll碼字符串的格式存儲在二維數(shù)組 tempbuffer 中,因此 data type 選擇為 ascllz string, watch window 的最終結(jié)果如圖6所 示。value 一欄屮顯示的即為8個ds18b20測量到的溫度值,單擊仿真模型的溫度増減按鈕溫 度值的改變會自動映射在watch window中。latch findowsnamejjlddressvaluetempbuffer00x08+017.1250tempbuffer10x13+035. 8125tempbuffer2oxle+019.3125tempbuffer30x29+021.5000tempbuffer40x34-018.0625tempbuffer50x3f+040. 2500tempbuffer60x4 a+020.4

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論