18B20溫度傳感器實(shí)驗(yàn)筆記重點(diǎn)_第1頁
18B20溫度傳感器實(shí)驗(yàn)筆記重點(diǎn)_第2頁
18B20溫度傳感器實(shí)驗(yàn)筆記重點(diǎn)_第3頁
18B20溫度傳感器實(shí)驗(yàn)筆記重點(diǎn)_第4頁
18B20溫度傳感器實(shí)驗(yàn)筆記重點(diǎn)_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、DS18B20溫度傳感器實(shí)驗(yàn)筆記李進(jìn) 2008-12-10DS18b20用12位存貯溫度值,最高位為符號(hào)位下表(表1)為18b20的溫度存儲(chǔ)方式。負(fù)溫度 S = 1,正溫度S = 0。溫度值 以補(bǔ)碼表示。正數(shù)與原碼相同,負(fù)數(shù)是補(bǔ)碼,需要再次求補(bǔ)后才能正確顯示。如:0550H 為+85E, 0191H 為 +25.0625C, FC90H 為-55C。DS18B20的輸出位數(shù)被設(shè)置成(9,10,11或12bit ),出廠的默認(rèn)值是12bit。 對(duì)應(yīng)的分辨率是 0.5E,0.25C,0.125C或 0.0625C。使用Convert T44h命令啟動(dòng)一次轉(zhuǎn)換,溫度的16位轉(zhuǎn)換值存于暫存器中,并 擴(kuò)

