FL EQU 38H ;是否检测到DS18B20标志位 ;-----------------------------------------------
K1 EQU P3.2 ;按键1,确定修改和确定退出 K2 EQU P2.0 ;按键2,设定温度值加1 K3 EQU P2.1 ;按键3,设定温度值减1 ;--------------------------------------------------------- ; 主程序
;*********************************************************** ORG 0000H AJMP MAIN
ORG 0003H ; 外部中断0入口 AJMP INTT0 ORG 0040H
MAIN: MOV 35H , #32 ;高温报警初值32度 MOV 36H , #27 ;低温报警初值27 SETB PX0 ;优先外部中断0
MOV TCON , #01H ;外部中断0下降沿触发 SETB EA SETB EX0 WANG:
LCALL DU18B20 ;读18B20温度
; LCALL S18B20 ;送温度显视 LCALL BJ ;报警 LJMP WANG
;---------------------------------------------------------- ;DS18B20初始化和检测
;*************************************************************** W18B20: SETB P1.0 NOP
CLR P1.0
MOV R0 , #55H ; 主机发出513us的复位低电平 MOV R1 , #03H WW1: DJNZ R0 , $ MOV R0 , #64H DJNZ R1 , WW1
SETB P1.0 ;拉高数据线 NOP
MOV R0 , #25H
WW2: JNB P1.0 , WW3 ;等待DS18B20回复
DJNZ R0 , WW2 ;延时74us LJMP WW4
WW3: SETB FL ; 表示DS18B20存在 LJMP WW5
WW4: CLR FL ;表示DS18B20不存在 LJMP WW6
WW5: MOV R0 , #64H ;时序要求一段延时 DJNZ R0 , $ WW6: SETB P1.0
JNB FL , AAAA ; DS18B20出错 RET
;----------------------------------------------------- AAAA: MOV R7 , #250
CLR P2.7 ;DS18B20出错数码管显示 -- MOV P0 , #10111111B ;显示-- LCALL DELAY CLR P2.6
MOV P0 , #10111111B LCALL DELAY DJNZ R7 , AAAA RET
;-------------------------------------------------------- ;读18B20温度
;************************************************************** DU18B20: SETB P1.0
LCALL W18B20 JB FL , DD1 RET
DD1 : MOV A ,#0CCH LCALL XIEB20 MOV A ,#44H LCALL XIEB20 LCALL S18B20 LCALL W18B20 MOV A , #0CCH LCALL XIEB20
MOV A , #0BEH LCALL XIEB20 LCALL WDSJ LCALL S18B20 RET
;---------------------------------------------------
XIEB20: MOV R2 , #8 ;写入18B20指令 CLR C
XIE : CLR P1.0
MOV R3 ,#6 DJNZ R3 ,$ RRC A
MOV P1.0 , C MOV R3 , #23 DJNZ R3 , $ SETB P1.0 NOP
DJNZ R2 , XIE SETB P1.0 RET
;-------------------------------------------------- ;读温度子程序 ;从DS18B20
WDSJ: MOV R4 , #02H MOV R1 , # 33H ; RE00: MOV R2 ,#8 RE01: CLR C SETB P1.0 NOP NOP
CLR P1.0 NOP NOP NOP
SETB P1.0 MOV R3 ,#07 DJNZ R3 , $ MOV C , P1.0 MOV R3 , #23 DJNZ R3 , $ RRC A
DJNZ R2 , RE01 MOV @R1 ,A INC R1
DJNZ R4 ,RE00 LCALL WDCZ RET
;--------------------------------------------------
;取出 WENDUD 高四位和 WENDUG 低四位进行重新组合 ;个位: 74H 十位 : 75H WDCZ:
MOV A,WENDUD ;整数部分
ANL A,#0F0H ;取出高四位 SWAP A
MOV WENDUD,A
MOV A,WENDUG ;取出低四位 ANL A,#0FH SWAP A
ORL A,WENDUD ;重新组合温度数据
MOV WENDU,A ;重新组合的温度数据存入WENDU LCALL HEX2BCD1
TT: MOV WENDUD,A ;(A)=十位数和个位数 ANL A,#0F0H SWAP A
MOV 75H,A ;十位数 BCD MOV A,WENDUD ANL A,#0FH
MOV 74H,A ;个位数 BCD RET
;============================================================== ;单字节十六进制转BCD
;入口:(A)=单字节十六进制的温度值 ;出口:(A)=十位数和个位数
;============================================================== HEX2BCD1:
MOV B,#0AH DIV AB SWAP A
ORL A,B ;(A)=个位数和十位数 RET
;-------------------------------------------------------- ;显示子程序
;***************************************************** S18B20: MOV R0 , #4 SS1 : MOV R1 ,#200
SS2: MOV A , 74H MOV DPTR , #TAB
MOVC A , @A+DPTR MOV P0 , A CLR P2.7
LCALL DELAY SETB P2.7
MOV A , 75H
MOVC A , @A+DPTR MOV P0 , A
CLR P2.6 LCALL DELAY SETB P2.6
DJNZ R1 , SS2 DJNZ R0 , SS1 RET
;-------------------------------------------------------------- ; 按键中断程序
;**************************************************************** INTT0: PUSH P2
PUSH WENDUD PUSH ACC PUSH 74H PUSH 75H PUSH 03H MOV R3 , #100 pp: MOV A , SZWDG LCALL HEX2BCD1 LCALL TT LCALL S18B20 MOV P2 , #0FFH MOV A , P2
KK1: JNB ACC.0 , KEY0 JNB ACC.1 , KEY1 DJNZ R3 , PP LJMP GRST KEY0: INC SZWDG LJMP PP
KEY1: DEC SZWDG LJMP PP GRST: POP 03H POP 75H POP 74H POP ACC
POP WENDUD POP P2 RETI
;--------------------------------------------------- ;报警子程序
;***************************************************** BJ: PUSH ACC
CLR C MOV A , WENDU SUBB A , SZWDG
JNC BJ1 ;高于报警温度报警 MOV A , SZWDD SUBB A , WENDU
JNC BJ1 ; 低于报警温度点报警 SJMP JS BJ1: CLR P1.7 POP ACC JS: RET
;--------------------------------------------------- DELAY: PUSH 05H
MOV R5 , #7DH DEL1: NOP NOP
DJNZ R5 , DEL1 POP 05H RET
;---------------------------------------------------
DELAY1: MOV R1 , #10 ;10ms延时 LCALL DELAY
DJNZ R1 , DELAY1 RET
;--------------------------------------------------
TAB: DB 0C0H , 0F9H , 0A4H, 0B0H , 99H DB 92H, 82H , 0F8H, 80H , 90H END
因篇幅问题不能全部显示,请点此查看更多更全内容