版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、DS18B20一、DS18B20的外形及其與單片機的連接圖18B20OND(b)圖1DS18B20是Dallas公司生產(chǎn)的1-Wire接口數(shù)字溫度傳感器,其外形如圖1(a)所示,有三個引腳,分別為:電源地1(GND);數(shù)字信號輸入/輸出端2(DQ);外接供電電源輸入端 3(VDD,在寄生電源接線方式時接地)。它是一種單總線數(shù)字溫度傳感器,所有的數(shù)據(jù)交換 和控制都通過這根數(shù)據(jù)線來完成。測試溫度范圍-55 C -125 C,溫度數(shù)據(jù)位可配置為9、10、11、12位,對應(yīng)的刻度值分別為05C、0.25 C、0.125 C、0.0625C,對應(yīng)的最長轉(zhuǎn)換時間分別為93.75ms、187.5ms、375
2、ms、750ms。出廠默認配置為 12位數(shù)據(jù),刻度值為0.0625 C, 最長轉(zhuǎn)換時間為 750ms。從以上數(shù)據(jù)可以看出,DS18B20數(shù)據(jù)位越低、轉(zhuǎn)換時間越短、反應(yīng)越快、精度越低。單總線沒有時鐘線,只有一根通信線,其讀寫數(shù)據(jù)是靠控制起始時間和采樣時間來完成,所以時序要求很嚴(yán)格。圖1(a)為DS18B20與單片機的連接電路圖,它的數(shù)據(jù)線通常要求外接一個4.7K -10K的上拉電阻(該電阻畫原理圖時靠近單片機畫故沒有顯示出來),故其閑置時狀態(tài)位高電平。提示:DS18B20外形酷似三極管,分辨引腳時,面對著扁平的那一面,左負右正,一 旦接反就會立刻發(fā)熱,甚至有可能燒毀。二、DS18B20存儲器結(jié)構(gòu)
3、9字節(jié)的暫存器單元。DS18B20的內(nèi)部有64位的ROM單元,和1、64位(激)光刻只讀存儲器中的64位編碼(跟人的身份證號類似,一人8位是單線系列編碼:28h。接著的48位8位是以上56位的CRC編碼。64-位的光刻 ROM又包括5個ROM的作 以實現(xiàn)多點每只DS18B20都有一個唯一存儲在 ROM 一個身份證號),這是出廠時被光刻好的。最前面 是一個唯一的序列號。最后ROM的功能命令:讀 ROM,匹配ROM,跳躍ROM,查找ROM和報警查找。 用是使每個DS18B20各不相同,這樣就可以實現(xiàn)一根總線上掛接多個DS18B20監(jiān)測。2、9字節(jié)的暫存器單元byte 0返廈 rsR (Viiu
4、39;l(S5''CPbl vie J左度 MSBEtPROMli'M e -估印戶幸節(jié)1 TT用L孑書1byie 5TL用戶孑節(jié)3-L用尸字節(jié)£bue 4Kff喜膏Sih配蘭警殲關(guān)tnie 5悝昭位注卜11)6借謂仃on和ilMia暮CRC DS18B20的暫存器單元如表 1所示,各部分介紹如下。1)、溫度傳感器lir =Vil 6but 5bn 4Urlt.i?blE :1 f 11 -匚2J* 11 -U( 15laiLt:;bu 1、Ijii 11b( JOI-4bii»S亠1 $5S1j出11 ¥ 1I S B>ieMS B
5、mcb圖2的溫度傳感器,它們負責(zé)保存對DS18B20讀取溫度時共讀取 16讀取的溫度為負數(shù);當(dāng)前5位為暫存器的第 O(LSB)字節(jié),第1(MSB)字節(jié)為DS18B20 溫度的測量結(jié)果,用 16位二進制提供,格式如圖2所示。位,前5個位(MSB的高5位)為符號位,當(dāng)前5位為1時,0時,讀取的溫度為正。溫度為正時讀取方法為:將16進制數(shù)轉(zhuǎn)換成10進制即可。溫度為負時讀取方法為(實際就是取補碼):將16進制取反后加1,再轉(zhuǎn)換成10進制。例:0550H = +85度,F(xiàn)C90H = -55度,0191H為25.0625度。LSB的低四位用于表示測量值中小數(shù)點后 的數(shù)值。2) 、非揮發(fā)的溫度報警觸發(fā)器T
6、H和TL位于第2和第3字節(jié),用于寫入溫度報警值,實際上就是設(shè)定溫度的最高和最低界限。3)、配置寄存器配置寄存器位于存儲器的第 4字節(jié),其組織如圖3所示。配置寄存器的04位和7位被 器件保留,禁止寫入;在讀回數(shù)據(jù)時全部為邏輯1。R1和R0用于設(shè)置DS18B20的精度,具體如表2所示。bit 1bit 6bit 5bit 4bit 3bif 2bit 1bit 00R1RO11111R1RO最大轉(zhuǎn)離*時間009-biT93.75111(icwv 0110-bil1S7.5 msUcoxvM)10Ibbif3下UcONV 口)1I12-bit7 50 115卄 CONV)56因4)、 CRC 發(fā)生器
7、CRC 字節(jié)作為 DS18B2064 位 ROM 的一部分存儲在存儲器中。 CRC 碼由 ROM 的前 位計算得到, 被包含在 ROM 的重要字節(jié)當(dāng)中。 CRC 由存儲在存儲器中的數(shù)據(jù)計算得到, 此當(dāng)存儲器中的數(shù)據(jù)發(fā)生改變時, CRC 的值也隨之改變。CRC 能夠在總線控制器讀取 DS18B20 時進行數(shù)據(jù)校驗。為校驗數(shù)據(jù)是否被正確讀取, 總線控制器必須用接受到的數(shù)據(jù)計算出一個 CRC 值,和存儲在 DS18B20 的 64 位 ROM 的值(讀 ROM 時)或 DS18B20 內(nèi)部計算出的 8 位 CRC 值(讀存儲器時)進行比較。如果 計算得到的 CRC 值和讀取出來的 CRC 值相吻合,
8、數(shù)據(jù)被無錯傳輸。 CRC 值的比較以及是 否進行下一步操作完全由總線控制器決定。 當(dāng)在 DS18B20 中存儲的或由其計算到 CRC 值和 總線控制器計算的值不相符時, DS18B20 內(nèi)部并沒有一個能阻止命令序列進行的電路。 CRC 的計算等式如下:CRC = X8 + X5 + X4 + 10。從 ROM 中的 56 位 ROM 中的數(shù)據(jù) CRC 的值必須被循環(huán)0。單總線 CRC 可以由一個由移位寄存器和 XOR 門構(gòu)成的多項式發(fā)生器來產(chǎn)生。這個回 路包括一個移位寄存器和幾個 XOR 門,移位寄存器的各位都被初始化為 最低有效位或暫存器中的位 0 開始,一次一位移入寄存器。在傳輸了 或移入
9、了暫存器的位 7后,移位寄存器中就存儲了 CRC 值。下一步, 移入。此時,如果計算得到的 CRC 是正確的,移位寄存器將復(fù)其他字節(jié)保留用,不需要看。三、關(guān)于單總線系統(tǒng) 單總線系統(tǒng)包括一個總線控制器和一個或多個從機。 DS18B20 總是充當(dāng)從機。當(dāng)只有 一只從機掛在總線上時,系統(tǒng)被稱為“單點”系統(tǒng);如果由多只從機掛在總線上,系統(tǒng)被稱 為“多點”。 所有的數(shù)據(jù)和指令的傳遞都是從最低有效位開始通過單總線。 單總線需要一個 約5K Q的外部上拉電阻;單總線的空閑狀態(tài)是高電平。無論任何理由需要暫停某一執(zhí)行過 程時, 如果還想恢復(fù)執(zhí)行的話, 總線必須停留在空閑狀態(tài)。在恢復(fù)期間,如果單總線處于非 活動(
10、高電平) 狀態(tài),位與位間的恢復(fù)時間可以無限長。 如果總線停留在低電平超過 480us, 總線上的所有器件都將被復(fù)位。四、操作流程1. DS18B20 復(fù)位。2. 執(zhí)行 ROM 指令。就是訪問,搜索,匹配每個 DS18B20 獨有的 64 位序列號。實驗板上只連有一個DS18B20,故不需識別,也就是不需讀出此序列號,寫代碼時直接寫命令Oxcc跳過。3. 執(zhí)行 DS18B20 功能指令( RAM 指令,就是讀寫暫存器指令) 。DS18B20 的功能指令很多,比較常用的有兩個:0x44 :開始轉(zhuǎn)換溫度。轉(zhuǎn)換好的溫度會儲存到暫存器字節(jié)0和1。0xBE :讀暫存指令。讀暫存指令,會從暫存器0 到 9,
11、一個一個字節(jié)讀取,如果要停止的話,必須寫下 DS18B20 復(fù)位。ROM 指令和 RAM 指令的具體情況見表 3。表3MiJCROkI3?H符吉ROM5 tna親 ROMOFOHBlvl HOMOCCH吿學(xué)罟thOECH護C專183堪圧怙® S RCM*ftfi5<RP5 4f蟲祖)mtJJt.gKfl対歡t1 i4 1 FtnUffiS茴°羊總蒂I占誼S麗囪專旳MIE西巒? ft出噸用,點下1母時怕用于聯(lián)述接主冋1攔然上31E2C的卜爲(wèi)和識剳64世尺;JM地址.為厝作各S伴低好碓S.囚闿伍毗U電址*益拝何DStE2*潢“:處頼向軌 這用干ai片工憶加E =雹融超過芒
12、足B上陽或嚴(yán)躺A扣跨出場S皆2定世碼嗤t曲44H淳ta方SD0CM寫百寺sIFHS:t!L暫 1?S4汩藥遐 EEPROr/own莎供住去DMH袁軋啟勺MME斑廳富5轉(zhuǎn)抉( &-LL?ra3 7&-is J 結(jié)捕5A.內(nèi)部存琴fl耶i中中萬一書的內(nèi)容龍下?逞交敷插+1寺來跌于部序之肓.是筈虐兩宇節(jié)1»議推.苗R;砒屯1、4手FJ勺*Sf湎EEPftQM區(qū)E EPROM V Pl 31F耳.讀Q3眇M拱電獨式.吏蘭供電aicsiaaoteis- o 別搖電-躺甲d引竝qfe去i 的時序五、讀寫DS18B201、DS18B20的復(fù)位時序:1).單片機拉低總線 480us9
13、60us,然后釋放總線(拉高電平)。2). 這時DS18B20會拉低信號,大約 60240us表示應(yīng)答。3).DS18B20拉低電平的60240us 之間,單片機讀取總線的電平,如果是低電平,那么表示復(fù)位成功。4) .DS18B20拉低電平15怦6°48Cu860pa240沖ta口t<260240us之后,會釋放總線。/*復(fù)位:主機t0時刻發(fā)送一復(fù)位脈沖(最短為480us的低電平信號),接著在t1時刻釋放總線( 拉高總線電平)進入接收狀態(tài)。DS18B20在檢測到總線的上升沿之后等待1560us。接著DS18B20在t2時刻發(fā)出存在脈沖(持續(xù)60240us的低電平)*/void
14、DS18B20_Reset()DQ=1;_nop_();DQ=0;拉低總線delay2us(280); /持續(xù) 280*2+5=565sDQ=1;while(DQ);while(!DQ);釋放總線/等待應(yīng)答(電平拉低)/應(yīng)答電平大約持續(xù)60240us后重新拉高總線1us; 2).單片機釋放總線,然后讀取總線 (1)。4).讀取電平過后,延遲大約4045us。>60fX3>1msto ti主機起作ffl一-DS1820jB作用 上a電a起作用/*讀字節(jié):主機總線t0時刻從高拉至低電平時,總線只須保持低電平 之后在t1時刻將總線拉高產(chǎn)生讀時間隙,讀時間隙在 t2距t0為15us,也就是
15、說t2時刻前主機必須完成讀位, 內(nèi)釋放總線.注意讀的時候從最低位向最高位讀。*/l .7us。t1時刻后t2時刻前有效。并在 t0后的60us-120usuchar DS18B20_Read_Byte()uchar i,te mp=0;for(i=0;i<8;i+)temp=te mp> >1;DQ=0;/主機將總線拉至低電平,只需保持_n op_(); /保持一個時鐘周期,也即1usDQ=1;delay2us(1);/延時7us, 一般讀數(shù)在后半段讀 if(DQ)temp=temp| 0x80;delay2us(2); /這里延時 45us+ 前面 7us+1us=53us
16、,接近 60us return temp;1.7US3、寫時序:1).單片機拉低電平大約 1015us; 2).單片機持續(xù)拉低電平(0)或拉高電平(1)大約 2045us的時間;3).釋放總線。Alp*>12、讀時序:1).在讀取的時候單片機拉低電平大約 電平。3).這時候DS18B20會拉低電平(0)或拉高電平/*寫字節(jié):當(dāng)主機總線t0時刻從高拉至低電平時就產(chǎn)生寫時間隙。從to時刻開始15us之內(nèi)應(yīng)將所需寫的位送到總線上,在隨后 15-60US間DS18B20對總線采樣若 低電平寫入的位是 0;若高電平寫入的位是 1,連續(xù)寫 2位間的間隙應(yīng)大于 1us。 注意:無論讀寫都是從最低位開始
17、。*/ void DS18B20_Write_Byte(uchar dat) uchar i; for(i=0;i<8;i+) /從最低位依次傳輸/在 15us 之內(nèi)將需寫的位送到總線上。然后等待總線采樣 /此處至少延時 60us/釋放總線DQ=0;/直接拉到低電平即可產(chǎn)生寫時間隙。DQ=dat&0x01;delay2us(25);DQ=1; _nop_(); dat =dat>>1; 4、讀取溫度流程 /* 讀溫度 :流程:復(fù)位 -寫命令 (跳過讀序列號,單個 DS18B20 時用)-啟動溫度轉(zhuǎn)換 - -等待轉(zhuǎn)換完成 (完成總線會跳回高電平 )-復(fù)位 -寫命令 (跳
18、過 ROM 編碼命令 )- 讀取暫存寄存器字節(jié)命令 -讀低字節(jié) -讀高字節(jié) -復(fù)位-合并高低字節(jié) -判斷 正負*/DS18B20_Read_Temperature()uchar temp_low,temp_high;DS18B20_Reset();DS18B20_Write_Byte(0xcc); DS18B20_Write_Byte(0x44); while(!DQ); /等待轉(zhuǎn)換完成DS18B20_Reset();DS18B20_Write_Byte(0xcc);DS18B20_Write_Byte(0xbe);temp_low=DS18B20_Read_Byte();temp_high=
19、DS18B20_Read_Byte();DS18B20_Reset();tvalue=temp_high; tvalue=(tvalue<<8)|temp_low; if(tvalue<0x0fff)tflag=0;elsetvalue=tvalue+1; /因為最高位的前五位是 1,所以寄存器存的是溫度的補碼(補 碼要取反加一得到二進制數(shù))tflag=1; tvalue=tvalue*(0.625);/ 溫度值擴大 10 倍,精確到 1 位小數(shù) return(tvalue);例子: DS18B20+1602 #include<reg52.h>#include &
20、lt;INTRINS.H> #include <string.h> #define uchar unsigned char #define uint unsigned intsbit DQ=P2A3;/ds18b20 與單片機連接口sbit RS=P2A6;sbit RW=P 2人7;sbit E=P 2人5;"unsigned char code str1="temperature: " unsigned char code str2=" uchar data disdata5;uint tvalue;/ 溫度值 uchar tfla
21、g;/溫度正負標(biāo)志程序 */*lcd1602 /聲明調(diào)用函數(shù) void Lcd_W_Cmd(uchar com); void Lcd_W_Dat(uchar dat);uchar Lcd_R_Busy();void Lcd_Init(); void delay(uchar t);void delay_4_nop();/* 延時 */ #define delay_4_nop() _nop_();_nop_();_nop_();_nop_(); void delay(uchar t)uchar i, j; for(i=0; i<t; i+)for(j=0; j<50; j+);void
22、 Lcd_Init()uchar i;Lcd_W_Cmd(0x3c);Lcd_W_Cmd(0x0e);Lcd_W_Cmd(0x01);Lcd_W_Cmd(0x06);Lcd_W_Cmd(0x80);for(i=0;i<strlen(str1);i+) Lcd_W_Dat(str1i); Lcd_W_Cmd(0xC0);for(i=0;i<strlen(str2);i+) Lcd_W_Dat(str2i);uchar Lcd_R_Busy()uchar s;RW=1; delay_4_nop();RS=0; delay_4_nop();E=1; delay_4_nop();s=P0;
23、 delay_4_nop();E=0;return(s);void Lcd_W_Cmd(uchar com)uchar i;doi=Lcd_R_Busy(); i=i&0x80; delay(2);while(i!=0);RW=0;delay_4_nop();RS=0;delay_4_nop();E=1; delay_4_nop(); P0=com; delay_4_nop();E=0;void Lcd_W_Dat(uchar dat) uchar i;doi=Lcd_R_Busy(); i=i&0x80; delay(2);while(i!=0);RW=0; delay_4_
24、nop();RS=1; delay_4_nop();E=1;delay_4_nop();P0=dat;delay_4_nop();E=0;/*ds1820*/ void delay2us(unsigned int i)/ 延時 1 微秒 while(-i);/*牛人實測,本人沒有做過試驗。針對的是 12Mhz 的晶振 delay(0): 延時 518us 誤差 :518-2*256=6 原帖寫 "5us" 是錯的) 誤差 :25-20=5 誤差 :45-40=5*delay(1): 延時 7us delay(10): 延時 25us delay(20): 延時 45usde
25、lay(IOO):延時 205us 誤差:205-200=5 delay(200): 延時 405us 誤差 :405-400=5*/ /*復(fù)位:主機to時刻發(fā)送一復(fù)位脈沖(最短為480US的低電平信號),接著在t1時刻釋放總線( 拉高總線電平)進入接收狀態(tài)。DS18B20在檢測到總線的上升沿之后等待1560us。接著DS18B2o在 t2 時刻發(fā)出存在脈沖 (持續(xù) 6o24ouS 的低電平 )*/void DS18B2o_ReSet()DQ=1;_nop_();DQ=0;/拉低總線delay2us(280); /持續(xù) 280*2+5=565s/釋放總線/ 等待應(yīng)答 (電平拉低 )/應(yīng)答電平大
26、約持續(xù) 60240us 后重新拉高總線DQ=1; while(DQ); while(!DQ);/*讀字節(jié) :主機總線 t0 時刻從高拉至低電平時,總線只須保持低電平l .7us。之后在 t1 時刻將總線拉高產(chǎn)生讀時間隙,讀時間隙在 t1 時刻后 t2 時刻前有效。t2距to為15us,也就是說t2時刻前主機必須完成讀位,并在to后的60US-120US內(nèi)釋放總線 .注意讀的時候從最低位向最高位讀。*/ uchar DS18B20_Read_Byte()uchar i,temp=o;for(i=o;i<8;i+) temp=temp>>1;DQ=o;/主機將總線拉至低電平,只需
27、保持1.7uS_nop_(); /保持一個時鐘周期,也即1uSDQ=1;delay2us(1);/延時7us, 般讀數(shù)在后半段讀 if(DQ)temp=temp|ox8o;delay2us(2); /這里延時 45us+ 前面 7us+1us=53us,接近 60usreturn temp;/*寫字節(jié):當(dāng)主機總線 t0 時刻從高拉至低電平時就產(chǎn)生寫時間隙。從 to 時刻開始 15us之內(nèi)應(yīng)將所需寫的位送到總線上,在隨后 15-60US間DS18B20對總線采樣若 低電平寫入的位是 0;若高電平寫入的位是1,連續(xù)寫 2位間的間隙應(yīng)大于 1us。注意:無論讀寫都是從最低位開始。*/ void DS
28、18B20_Write_Byte(uchar dat)DQ=0; / 直接拉到低電平即可產(chǎn)生寫時間隙。 DQ=dat&0x01;delay2us(25);uchar i; for(i=0;i<8;i+) /從最低位依次傳輸DQ=1; _nop_(); dat =dat>>1;/在 15us 之內(nèi)將需寫的位送到總線上。然后等待總線采樣 /此處至少延時 60us/釋放總線/*讀溫度 :流程:復(fù)位 -寫命令 (跳過讀序列號,單個 DS18B20 時用 )-啟動溫度轉(zhuǎn)換 -等待轉(zhuǎn)換完成(完成總線會跳回高電平)-復(fù)位-寫命令(跳過ROM編碼命令)- 讀取暫存寄存器字節(jié)命令-讀低字節(jié) -讀高字節(jié) -復(fù)位-合并高低字節(jié) -判斷正負*/DS18B20_Read_Temperature()uchar temp_low,temp_high;DS18B20_Reset(); DS18B20_Write_Byte(0xcc); DS18B20_Write_Byte(0x44); while(!DQ);/等待轉(zhuǎn)換完成DS18B20_Reset();DS18B20_Write_Byte(0xcc); DS18B
溫馨提示
- 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)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度綠城物業(yè)住宅小區(qū)物業(yè)服務(wù)合同續(xù)簽協(xié)議4篇
- 2025年度門面房租賃保證金合同模板4篇
- 《平安禮儀規(guī)范》課件
- 2025年美式廣口柄鋼絲鉗項目可行性研究報告
- 2025年接裝紙項目可行性研究報告
- 2025至2030年門鉸配件項目投資價值分析報告
- 2025至2030年聚氨酯鋁箔復(fù)合夾芯板項目投資價值分析報告
- 2025至2030年管捅條罩項目投資價值分析報告
- 三年級數(shù)學(xué)(上)計算題專項練習(xí)附答案
- 四年級數(shù)學(xué)(簡便運算)計算題專項練習(xí)與答案
- 國家自然科學(xué)基金項目申請書
- 電力電纜故障分析報告
- 中國電信網(wǎng)絡(luò)資源管理系統(tǒng)介紹
- 2024年浙江首考高考選考技術(shù)試卷試題真題(答案詳解)
- 《品牌形象設(shè)計》課件
- 倉庫管理基礎(chǔ)知識培訓(xùn)課件1
- 藥品的收貨與驗收培訓(xùn)課件
- GH-T 1388-2022 脫水大蒜標(biāo)準(zhǔn)規(guī)范
- 高中英語人教版必修第一二冊語境記單詞清單
- 政府機關(guān)保潔服務(wù)投標(biāo)方案(技術(shù)方案)
- HIV感染者合并慢性腎病的治療指南
評論
0/150
提交評論