RST_P: ;-------------------复位和接收脉冲
CLR DQ
MOV R2,#250 ;delay 500 uS
DJNZ R2,$
SETB DQ
MOV R2,#10 ;delay 20 uS
DJNZ R2,$
presence_pulse:
JB DQ,$ ;Rx presence pulse
JNB DQ,NEXT1
MOV TEMP_NUM,#0
LJMP DISP
NEXT1:
RET
SENT_1: ;发送命令8位
MOV R1,#8
CLR C
ROLL1: RRC A
JC W_BIT1
CLR DQ
SJMP W_BIT0
W_BIT1:SETB DQ
W_BIT0:
LCALL DELAY1
DJNZ R1,ROLL1
RET
TEMP_T: ;温度转换,在外接电源情况下
JNB DQ,$
RET
READ_1: ;读8位数到R7所指的地址
MOV R1,#8
MOV A,#0
CLR C
ROLL2: JB DQ,R_BIT1
CLR C
RRC A
SJMP R_BIT0
R_BIT1:SETB C
R_BIT0:
LCALL DELAY1
DJNZ R1,READ_1
MOV @R0, A
LCALL DELAY1
RET
;-------------------将从DS18B20中读出的温度数据进行转换
TEMP_COV:
MOV A,#0F0H
ANL A,TEMP_L ; 舍去温度低位中小数点后的四位温度数值
SWAP A
MOV TEMP_NUM,A
MOV A,TEMP_L
JNB ACC.3,TEMP_COV1 ; 四舍五入去温度值
INC TEMP_NUM
TEMP_COV1:
MOV A,TEMP_H
ANL A,#07H
SWAP A
ORL A,TEMP_NUM
MOV TEMP_NUM,A ; 保存变换后的温度数据
LCALL BIN_BCD
RET
;-------------------将16进制的温度数据转换成压缩BCD码
BIN_BCD:
MOV DPTR,#TEMP_TAB
MOV A,TEMP_NUM
MOVC A,@A+DPTR
MOV TEMP_NUM,A
RET
TEMP_TAB:
DB 00H,01H,02H,03H,04H,05H,06H,07H
DB 08H,09H,10H,11H,12H,13H,14H,15H
DB 16H,17H,18H,19H,20H,21H,22H,23H
DB 24H,25H,26H,27H,28H,29H,30H,31H
DB 32H,33H,34H,35H,36H,37H,38H,39H
DB 40H,41H,42H,43H,44H,45H,46H,47H
DB 48H,49H,50H,51H,52H,53H,54H,55H
DB 56H,57H,58H,59H,60H,61H,62H,63H
DB 64H,65H,66H,67H,68H,69H,70H,71H
DB 72H,73H,74H,75H,76H,77H,78H,79H
DB 80H,81H,82H,83H,84H,85H,86H,87H
DB 88H,89H,90H,91H,92H,93H,94H,95H
DB 96H,97H,98H,99H
;------------------重新写DS18B20暂存存储器设定值
RE_CONFIG:
JB FLAG1,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1
RET
RE_CONFIG1:
MOV A,#0CCH ; 发SKIP ROM命令
LCALL SENT_1
MOV A,#4EH ; 发写暂存存储器命令
LCALL SENT_1
MOV A,#0FFH ; TH(报警上限)中写入00H
LCALL SENT_1
MOV A,#00H ; TL(报警下限)中写入00H
LCALL SENT_1
MOV A,#7FH ; 选择12位温度分辨率
LCALL SENT_1
RET
DISP: ;显示
略..
RET
MAIN:
LCALL RST_P
LCALL RE_CONFIG
LCALL RST_P ;RESET
MOV A,#0CCH ;SKIP
LCALL SENT_1
MOV A,#44H ;TEMPER CONVERT
LCALL SENT_1
LCALL TEMP_T ;DEAL
LCALL RST_P
MOV A,#0CCH ;SKIP
LCALL SENT_1
MOV A,#0BEH ;READ TEMPER
LCALL SENT_1
MOV R0,#TEMP_L ;PLACE TL
LCALL READ_1
MOV R0,#TEMP_H ;PLACE TH
LCALL READ_1
LCALL RST_P
LCALL TEMP_COV
LCALL DISP
END