空调机的温度控制系统
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
-30-
空调机的温度控制系统
CJNE A,#63,DS18JX RET DS18CODP:
LCALL MRCOVT ;转换指定的DS18B20的温度 LCALL MRRDTEDP ;显示温度 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
-30-
空调机的温度控制系统
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位 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
-30-
空调机的温度控制系统
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 ;前两句完成初始化 NOP
NOP ;延时至少1US
SETB DS18DQ ;上升沿,并在,15US内读数 MOV R7,#5 DJNZ R7,$ MOV C,DS18DQ RRC A
LCALL DELAY60US ;读时序,最少60US DJNZ R5,DS18JXRD MOV @R1,A
-30-
空调机的温度控制系统
DEC R1
DJNZ R4,DS18JXRD1 SETB DS18DQ RET
READ_1820_1: ;读取1位 SETB DS18DQ
CLR DS18DQ CLR DS18DQ CLR DS18DQ SETB DS18DQ MOV R7,#5 DJNZ R7,$ JB DS18DQ,WEFH LCALL DELAY10MS WEFH:
LCALL DELAY60US RET
READCODE: ;读取64位ROM,并显示出来 SETB DS18DQ LCALL INIT_1820 JB DS18FIG,NEXT RET NEXT: MOV A,#33H LCALL WRITE_1820
-30-