您的当前位置:首页对ds18b20温控程序

对ds18b20温控程序

2023-09-09 来源:乌哈旅游
WENDU DATA 32H ;实际温度地址 WENDUD DATA 33H ;温度低位地址 WENDUG DATA 34H ;温度高位地址 SZWDG DATA 35H ;高温报警温点 SZWDD DATA 36H ;低温报警点

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

因篇幅问题不能全部显示,请点此查看更多更全内容