GET: SETB P1.3 ;定时入口 LCALL INIT JB 00H,TSS1
RET ;若18B20不存在,则返回 TSS1:MOV A,#0CCH ;跳过ROM匹配 LCALL WR
MOV A,#44H LCALL WR
MOV R0,#250 TSS2:NOP
DJNZ R0,TSS2 LCALL INIT
MOV A,#0CCH LCALL WR
MOV A,#0BEH LCALL WR LCALL READ
MOV 55H,A RET INIT:SETB P1.3 NOP
CLR P1.3 MOV R0,#180 TSR1:NOP
DJNZ R0,TSR1
SETB P1.3 NOP NOP MOV R0,#36
TSR2:JNB P1.3,TSR3
;发出温度转换命令 ;等待A/D转换结束,12位的话750MS ;跳过ROM匹配 ;发出读温度命令 ;将读出的温度数据保存 ;主机发出延时540us的复位低脉冲 DS18B20回应
25
;拉高数据线 ;等待 DJNZ R0,TSR2
LJMP TSR4 ;延时
TSR3:SETB 00H ;置标志位,表示DS18B20存在 LJMP TSR5
TSR4:CLR 00H ;清标志位,表示DS18B20不存在 LJMP TSR7
TSR5:MOV R0,#6BH TSR6:DJNZ R0,TSR6 TSR7:SETB P1.3 RET
WR: MOV R2,#8 CLR C WR1: CLR P1.3 MOV R3,#6 DJNZ R3,$ RRC A MOV P1.3,C MOV R3,#23 DJNZ R3,$ SETB P1.3 NOP
DJNZ R2,WR1 SETB P1.3 RET
READ:MOV R4,#2 MOV R0,#32H RE00:MOV R2,#8 RE01:CLR C SETB P1.3 NOP
;200us
;复位成功,时序要求延时一段时间 ;写18B20程序 ;读18B20程序,读高位和地位 ;低位存入32H,高位存入31H 26
NOP CLR P1.3 NOP NOP NOP SETB P1.3 MOV R3,#7 DJNZ R3,$ MOV C,P1.3 MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE01 MOV @R0,A DEC R0 DJNZ R4,RE00 RET
CONV:MOV R7,#04 RED0:CLR C MOV A,31H RRC A MOV 31H,A MOV A,32H RRC A MOV 32H,A DJNZ R7,RED0 RET
OBCD:MOV A,32H MOV B,#100 DIV AB
10进制27
;将温度转换为 MOV R3,A MOV A,#10 XCH A,B DIV AB
MOV 51H,A ;高位存在51H MOV 52H,B ;低位存在52H RET
28

