?? ds18b20xu.asm
字號:
;|--------------------------------------------------|
;| 讀出ds1820序列號應(yīng)用程序,P1.0接ds1820 |
;|--------------------------------------------------|
ORG 0000H
AJMP MAIN
ORG 0020H
;===========================================================
MAIN: MOV SP,#60H
CLR EA ;使用ds1820一定要禁止任何中斷產(chǎn)生
LCALL INT ;初始化ds1820
MOV A,#33H
LCALL WRITE ;送入讀ds1820的ROM命令
LCALL READ ;開始讀出當(dāng)前ds1820序列號
MOV 40H,A
LCALL READ
MOV 41H,A
LCALL READ
MOV 42H,A
LCALL READ
MOV 43H,A
LCALL READ
MOV 44H,A
LCALL READ
MOV 45H,A
LCALL READ
MOV 46H,A
LCALL READ
MOV 47H,A
LCALL READ
MOV 48H,A
LCALL READ
MOV 49H,A
SETB EA
SJMP $
;===========================================================
INT: CLR EA ;初始化ds1820子程序
L0: CLR P1.0 ;ds1820總線為低復(fù)位電平
MOV R2,#200
L1: CLR P1.0
DJNZ R2,L1 ;總線復(fù)位電平保持400us
SETB P1.0 ;釋放ds1820總線
MOV R2,#30
L4: JNZ R2,L4 ;釋放ds1820總線保持60us
CLR C ;清存在信號(存在C=1,不存在c=0)
ORL C,P1.0
JC L0 ;存在嗎?不存在則重新來
MOV R6,#80
L5: ORL C,P1.0
JC L3
DJNZ R6,L5
SJMP L0
L3: MOV R2,#240
L2: JNZ R2,L2
RET
;===========================================================
WRITE: CLR EA ;向ds1820寫操作命令子程序
MOV R3,#8 ;寫入ds1820的bit數(shù),一個(gè)字節(jié)8個(gè)bit
WT1: SETB P1.0
MOV R4,#8
RRC A ;把一個(gè)字節(jié)data(A)分成8個(gè)bit環(huán)移給 C
CLR P1.0 ;開始寫入ds1820總線要處于復(fù)位(低)狀態(tài)
WT2: JNZ R4,WT2 ;ds1820總線復(fù)位保持16us
MOV P1.0,C ;寫入一個(gè)bit
MOV R4,#20
WT3: JNZ R4,WT3 ;等待40us
DJNZ R3,WT1 ;寫入下一個(gè)bit
SETB P1.0 ;重新釋放ds1820總線
RET
;===========================================================
READ: CLR EA
MOV R6,#8 ;連續(xù)讀8個(gè)bit
RE1: CLR P1.0 ;讀前總線保持為低
MOV R4,#4
NOP
SETB P1.0 ;開始讀,總線釋放
RE2: JNZ R4,RE2 ;持續(xù)8us
MOV C,P1.0 ;從ds1820總線讀得一個(gè)bit
RRC A ;把讀得的位值環(huán)移給 A
MOV R5,#30
RE3: JNZ R5,RE3 ;持續(xù)60us
DJNZ R6,RE1 ;讀下一個(gè)bit
SETB P1.0 ;重新釋放ds1820總線
RET
;===========================================================
END
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -