; *****************************************
; 写DS18B20的程序
; *****************************************
WRITE_1820:
MOV R2,#8
CLR C
WR1:CLR P2.0
NOP
NOP
NOP
NOP
RRC A
MOV P2.0,C
MOV R3,#35
DJNZ R3,$
SETB P2.0
NOP
DJNZ R2,WR1
SETB P2.0
RET
; *****************************************
; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据
; *****************************************
READ_18200:
MOV R4,#2 ; 将温度高位和低位DS18B20中读
RE00:MOV R2,#8
RE01:CLR C
SETB P2.0
NOP
NOP
CLR P2.0
NOP
NOP
NOP
SETB P2.0
NOP
NOP
MOV C,P2.0
MOV R3,#35
RE20:
DJNZ R3,RE20
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
; *****************************************
; 将从DS18B20中读出的温度数据进行转换
; *****************************************
TEMPER_COV:
MOV A,#0F0H
ANL A,36H ; 舍去温度低位中小数点
SWAP A
MOV 37H,A
MOV A,36H
JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值
INC 37H
TEMPER_COV1:
MOV A,35H
ANL A,#07H
SWAP A
ADD A,37H
MOV 37H,A ; 保存变换后的温度数据
LCALL BIN_BCD
RET
; *****************************************
; 将16进制的温度数据转换成压缩BCD码
; 38H中放百位,37十位,36个位
; *****************************************
BIN_BCD:
MOV 39H,37H
MOV&nb
MOV B,#100
DIV AB
MOV 38H,A
MOV 37H,B
XCH A,B
MOV B,#10
DIV AB
MOV 37H,A
MOV 36H,B
RET
DISP: SETB RS0
MOV R0, #36H
MOV R7, #3
LOOPP:MOV A, @R0
MOV DPTR, #TAB
MOVC A, @A+DPTR
MOV SBUF, A
JNB TI, $
CLR TI
INC R0
DJNZ R7, LOOPP
CLR RS0
RET
TAB: DB 11H, 0D7H, 32H, 92H, 0D4H, 98H, 18H, 0D1H, 10H, 90H ,0FFH, 070H, 0FEH
; 延时子程序
T12MS: SETB RS1
MOV R7, #18H
TM: MOV R6, #0FFH
TM6: DJNZ R6, TM6
DJNZ R7, TM
CLR RS1
RET
; 开机延时程序
T1S: SETB RS1
MOV R6, #3
LSP:ACALL T12MS
DJNZ R6, LSP
CLR RS1
RET
END