基于液晶显示的单片机温度控制设计 第5页
MOVLCD_PRINT
RET
RESET_A1:
DB "RESET ALERT CODE"
;====================================================
;实际温度值与标记温度值比较子程序
;====================================================
TEMP_COMP:
A,TEMP_ZH ;减数>被减数,则
JC CHULI1 ;借位标志位C=1,转
MOV A,TEMP_ZH
SUBB A,TEMP_TL ;减数>被减数,则
JC CHULI2 ;借位标志位C=1,转
MOV DPTR,#BJ5
CALL TEMP_BJ3
CALL BEEP_BL
DPTR,#BJ3
CALL TEMP_BJ3
CALL BEEP_BL
RET
CHULI2:
MOV DPTR,#BJ4
CALL TEMP_BJ3
CALL BEEP_BL
RET
;-----------------------------------------
TEMP_BJ3:
MOV A,#0CEH
CALL WCOM
R0,#2
BBJJ3: MOV A,R1
MOVC A,@A+DPTR
CALL WDATA
INC R1
DJNZ R0,BBJJ3
RET
BJ3:
DB ">H"
BJ4:"<L"
BJ5:
DB " !"
;==================================================
;显示温度标记子程序
;==================================================
TEMP_BJ:
MOV A,#0CBH
CALL WCOM
CALL WDATA
INC R1
DJNZ R0,BBJJ1
RET
BJ1:
DB 00H,"C"
;=================================================
MENU_OK:
MOV DPTR,#M_OK1 ;指针指到显示消息
MOV A,#1 ;显示在第一行
M_OK1:
DB " DS18B20 OK ",
DB " TEMP: ",0
;-----------------------------------------------
MENU_ERROR:
MOV DPTR,#M_ERROR2 ;指针指到显示消息1
MOV A,#2 ;显示在第一行
CALL LCD_PRINT
RET
M_ERROR1:
DB
NOP
CLR DATE_LINE
MOV R0,#6BH ;主机发出延时复位低脉冲
MOV R1,#04H
TSR1:DJNZ R0,$
NOP
NOP
MOV R0,#32H
TSR2:JNB DATE_LINE,TSR3 ;等待DS18B20回应
DJNZ R0,TSR2
JMP TSR4 ; 延时
TSR3:SETB FLAG1 ; 置标志位,表示DS1820存在
JMP TSR5
TSR4:CLR TSR6:DJNZ R0,$ ; 时序要求延时一段时间
TSR7:
SETB DATE_LINE
RET
;=======================================================
RE_18B20:
JB FLAG1,RE_18B
RET
RE_18B
CALL RESET
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE
MOV A,#4EH ;写暂存寄存器
LCALL WRITE
MOV A,TEMP_TH ;TH(报警上限)
MOV A,#7FH ;12位精确度
LCALL WRITE
RET
;------------------------------------------------------------
WRITE_E2:
CALL RESET
MOV
MOV A,#48H ;把暂存器里的温度报警值拷贝到EEROM
LCALL WRITE
RET
;--------------------------------------------------------------
READ_E2:
CALL RESET
MOV ;把EEROM里的温度报警值拷贝回暂存器
CALL WRITE
RET
;--------------------------------------------------------------
;将自定义字符写入LCD1602的CGRAM中
;--------------------------------------------------------------
STORE_DATA:
CALL WCOM
MOV R2,#08H
MOV DPTR,#D_DATA
MOV R3,#00H
S_DATA:
MOV A,R3
;写入数据
INC R3
DJNZ R2,S_DATA
RET
D_DATA:
DB 0CH,12H,12H,0CH,00H,00H,00H,00H
;==============================================================
WRITE:
MOV CLR DATE_LINE ;开始写入DS18B20总线要处于复位(低)状态
MOV R3,#07
DJNZ R3,$ ;总线复位保持16微妙以上
RRC A ;把一个字节DATA 分成8个BIT环移给C
MOV DATE_LINE,C ;写入一个BIT
_LINE ;重新释放总线
NOP
DJNZ R2,WR1 ;写入下一个BIT
SETB DATE_LINE
MOV R4,#4 ; 将温度低位、高位、TH、TL从DS18B20中读出
MOV R1,#TEMPL ; 存入25H、26H、27H、28H
RE00:
MOV R2,#8
RE01:
CLR CY
SETB DATE_LINE
NOP
NOP
CLR DATE_LINE ;读前总线保持为低
NOP
NOP
NOP
SETB DATE_LINE ;开始读总线释放
MOV R3,#09 ;延时18微妙
DJNZ R3,$
MOV C,DATE_LINE ;从DS18B20总线读得一个BIT
MOV R3,#3CH
;读下一个BIT
MOV @R1,A
INC R1
DJNZ R4,RE00
RET
;*****************************************************
; 处理温度 BCD 码子程序
;****************************************************
CONVTEMP: MOV A,TEMPH ;判温度是否零下
ANL A,#80H
JZ TEMPC1 ;温度零上转
上一页 [1] [2] [3] [4] [5] [6] [7] [8] 下一页