?? xulie.asm
字號:
;|--------------------------------------------------|
;| 讀出ds1820序列號應用程序,P1.0接ds1820 |
;|--------------------------------------------------|
ORG 0000H
AJMP MAIN
ORG 0020H
MAIN:
MOV SP,#60H
CLR EA ;使用ds1820一定要禁止任何中斷產生
LCALL INT ;初始化ds1820
MOV A,#33H
LCALL WRITE ;送入讀ds1820的ROM命令
LCALL READ ;開始讀出當前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: ;初始化ds1820子程序
CLR EA
L0:CLR P1.0 ;ds1820總線為低復位電平
MOV R2,#200
L1:CLR P1.0
DJNZ R2,L1 ;總線復位電平保持400us
SETB P1.0 ;釋放ds1820總線
MOV R2,#30
L4:DJNZ 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:DJNZ R2,L2
RET
WRITE: ;向ds1820寫操作命令子程序
CLR EA
MOV R3,#8 ;寫入ds1820的bit數,一個字節8個bit
WR1:SETB P1.0
MOV R4,#8
RRC A ;把一個字節data(A)分成8個bit環移給 C
CLR P1.0 ;開始寫入ds1820總線要處于復位(低)狀態
WR2:DJNZ R4,WR2 ;ds1820總線復位保持16us
MOV P1.0,C ;寫入一個bit
MOV R4,#20
WR3:DJNZ R4,WR3 ;等待40us
DJNZ R3,WR1 ;寫入下一個bit
SETB P1.0 ;重新釋放ds1820總線
RET
READ:
CLR EA
MOV R6,#8 ;連續讀8個bit
RE1:CLR P1.0 ;讀前總線保持為低
MOV R4,#4
NOP
SETB P1.0 ;開始讀,總線釋放
RE2:DJNZ R4,RE2 ;持續8us
MOV C,P1.0 ;從ds1820總線讀得一個bit
RRC A ;把讀得的位值環移給 A
MOV R5,#30
RE3:DJNZ R5,RE3 ;持續60us
DJNZ R6,RE1 ;讀下一個bit
SETB P1.0 ;重新釋放ds1820總線
RET
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -