河北工业大学毕业论文
DS18CD5 EQU 46H DS18CD6 EQU 47H DS18CD7 EQU 48H DS18CD8 EQU 49H DS1864B EQU 4AH DS18ADS EQU 4BH
DS18DQ EQU P1.0 ;30H,31H,32H,33H: X 个位 十位 X MOD7: MOV SP,#60H
LCALL GET_TEMPER ;调用读温度子程序 LCALL READCODE AJMP MOD7
INIT_1820: ;DS18B20初始化 SETB DS18DQ
CLR DS18DQ ;延时,500US低MC MOV R7,#250 DJNZ R7,$ MOV R7,#150 DJNZ R7,$
SETB DS18DQ ;释放总线
LCALL DELAY60US ;15-60US的等待时间 MOV R6,#4 SETDSDQ: LCALL DELAY60US
JNB DS18DQ,SETDSDQFH ;60-240US内是否有返回信号,为0跳 DJNZ R6,SETDSDQ MOV R7,#250 DJNZ R7,$ CLR DS18FIG RET
22
河北工业大学毕业论文
SETDSDQFH: SETB DS18FIG MOV R7,#250 DJNZ R7,$ MOV R7,#100 DJNZ R7,$ RET;
数据处理程序: TEMP0: INC A AJMP TEMP1
TEMPCOV: MOV A,DS18SL ;数据处理子程序 TEMPCOV MOV B,#16 DIV AB JB B.3,TEMP0
TEMP1: MOV 34H,A ;将DS18SL的高四位右移四位,存入 34H中(温度值)
MOV A,B ;将DS18SL的低四位X10/16得小数后 一位数. MOV B,#10 MUL AB MOV B,#16 DIV AB
MOV 30H,A ;将小数后一位数.存入30H中 MOV A,DS18SH ;DS18SH中存放高8位数,权 重16 MOV B,#16 MUL AB
ADD A,34H ;34H中存入温度值的整数部分 MOV B,#10
23
河北工业大学毕业论文
DIV AB
MOV 31H,B ;个位存入31H中 MOV B,#10 ; DIV AB ;
MOV 32H,B ;十位存入32H中 MOV B,#10 ; DIV AB ;
MOV 35H,B ;百位存入33H中 MOV A,DS18SH MOV 33H,#10H ; JB ACC.7,EXIT7 MOV 33H,#00H EXIT7: RET
GET_TEMPER: ;读出转换后的温度值,并显示 SETB DS18DQ
LCALL INIT_1820 ;先复位DS18B20 JB DS18FIG,TSS2
RET ;判断DS1820是否存在?若DS18B20不存在则返 TSS2: MOV DS18ADS,#0 DS18JX: LCALL DS18CODP MOV A,DS18ADS ADD A,#9 MOV DS18ADS,A CJNE A,#63,DS18JX RET DS18CODP:
LCALL MRCOVT ;转换指定的DS18B20的温度 LCALL MRRDTEDP ;显示温度
24
河北工业大学毕业论文
RET TEMP:
LCALL INIT_1820 JB DS18FIG,NEXT4 RET NEXT4: MOV DS18ADS,#9 MOV A,#0CCH ;SKIP ROM LCALL WRITE_1820 MOV A,#44H ;温度转换命令 LCALL WRITE_1820 LCALL DELAY1S LCALL MRRDTEDP
RET;写DS18B20的子程序(有具体的时序要求) WRITE_1820: ;写DS18B20 MOV R5,#8 DS18JXWE:
SETB DS18DQ ;初始化 CLR DS18DQ CLR DS18DQ MOV R7,#5
DJNZ R7,$ ;拉低15US内,写入数据 CLR C RRC A MOV DS18DQ,C
LCALL DELAY60US ;持续60US SETB DS18DQ ;写完一个位 DJNZ R5,DS18JXWE RET
READ_1820_CODE: ;读取CODE 64位
25
河北工业大学毕业论文
MOV R4,#8 ;读8次数
MOV R1,#DS18CD1 ;低位地址存在R1 DS18JXRD3:
MOV R5,#8 ;8位数据 DS18JXRD2: SETB DS18DQ
CLR DS18DQ ;前两句完成初始化 NOP
NOP ;延时至少1US
SETB DS18DQ ;上升沿,并在,15US内读数 MOV R7,#5 DJNZ R7,$ MOV C,DS18DQ RRC A
LCALL DELAY60US ;读时序,最少60US DJNZ R5,DS18JXRD2 MOV @R1,A INC R1
DJNZ R4,DS18JXRD3 SETB DS18DQ
RET;读DS18B20的程序,从DS18B20中读出两个字节的温度数 据
READ_18200:
MOV R4,#2 ;读两次数
MOV R1,#DS18SL ;低位地址存在R1 DS18JXRD1:
MOV R5,#8 ;8位数据 DS18JXRD: SETB DS18DQ
CLR DS18DQ ;前两句完成初始化
26