TEMPER_L EQU 36H TEMPER_H EQU 35H TEMPER_d EQU 61H ;小数位 TEMPER_NUM EQU 60H FLAG1 BIT 00H DQ BIT P2.2 dula bit P2.6; wela bit P2.7; bai_c equ 37h sh_c equ 38h g_c equ 39h MOV SP,#70H AAA:LCALL GET_TEMPER LCALL TEMPER_COV mov a,TEMPER_NUM ;分开 TEMPER_NUM anl a,#0f0h swap a mov bai_c,a mov a,TEMPER_NUM anl a,#0fh mov sh_c,a mov g_c,TEMPER_d mov r2,#256 lplp:lcall display djnz r2,lplp LJMP AAA NOP ;------------------读出转换后的温度值 GET_TEMPER: LCALL INIT_1820 ;初始化程序 SETB DQ ; 定时入口 BCD: JB FLAG1,S22 LJMP BCD ; 若DS18B20 不存在则返回 S22:LCALL DELAY1 MOV A,#0CCH ; 跳过 ROM 匹配------0CC LCALL WRITE_1820 MOV A,#44H ; 发出温度转换命令 LCALL WRITE_1820 NOP LCALL DELAY LCALL DELAY CBA:LCALL INIT_1820 JB FLAG1,ABC LJMP CBA ABC:LCALL DELAY1 MOV A,#0CCH ; 跳过ROM 匹配 LCALL WRITE_1820 MOV A,#0BEH ; 发出读温度命令 LCALL WRITE_1820 LCALL READ_18200 ;或者 READ_1820 RET ;------------------读DS18B20 的程序,从DS18B20 中读出一个字节的数据 READ_1820: MOV R2,#8 RE1: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE1 RET ;-------------------写 DS18B20 的程序 WRITE_1820: MOV R2,#8 CLR C WR1: CLR DQ MOV R3,#6 DJNZ R3,$ RRC A MOV DQ,C MOV R3,#23 DJNZ R3,$ SETB DQ NOP DJNZ R2,WR1 SETB DQ RET ;-------------------读DS18B20 的程序,从DS18B20 中读出两个字节的温度数据 READ_18200: MOV R4,#2 ; 将温度高位和低位从DS18B20 中读出 MOV R1,#36H ; 低位存入 36H(TEMPER_L),高位存入 35H(TEMPER_H) RE00: MOV R2,#8 RE01: CLR C SETB DQ NOP NOP CLR DQ NOP NOP NOP SETB DQ MOV R3,#7 DJNZ R3,$ MOV C,DQ MOV R3,#23 DJNZ R3,$ RRC A DJNZ R2,RE01 MOV @R1,A DEC R1 DJNZ R4,RE00 RET ;-------------------将从DS18B20 中读出的温度数据进行转换 TEMPER_COV: MOV A,#0F0H ANL A,TEMPER_L ; 舍去温度低位...