RET ; 若DS18B20不存在则返回
TSS2:
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
LCALL INIT_1820
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
LCALL WRITE_1820
LCALL READ_18200
MOV 37H,A ; 将读出的温度数据保存
RET
; *****************************************
; 写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