
a)寄生電源工作方式
(b)外接電源工作方式
圖4DS18B20與微處理器的典型連接圖
INI11:CLRDAT
DJNZR2,INI11;主機(jī)發(fā)復(fù)位脈沖持續(xù)3μs×200=600μs
SETBDAT;主機(jī)釋放總線,口線改為輸入
MOVR2,#30
IN12:DJNZR2,INI12;DS18B20等待2μs×30=60μs
CLRC
ORLC,DAT;DS18B20數(shù)據(jù)線變低(存在脈沖)嗎?
JCINI10;DS18B20未準(zhǔn)備好,重新初始化
MOVR6,#80
INI13:ORLC,DAT
JCINI14;DS18B20數(shù)據(jù)線變高,初始化成功
DJNZR6,INI13;數(shù)據(jù)線低電平可持續(xù)3μs×80=240μs
SJMPINI10;初始化失敗,重來
INI14:MOVR2,#240
IN15:DJNZR2,INI15;DS18B20應(yīng)答最少2μs×240=480μs
RET
;------------------------
WRITE:CLREA
MOVR3,#8;循環(huán)8次,寫一個字節(jié)
WR11:SETBDAT
MOVR4,#8
RRCA;寫入位從A中移到CY
CLRDAT
WR12:DJNZR4,WR12
;等待16μs
MOVDAT,C;命令字按位依次送給DS18B20
MOVR4,#20
WR13:DJNZR4,WR13
;保證寫過程持續(xù)60μs
DJNZR3,WR11
;未送完一個字節(jié)繼續(xù)
SETBDAT
RET
;------------------------
READ:CLREA
MOVR6,#8;循環(huán)8次,讀一個字節(jié)
RD11:CLRDAT
MOVR4,#4
NOP;低電平持續(xù)2μs
SETBDAT;口線設(shè)為輸入
RD12:DJNZR4,RD12
;等待8μs
MOVC,DAT
;主機(jī)按位依次讀入DS18B20的數(shù)據(jù)
RRCA;讀取的數(shù)據(jù)移入A
MOVR5,#30
RD13:DJNZR5,RD13
;保證讀過程持續(xù)60μs
DJNZR6,RD11
;讀完一個字節(jié)的數(shù)據(jù),存入A中
SETBDAT
RET
;------------------------
主機(jī)控制DS18B20完成溫度轉(zhuǎn)換必須經(jīng)過三個步驟:初始化、ROM操作指令、存儲器操作指令。必須先啟動DS18B20開始轉(zhuǎn)換,再讀出溫度轉(zhuǎn)換值。假設(shè)一線僅掛接一個芯片,使用默認(rèn)的12位轉(zhuǎn)換精度,外接供電電源,可寫出完成一次轉(zhuǎn)換并讀取溫度值子程序GETWD。
GETWD:LCALLINIT
MOVA,#0CCH
LCALLWRITE;發(fā)跳過ROM命令
MOVA,#44H
LCALLWRITE;發(fā)啟動轉(zhuǎn)換命令
LCALLINIT
MOVA,#0CCH;發(fā)跳過ROM命令
LCALLWRITE
MOVA,#0BEH;發(fā)讀存儲器命令
LCALLWRITE
LCALLREAD
MOVWDLSB,A
;溫度值低位字節(jié)送WDLSB
LCALLREAD
MOVWDMSB,A
;溫度值高位字節(jié)送WDMSB
RET
……
子程序GETWD讀取的溫度值高位字節(jié)送WDMSB單元,低位字節(jié)送WDLSB單元,再按照溫度值字節(jié)的表示格式及其符號位,經(jīng)過簡單的變換即可得到實際溫度值。
如果一線上掛接多個DS18B20、采用寄生電源連接方式、需要進(jìn)行轉(zhuǎn)換精度配置、高低限報警等,則子程序GETWD的編寫就要復(fù)雜一些,限于篇幅,這一部分不再詳述,請參閱相關(guān)內(nèi)容。
我們已成功地將DS18B20應(yīng)用于所開發(fā)的“家用采暖洗浴器”控制系統(tǒng)中,其轉(zhuǎn)換速度快,轉(zhuǎn)換精度高,與微處理器的接口簡單,給硬件設(shè)計工作帶來了極大的方便,能有效地降低成本,縮短開發(fā)周期。