2、展兩位符號(hào)位。使用 Read ScratchpadBEh命令,將溫度值通過1線口輸出,低 位(LSB )首先輸出。LSB MSB整型數(shù)表示(int型,最高4位無用)TEMPERATLREDIGITAL OLTPUT(Binary)+125Cooooo111 not ooooDIGITAL OUTPUT(Hex)07DOh+85.0?C0000 0101 0101 OOOO055011+25.0625C0000 0001 1001 000)0191b+ 1OJ25C+0.5C0000 0000 1010(X)100000 OOOO OOOO 100000A2h0008h(TCOOOO (XXX)

3、 oooo ooooOOOOhSD7D6D5D4D3D2DIDO2*22 *MSBunit=VLSBSSSSs2$表格數(shù)據(jù)說明:表中的數(shù)據(jù)是從18B20中讀取的溫度值,以補(bǔ)碼的形式表示。因此,其真實(shí) 值應(yīng)求補(bǔ)得到,(補(bǔ)碼的補(bǔ)碼為真值)。1.正數(shù)的補(bǔ)碼就是該數(shù)本身,因此不必求補(bǔ)得真。例如,+0.5 讀得0000 0000 0000 1000B前4位舍掉后,所余的最高位(D11)是符號(hào)位,0代表正數(shù)。最后4位(D3D0)是小數(shù),按小數(shù)化為十進(jìn)制 數(shù),因此.1000 B= 0.5。+ 85OC讀數(shù)舍掉最高4位后,得0101 0101 0000B,所余12位二進(jìn)制數(shù),最高位(D11)是符號(hào)位,0表示正

4、數(shù),D10D4共7位101 0101B = 85,后4位是小數(shù);+ 25.0625C讀得0001 1001 0001B整數(shù)部分意義同上,前 7位整數(shù)001 1001B = 25,最后 4 位小數(shù):.0001B = .06252.負(fù)數(shù)求補(bǔ)得真值。求補(bǔ)時(shí)不必考慮小數(shù)點(diǎn)位置,讀得的測(cè)溫結(jié)果是16位二進(jìn)制數(shù),最高4位無用舍去,所余12位保留最高位(D11)符號(hào)位不變,其余11 位求補(bǔ),得到真值。在送顯示需要化為十進(jìn)制數(shù)時(shí),再考慮按前7位整數(shù),后4位小數(shù)進(jìn)行轉(zhuǎn)化。真值的前7位是整數(shù),按整數(shù)化為十進(jìn)制數(shù),最后 4位是小數(shù)。按 小數(shù)化為十進(jìn)制小數(shù)。例如-0.5C,讀得1111 1111 1111 100Q舍

5、去最高4位后,所余的最高位 (D11)是符號(hào)位,1代表負(fù)數(shù),D10D0求補(bǔ)得到000 0000 1000B最后4位 (D3D0)是小數(shù),按小數(shù)化為十進(jìn)制數(shù),因此1000 0000 1000B = -0.5-85C讀數(shù)舍掉最高4位后,得1010 1011 0000B,最高位(D11)是符號(hào)位,1表示負(fù)數(shù),D10D0共11位010 1011 000Q對(duì)其求補(bǔ)得101 0101 0000B = 85,力卩 上符號(hào)位是1101 0101 0000B = - 85,后4位是小數(shù)0;-25.0625 C 讀得 1111 1110 0110 1111,舍掉最高 4 位后,得 1110 0110 1111,

6、保留符號(hào)位,求補(bǔ)得:1001 1001 0001B,化為十進(jìn)制數(shù)為-25.0625。對(duì)18B20操作時(shí),無論讀寫,所有數(shù)據(jù)都是以最低有效位在前的方式進(jìn)行讀 寫。18B20控制命令字命令說明協(xié)議單線總錢發(fā)出協(xié)議后備注溫度轉(zhuǎn)換命令Convert T開始溫度轉(zhuǎn)換44h述溫度忙狀態(tài)A1存儲(chǔ)器命令Read Scratchpad讀取暫存器和CRU字節(jié)BEhf朮數(shù)據(jù)購(gòu)9字節(jié)AWrite Schratchpiid把字節(jié)寫入暫存器的地址2和* (TH 和TL溫度報(bào)警觸發(fā))4 Eh丐柄個(gè)的?節(jié)劍地址2 W3Copy Scratchpad把M存器內(nèi)容拷貝到非S尖性存儲(chǔ) 器中(僅指地址2利3)48hu讀樣!J!狀態(tài)2

7、Recall E2把IE助矢性存儲(chǔ)器中的值召冋暫存 器溫度報(bào)警帥發(fā)B8hf讀溫度忙狀態(tài)Read Supply Power標(biāo)識(shí)的供電模戌B4hc讀供電狀態(tài)1、溫度轉(zhuǎn)換時(shí)間可長(zhǎng)達(dá)500ms。接到溫度轉(zhuǎn)換的協(xié)議后,如果器件不是從 VDD供電的話,I/O線就必須至少保持500ms高電平。這樣,發(fā)出一個(gè) Convert T 命令之后,單線總線上在這段時(shí)間內(nèi)就不能有其他活動(dòng)。2、接到Copy Scratchpad協(xié)議后,如果器件不是從 VDD供電的話,I/O線必須至少保持10ms高電平。這樣,在發(fā)出一個(gè)Copy Scratchpad命令后,這段時(shí)間內(nèi)單線總線上就不能有其 他活動(dòng)??偩€控制器發(fā)出(TX )

8、一個(gè)復(fù)位脈沖(一個(gè)最少保持 480卩s的低電平信 號(hào)),然后釋放總線,進(jìn)入接收狀態(tài)(RX )。單線總線由5K上拉電阻拉到高電 平。探測(cè)到I/O引腳上的上升沿后,DS1820等待1560卩s,然后發(fā)出存在脈沖 (一個(gè)60240卩s的低電平信號(hào))。初始化通過單線總線的所有執(zhí)行(處理)都從一個(gè)初始化序列開始。初始化序列包括 一個(gè)由總線控制器發(fā)出的復(fù)位脈沖和跟有其后由從機(jī)發(fā)出的存在脈沖存在脈沖讓總線控制器知道DS1820在總線上且已準(zhǔn)備好操作。詳見單線信 號(hào)”節(jié)。最常用的ROM操作命令Skip ROM CCh這條命令允許總線控制器不用提供 64位ROM編碼就使用存儲(chǔ)器操作命令, 在單點(diǎn)總線情況下用以節(jié)

9、省時(shí)間。如果總線上不止一個(gè)從機(jī),在Skip ROM命令之后跟著發(fā)一條讀命令,由于多個(gè)從機(jī)同時(shí)傳送信號(hào),總線上就會(huì)發(fā)生數(shù)據(jù)沖突(漏 極開路下拉效果相當(dāng)于相與)。I/O信號(hào)DS1820需要嚴(yán)格的協(xié)議以確保數(shù)據(jù)的完整性。協(xié)議包括幾種單線信號(hào)類型: 復(fù)位脈沖、存在脈沖、寫0、寫1、讀0和讀1。所有這些信號(hào),除存在脈沖外, 都是由總線控制器發(fā)出的。和 DS1820間的任何通訊都需要以初始化序列開始,初 始化序列見圖11。(主機(jī)發(fā))一個(gè)復(fù)位脈沖跟著(DS18b20回應(yīng))一個(gè)存在脈沖 表明DS1820已經(jīng)準(zhǔn)備好發(fā)送和接收數(shù)據(jù)(適當(dāng)?shù)?ROM命令和存儲(chǔ)器操作命 令)。息踐屋制器很電平為低電平DS1820低電平

