LCALL WCOM MOV DPTR,#BJ1 MOV R1,#0 MOV R0,#2 BBJJ1: MOV A,R1 MOVC A,@A+DPTR LCALL WDATA INC R1
DJNZ R0,BBJJ1 RET
BJ1: DB 00H,\
;******************************** 显示正确信息子程序 ***************************
MENU_OK: MOV DPTR,#M_OK1 ;指针指到显示消息 MOV A,#1 ;显示在第一行 LCALL LCD_PRINT
MOV DPTR,#M_OK2 ;指针指到显示消息 MOV A,#2 ;显示在第一行 LCALL LCD_PRINT RET
M_OK1: DB \ (^-^) OK \
21
;指针指到显示消息
M_OK2: DB \ \
;******************************** 显示出错信息子程序 ***************************
MENU_ERROR:MOV DPTR,#M_ERROR1 ;指针指到显示消息
MOV A,#1 ;显示在第一行 LCALL LCD_PRINT
MOV DPTR,#M_ERROR2 ;指针指到显示消息1
MOV A,#2 ;显示在第一行 LCALL LCD_PRINT RET
M_ERROR1: DB \ \M_ERROR2: DB \ \
;****************************DS18B20***************************** RST:
SETB DQ
复位子程序
NOP CLR DQ
MOV R0,#6BH ;主机发出延时复位低脉冲
22
MOV R1,#04H TSR1: DJNZ R0,$ MOV R0,#6BH DJNZ R1,TSR1 SETB DQ ;拉高数据线
TSR2: TSR3: 存在
TSR4: 不存在
TSR5: TSR6: TSR7: NOP NOP NOP
MOV R0,#32H JNB DQ,TSR3 DJNZ R0,TSR2
JMP TSR4 SETB FLAG1 JMP TSR5
CLR FLAG1 JMP TSR7 MOV R0,#06BH
DJNZ R0,$ SETB DQ RET
;等待DS18B20回应
; 延时
; 置1标志位,表示DS1820 ; 清0标志位,表示DS1820 ; 时序要求延时一段时间 23
;************************ DS18B20暂存器操作子程序 *************************** RE_18B20:JB FLAG1,RE_18B20A RET RE_18B20A: LCALL RST
MOV A,#0CCH
;跳过ROM匹配
LCALL WRITE WR_SCRAPD:
MOV A,#4EH ;写暂器 LCALL WRITE
MOV A,TEMP_TH ;TH(报警上限) LCALL WRITE
MOV A,TEMP_TL ;TL(报警下限) LCALL WRITE MOV A,#7FH ;12位精度 LCALL WRITE RET
;************************
复制暂存器子程*******************************
24
序
WRITE_E2:LCALL RST
MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE MOV A,#48H 拷贝到EEROM
LCALL WRITE RET
;***********************
重读
EEROM
子程序
;把暂存器里的温度报警值
******************************** READ_E2:LCALL RST
MOV A,#0CCH ;跳过ROM匹配 LCALL WRITE
MOV A,#0B8H ;把EEROM里的温度报警值拷贝回暂存器
LCALL WRITE RET
;************************ 将自定义字符写入LCD的CGRAM中 ********************* STORE_DATA: MOV A,#40H
25