RESET_TH1:
CALL ALERT_PLAY JNB FLAG2,R_TH01
mov 75H,7fh ;送入熄灭符 mov 76H,7fh CALL ALERT_PLAY JMP R_TH02 R_TH01: CALL ALERT_TH
mov 75h,7Eh ; mov 76h,7Dh CALL ALERT_PLAY R_TH02: JNB K1,K021A JNB K2,K021B JNB K3,K002 JMP RESET_TH1 K021A:
INC TEMP_TH MOV A,TEMP_TH
CJNE A,#120,K022A ;没有到设定上限值,转 MOV TEMP_TH,#0 K022A: CALL TH_DEL JMP RESET_TH1
K021B:
MOV A,TEMP_TH
CJNE A,#00H,K023B ;没有到设定下限值,转
MOV TEMP_TH,#120 K023B: DEC TEMP_TH K022B: CALL TH_DEL JMP RESET_TH1
K002: CALL BEEP_BL
CLR TR0 ;关闭中断 RET
;----------------------------------------------------- ;键延时子程序
;多次调用动作温度设定值显示程序来延时
;----------------------------------------------------- TL_DEL: ;动作温度低值TL延时 MOV R2,#0AH TL_DEL1: CALL ALERT_TL CALL ALERT_PLAY
26
DJNZ R2,TL_DEL1 RET
TH_DEL: ;动作温度高值TH延时 MOV R2,#0AH TH_DEL1: CALL ALERT_TH CALL ALERT_PLAY DJNZ R2,TH_DEL1 RET
;==================================================== ;实时温度值与动作温度设定值 TH、TL 比较子程序
;当实际温度大于 TH 的设定值时,显示\继电器1吸合,继电器2吸合 ;当实际温度小于 TH 的设定值时,显示“O”,继电器1、2断开, ;当实际温度小于 TL 的设定值时,显示“L”。继电器1吸合,继电器2断开 ;闪动显示标记符 H、L、O
;==================================================== TEMP_COMP:
SETB TR0 ;启动中断 MOV A,TEMP_TH
SUBB A,#01H
SUBB A,TEMP_ZH ;减数>被减数,则
JC CHULI1 ;借位标志位C=1,转 MOV A,TEMP_ZH
SUBB A,TEMP_TL ;减数>被减数,则
JC CHULI2 ;借位标志位C=1,转 JNB FLAG2,T_COMP1 ;FLAG2=0,显示标记字符 MOV 74H,#0AH ;熄灭符 LCALL DISP1 JMP T_COMP2 T_COMP1: MOV 74H,#00H
LCALL DISP1 ;显示\T_COMP2:
SETB C1 ;继电器1断开 SETB C2 ;继电器2断开 CLR TR0 ;关闭中断 RET
;--------------------------------------------- ;超温处理
;--------------------------------------------- CHULI1:
CLR C1 ;继电器1吸合 CLR C2 ;继电器2吸合 JNB FLAG2,CHULI10
MOV 74H,#0AH ;熄灭符 LCALL DISP1
27
JMP CHULI11
CHULI10: MOV 74H,#0DH
LCALL DISP1 ;显示\CHULI11:
CLR TR0 ;关闭中断 RET
;--------------------------------------------- ;欠温处理
;--------------------------------------------- CHULI2: CLR C1 ;继电器1吸合 SETB C2 ;继电器2断开 JNB FLAG2,CHULI20
MOV 74H,#0AH ;熄灭符 LCALL DISP1 JMP CHULI21
CHULI20: MOV 74H,#0CH
LCALL DISP1 ;显示\CHULI21: CLR TR0 ;关闭中断 RET
;------------------------------------------------------------ ;把 DS18B20 暂存器里的动作温度设定值拷贝到EEROM
;------------------------------------------------------------ WRITE_E2:
CALL RESET
MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE
MOV A,#48H ;动作温度设定值拷贝到EEROM LCALL WRITE RET
;-------------------------------------------------------------- ;把 DS18B20 EEROM 里的动作温度设定值拷贝回暂存器
;------------------------------------------------------------- READ_E2:
CALL RESET
MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE
MOV A,#0B8H ;动作温度值拷贝回暂存器 CALL WRITE RET
;***************************************************** ; 处理温度 BCD 码子程序
;**************************************************** CONVTEMP: MOV A,TEMPH ;判温度是否零下
28
ANL A,#80H
JZ TEMPC1 ;温度零上转 CLR C
MOV A,TEMPL ;二进制数求补(双字节) CPL A ;取反加1 ADD A,#01H MOV TEMPL,A
MOV A,TEMPH ;- CPL A
ADDC A,#00H
MOV TEMPH,A ;TEMPHC HI = MOV TEMPHC,#0BH SJMP TEMPC11
TEMPC1: MOV TEMPHC,#0AH ; TEMPC11: MOV A,TEMPHC SWAP A
MOV TEMPHC,A MOV A,TEMPL
ANL A,#0FH ; MOV DPTR,#TEMPDOTTAB MOVC A,@A+DPTR
MOV TEMPLC,A ;TEMPLC LOW=
MOV A,TEMPL ; ANL A,#0F0H SWAP A
MOV TEMPL,A MOV A,TEMPH ANL A,#0FH SWAP A
ORL A,TEMPL
MOV TEMP_ZH,A ; LCALL HEX2BCD1 MOV TEMPL,A ANL A,#0F0H SWAP A
ORL A,TEMPHC ;TEMPHC LOW = MOV TEMPHC,A MOV A,TEMPL ANL A,#0FH
SWAP A ;TEMPLC HI = ORL A,TEMPLC MOV TEMPLC,A
符号位 乘0.0625 小数部分 BCD 整数部分 组合后的值存入TEMP_ZH 十位数 BCD 个位数 BCD 29
MOV A,R7 JZ TEMPC12 ANL A,#0FH SWAP A MOV R7,A
MOV A,TEMPHC ;TEMPHC HI = 百位数 BCD ANL A,#0FH ORL A,R7
MOV TEMPHC,A TEMPC12: RET
;----------------------------------------------------------- ; 小数部分码表
;----------------------------------------------------------- TEMPDOTTAB: DB 00H,01H,01H,02H,03H,03H,04H,04H,05H,06H DB 06H,07H,08H,08H,09H,09H
;===========================================================
;显示区 BCD 码温度值刷新子程序
;===========================================================
DISPBCD: MOV A,TEMPLC ANL A,#0FH
MOV 70H,A ;小数位 MOV A,TEMPLC SWAP A
ANL A,#0FH
MOV 71H,A ;个位 MOV A,TEMPHC ANL A,#0FH
MOV 72H,A ;十位 MOV A,TEMPHC SWAP A
ANL A,#0FH
MOV 73H,A ;百位 MOV A,TEMPHC ANL A,#0F0H
CJNE A,#010H,DISPBCD0 SJMP DISPBCD2
DISPBCD0: MOV A,TEMPHC ANL A,#0FH
JNZ DISPBCD2 ;十位数是0
30