10、 電幽上揑miMnwmi im,Jan 皿 e eg椚IVcc46182C16 *60|1S43Q 口 s mi nmum 0510201)(1存在脈沖屮J460 240 肚T1 1r圖11復(fù)位操作時(shí)序讀/寫時(shí)間隙DS1820的數(shù)據(jù)讀寫是通過時(shí)間隙處理位和命令字來確認(rèn)信息交換。寫時(shí)間隙:當(dāng)主機(jī)把數(shù)據(jù)線從邏輯高電平拉到邏輯低電平的時(shí)候,寫時(shí)間隙開始。有兩種 寫時(shí)間隙:寫1時(shí)間隙和寫0時(shí)間隙。所有寫時(shí)間隙必須最少持續(xù) 60ys,包括兩 個(gè)寫周期間至少1卩啲恢復(fù)時(shí)間。I/O線電平變低后,DS1820在一個(gè)15卩到60卩的窗口內(nèi)對(duì)I/O線采樣。如果 線上是高電平,就是寫1,如果線上是低電平,就是寫 0

11、 (見圖12)主機(jī)要生成一個(gè)寫時(shí)間隙,必須把數(shù)據(jù)線拉到低電平然后釋放,在寫時(shí)間隙開 始后的15卩內(nèi)允許數(shù)據(jù)線拉到高電平。主機(jī)要生成一個(gè)寫0時(shí)間隙,必須把數(shù)據(jù)線拉到低電平并保持60卩&圖12(a寫時(shí)間隙時(shí)序圖讀時(shí)間隙當(dāng)從DS1820讀取數(shù)據(jù)時(shí),主機(jī)生成讀時(shí)間隙。當(dāng)主機(jī)把數(shù)據(jù)線從高電平拉到 低電平時(shí),寫時(shí)間隙開始。即:低電平(1卩S) 一延時(shí)15卩S我數(shù)據(jù)(DQ )-數(shù)據(jù)線必須保持至少1卩S氐電平;從DS1820輸出的數(shù)據(jù)在讀時(shí)間隙的下降沿 出現(xiàn)后15卩內(nèi)有效。因此,主機(jī)在讀時(shí)間隙開始后必須恢復(fù)高電平(停止把I/O腳驅(qū)動(dòng)為低電平)15卩s以讀取I/O腳狀態(tài)(見圖12)。在讀時(shí)間隙的結(jié)尾,I/O 引

12、腳將被外部上拉電阻拉到高電平。所有讀時(shí)間隙必須最少60卩s包括兩個(gè)讀周期間至少1卩啲恢復(fù)時(shí)間。圖13表示T INIT,T RC和T SAMPLE之和必須小于15卩s。圖14示出,系統(tǒng)時(shí)間可以用下面方法達(dá)到最大:T INIT和T RC保持時(shí)間盡可能??;把控制器采 樣時(shí)間放到15卩凋期的最后。1桎制器讀-1*時(shí)間鱒桎制器讀*0*時(shí)何防1 Iftse軽制器讀*1*時(shí)糾VCCGND圖12(b讀時(shí)間隙時(shí)序圖單線寫0時(shí)何陳單線寫0時(shí)間陳單線諛0時(shí)創(chuàng)障II丨丨單線寫0時(shí)沏霽單線寫0時(shí)間陳卑徒仃府聞曲I4佗 、LZJ參數(shù)符號(hào)垠小典型垠大卩位備注溫度轉(zhuǎn)換時(shí)間t(?ONV200500ms時(shí)間隙tSLOT60s J

13、120ps恢復(fù)時(shí)間60iu圖2- 25*3寫0時(shí)序圖中虛線所示。LZ以下子程序在MCS51仿真機(jī)上通過,其晶振為12M。初始化子程序RESET:PUSH B;保存B寄存器PUSH A ;保存A寄存器MOV A,#4 ;設(shè)置循環(huán)次數(shù)CLR P1.0;發(fā)出復(fù)位脈沖MOV B,#250 ;計(jì)數(shù) 250 次 DJNZ B,$;保持低電平500usSETB Pl.0 ;釋放總線MOV B,#6 ;設(shè)置時(shí)間常數(shù)CLR C;清存在信號(hào)標(biāo)志W(wǎng)AITL: JB PI.0,WH;若總線釋放跳出循環(huán)DJNZ B,WAITL ;總線低等待DJNZ ACC,WAITL;釋放總線等待一段時(shí)間 SJMP SHORTWH:

14、MOV B,#111 WH1:ORL C,P1.0DJNZ B,WH1 ;存在時(shí)間等待SHORT: POP APOP B RET(2寫時(shí)間隙當(dāng)主機(jī)總線t0時(shí)刻從高拉至低電平時(shí)就產(chǎn)生寫時(shí)間隙,見圖2.25-3、圖2.25-4。從t0時(shí)刻開始15us之內(nèi),應(yīng)將所需寫的位送到總線上。DSI820在t0后15-1 沖_ E0片60us間對(duì)總線采樣。若低電平寫入的位是 0,見圖2.25-3。若高電平寫入的位是 1,見圖2.254 連續(xù)寫2位間的間隙應(yīng)大于1us。A陽嘰-I-I |片J圖2” 2S-4寫I時(shí)啤寫位子程序(待寫位的內(nèi)容在 C中WRBIT: PUSH B;保存B MOV B,#28 ;設(shè)置時(shí)間

15、常數(shù) CLR P1.0 ;寫開始NOP ;1us NOP ;1usNOP ;1us NOP ;1us N0P;1usMOV Pl.0,C;C 內(nèi)容到總線 WDLT: DJNZ B,WDLT;等待56usPOP B SETB Pl.0 ;釋放總線 RET;返回寫字節(jié)子程序(待寫內(nèi)容在 A中:WRBYTB:PUSH B:保存 B MOV B,#8H;設(shè)置寫位個(gè)數(shù) WLOP: RRC A;把寫的位放到CACALL WRBIT ;調(diào)寫 1 位子程序 DJNZ B,WLOP ;8 位全寫完? POP B RET(3讀時(shí)間隙見圖2.25-5。主機(jī)總線tO時(shí)刻從高拉至低電平時(shí),總線只須保持低電平I 7us,

16、之后在t1時(shí)刻將總線拉高,產(chǎn)生讀時(shí)間隙,讀時(shí)間隙在 t1時(shí)刻后t2時(shí)刻前有 效。t2距t0為15us。也就是說t2時(shí)刻前主機(jī)必須完成讀位,并在t0后的60 us 120 us內(nèi)釋放總線。讀位子程序(讀得的位到C中-主機(jī)厲作用 DS1驗(yàn)0起作用 一上拉電用圖匕益”5讀時(shí)序RDBIT: PUSH B ;保存 BPUSH A;保存AMOV B,#23 ;設(shè)置時(shí)間常數(shù)CLR P1.0 ;讀開始圖 2 25 5 的 tO 時(shí)刻 NOP ;1us NOP ;1us NOP;1usNOP ;1us SETB Pl.0 ;釋放總線MOV A,P1 ;P1 口讀到 A MOV C,0E0H ;P1.0 內(nèi)容 C

17、NOP ;1us NOP ;1us NOP;1usNOP ;1usRDDLT: DJNZ B,RDDLT ;等待 46usSETB P1.0 POP APOP B RET讀字節(jié)子程序(讀到內(nèi)容放到A中RDBYTE: PUSH B;保存 B RLOP: MOV B,#8H;設(shè)置讀位數(shù)ACALL RDBIT ;調(diào)讀1位子程序 RRC A;把讀到位在C中并依次送給 A DJNZ B,RLOP ;8位讀完? POP B;恢復(fù)BRETDS18B20 程序凌陽單片機(jī)測(cè)溫子程序測(cè)溫子程序子程序在測(cè)溫時(shí)首先設(shè)置DS18B20的DQ為高電平,然后初始化DS18B20,在成功 后DS18B20接收單片機(jī)的命令,為

18、了簡(jiǎn)單起見這里跳過ROM命令設(shè)置匹配過程,然后再次初始化DS18B20在成功后啟動(dòng)測(cè)溫,然后將溫度保存起來,返回弓:HUtUU* ? j削垃1耐中也其中讀寫DS18B20的驅(qū)動(dòng)程序在DS18B20.C文件中,可以參考DS18B20的讀寫時(shí)序圖來理解程序。單線總線的空閑狀態(tài)是高電平。無論任何理由需要暫停某一執(zhí)行過程時(shí),如果還想恢復(fù)執(zhí)行的話,總線必必須停留在空閑狀態(tài)。在恢復(fù)期間,如果單線總線處于非活動(dòng)(高電平)狀態(tài),位與位間的恢復(fù)時(shí)間可以無限長(zhǎng)。如果總線停留在低電平超過 480卩s總線上的所有器件都將被復(fù)位WENDU_L EQU 29H;用于保存讀出溫度的低字節(jié)WENDU_H EQU 28H;用于

19、保存讀出溫度的高字節(jié)XIAOSHU EQU 27H;用于保存溫度的小數(shù)部分ZHENGSHU EQU 26H;用于保存整數(shù)部分BIAOZHI BIT 50H;18B20 檢查位1為存在,0為不存在ORG 0000HAJMP MAINORG 0030HMAIN:MOV SCON,#00HACALL DUWENACALLZHENGHEACALL BCDACALL DISPACALL TIME1AJMP MAIN;讀溫度子程序DUWEN:SETB P2.0ACALL FUWEI ;讀溫度之前必須先復(fù)位JB BIAOZHI,CUNZAI;查看標(biāo)志位看18B20是否存在,1為存在,0為不存在RET ;不存

20、在則返回CUNZAI:;存在則開始讀溫度MOV A,#0CCH ;跳過 ROM 匹配ACALL XIE ;調(diào)寫子程序MOV A,#44H ;發(fā)出溫度轉(zhuǎn)換命令A(yù)CALL XIE ;調(diào)寫子程序ACALL TIME1 ;調(diào)1秒延時(shí),等等AD轉(zhuǎn)換完成,現(xiàn)在分辨率為12位,溫度最大轉(zhuǎn)換時(shí)間為750MS ACALL FUWEI ;讀溫前需要復(fù)位MOV A,#0CCH ;跳過 ROM 匹配ACALL XIEMOV A,#0BEH ;發(fā)讀溫度命令A(yù)CALL XIEACALL DUSHU ;將闈出數(shù)據(jù)讀回CLR P1.2RET復(fù)位子程序;18B20復(fù)位需要將數(shù)據(jù)位拉低500us;18B20收到信號(hào)后要等待16-

21、60us,然后發(fā)出60-240us的低脈沖JFUWEI:SETB P2.0NOPCLR P2.0MOV R0,#3INTE:MOV R1,#107 ;設(shè)一個(gè) 537us 延時(shí)KK1: DJNZ R1,KK1DJNZ R0,INTESETB P2.0拉高數(shù)據(jù)線,等待回應(yīng)NOPNOPNOPMOV R0,#25;INTE1:JNB P2.0,INTE2 ;延時(shí)延時(shí)50us等待18B20回應(yīng),若返回低脈沖則說明18B20存在DJNZ R0 ,INTE1AJMP INTE3 ;經(jīng)過反應(yīng)時(shí)間而沒檢測(cè)到18B20的存在,則跳轉(zhuǎn)去清零標(biāo)志位INTE2:SETB BIAOZHI ;檢測(cè)至U 18B20存在,置1

22、標(biāo)志位CLR P1.0AJMP INTE4INTE3:CLR BIAOZHI ;沒檢測(cè)到18B20,清零標(biāo)志位AJMP INTE5INTE4:MOV R0,#120 ;延時(shí)240us,確定回應(yīng)信號(hào)已發(fā)完KK: DJNZ R0,KKINTE5:SETB P2.0RETJ;寫18B20子程序JXIE:MOV R2,#8 ;寫計(jì)數(shù)寄存器,一共有 8位數(shù)據(jù)CLR CLP:CLR P2.0MOV R3,#6;設(shè)一個(gè)延時(shí)LL1:DJNZ R3,LL1RRC A;右循環(huán),先輸出低位MOV P2.0,CMOV R3,#23;設(shè)延時(shí)LL: DJNZ R3,LL;SETB P2.0NOPNOPDJNZ R2,LP

23、 ;判斷是否完成數(shù)據(jù)傳送SETB P2.0 ;完成傳送拉高數(shù)據(jù)位RETJ;從18B20中讀出溫度數(shù)據(jù)子程序JDUSHU: MOV R4,#2 ; 設(shè)讀回?cái)?shù)據(jù)個(gè)數(shù)指針MOV R1,#WENDU_L ;把溫度數(shù)據(jù)低位存入 29HRE:MOV R2,#8 ;設(shè)數(shù)據(jù)長(zhǎng)度指針 RE1: CLR CSETB P2.0;P2.0是 DQ 口 NOP;等待2卩S NOPCLR P2.0;啟動(dòng)讀數(shù)NOP;延時(shí)3卩S NOPNOPSETB P2.0;準(zhǔn)備讀數(shù)MOV R3,#9 ;延時(shí)15 ySDJNZ R3,$MOV C,P2.0;讀 DQ(P2.0 MOV R3,#23;讀完后,延時(shí)NN: DJNZ R3,NNRRC ADJNZ R2,RE1MOV R1,A DEC R1;高位存入 28HDJNZ R4,RERETJ; 數(shù)據(jù)整合子程序;溫度源數(shù)據(jù)的整合,讀出數(shù)據(jù)的高字節(jié)的低四位決定溫度的整數(shù)部分;低字節(jié)的低四位決定小數(shù)部分ZHENGHE:MOV A,#OFHANL A

溫馨提示

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

評(píng)論

0/150

提交評(píng)論