📄 18b20.asm
字号:
B20 BIT P1.0
ORG 0000H
AJMP INITIALIZATION
ORG 0030H
SENDA:
MOV SBUF,A
JNB TI,$
CLR TI
RET
DELAY600: ;精确延时600微秒子程序
MOV R6,#2
YS600D:MOV R7,#148
DJNZ R7,$
DJNZ R6,YS600D
RET
DELAY30: ;精确延时30微秒子程序
MOV R6,#4
YS30D:MOV R7,#2
DJNZ R7,$
DJNZ R6,YS30D
RET
DELAY80: ;精确延时80微秒子程序
MOV R6,#2
YS80D:MOV R7,#18
DJNZ R7,$
DJNZ R6,YS80D
RET
DELAY100010: ;精确延时100010微秒子程序
MOV R6,#216
MOV R5,#20
YS100010D:MOV R7,#230
DJNZ R7,$
DJNZ R6,YS100010D
DJNZ R5,YS100010D
RET
RESETSLOT:
CLR B20
LCALL DELAY600
SETB B20
LCALL DELAY30
MOV C,B20
JC RESETSLOT
LCALL DELAY600
RET
WRITESLOT_0:
NOP
CLR B20
LCALL DELAY80
SETB B20
RET
WRITESLOT_1:
NOP
CLR B20
NOP
NOP
NOP
NOP
NOP
NOP
SETB B20
LCALL DELAY80
RET
READSLOT_C:
NOP
CLR B20
NOP
NOP
SETB B20
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
MOV C,B20
LCALL DELAY30
RET
WRITE_A:
MOV R0,#008H
BEGINWRITE:
RRC A
JC WRITE1
LCALL WRITESLOT_0
AJMP RETURN_WRITE
WRITE1:
LCALL WRITESLOT_1
RETURN_WRITE:
DJNZ R0,BEGINWRITE
RET
READ_A:
MOV R0,#008H
BEGINREAD:
LCALL READSLOT_C
RRC A
DJNZ R0,BEGINREAD
RET
INITIALIZATION:
MOV TMOD,#20H
MOV TL1,#0E6H
MOV TH1,#0E6H
SETB TR1
MOV SCON,#01010000B
MAIN:
LCALL RESETSLOT
MOV A,#0CCH
LCALL WRITE_A
MOV A,#044H
LCALL WRITE_A
SETB B20
JNB B20,$
LCALL DELAY600
LCALL RESETSLOT
MOV A,#0CCH
LCALL WRITE_A
MOV A,#0BEH
LCALL WRITE_A
LCALL READ_A
MOV R2,A
LCALL READ_A
MOV R3,A
;===========将整数温度值放入A===============
MOV A,R3
ANL A,#00FH
RL A
RL A
RL A
RL A
MOV R3,A
MOV A,R2
RR A
RR A
RR A
RR A
ANL A,#00FH
ORL A,R3
;=============转换成BCD=====================
MOV B,#00AH
DIV AB
MOV R0,B
MOV R1,A
;============================================
CPL P3.7
;AJMP MAIN
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -