📄 abstract.txt
字号:
FLAG1 EQU 38H
TEMPL EQU 30H
TEMPH EQU 31H
TEMPLC EQU 32H
TEMPHC EQU 33H
I1 EQU 50H
I2 EQU 60H
I3 EQU 70H
I4 EQU 80H
JIDIAN0 BIT P2.3
JIDIAN1 BIT P2.4
JIDIAN2 BIT P2.5
JIDIAN3 BIT P2.6
;************** 延时子程序(1秒)*************
ORG 1000H
DELAY1S: MOV R4,#0FFH
DELAY22: MOV R5,#0FFH
DELAY33: MOV R6,#0AH
DELAY44: DJNZ R6,DELAY44
DJNZ R5,DELAY33
DJNZ R4,DELAY22
RET
;*****************DS1820初始化子程序*******************
ORG 0250H
RET_1820:
SETB P2.7
NOP
CLR P2.7
;主机发出延时537微秒的复位低脉冲
MOV R1,#3
TSR1:MOV R0,#107
DJNZ R0,$
DJNZ R1,TSR1
SETB P2.7 ;然后拉高数据线
NOP
NOP
NOP
MOV R0,#25H
TSR2: JNB P2.7,TSR3 ;等待DS18B20回应
DJNZ R0,TSR2
LJMP TSR4 ; 延时
TSR3: SETB FLAG1 ; 置标志位,表示DS1820存在
LJMP TSR5
TSR4: CLR FLAG1 ; 清标志位,表示DS1820不存在
LJMP TSR7
TSR5: MOV R0,#120
TSR6: DJNZ R0,TSR6 ;延时
TSR7: SETB P2.7
RET
; ****************DS18B20写子程序******************************
ORG 0180H
WRITE: MOV R2,#8H
CLR C
WR1: CLR P2.7
MOV R3,#6H
DJNZ R3,$
RRC A
MOV P2.7,C
MOV R3,#23H
DJNZ R3,$
SETB P2.7
RET
; ******************DS18B20读子程序***************************
ORG 0200H
READ: MOV R4,#2H
MOV R1,#TEMPL
MOV B,#00H
RE1: MOV R2,#8H
RE2: CLR C
SETB P2.7
NOP
NOP
CLR P2.7
NOP
NOP
NOP
SETB P2.7
MOV R3,#9H
RE3: DJNZ R3,RE3
MOV C,P2.7
MOV R3,#23H
RE4: DJNZ R3,RE4
RRC A
DJNZ R2,RE2
MOV @R1,A
INC R1
DJNZ R4,RE1
RET
;************************读取温度子程序0**************************
ORG 0300H
GET_TEMPER0: SETB P2.7 ;定时入口,P2.7=1
LCALL RET_1820
JB FLAG1,TS1
RET
TS1: CLR P2.7
MOV A,#0CCH ; 跳过ROM匹配------0CC
LCALL WRITE ;写命令字
MOV A,#44H ; 发出温度转换命令
LCALL WRITE ; 写命令字,启动所有1820进行转换
NOP
LCALL RET_1820 ;调初始化程序
MOV A,#055H ;发匹配ROM命令
LCALL WRITE ;写命令字
MOV R0,#I1 ;置第三个1820的序列号存放首地址
LCALL XL ;调发序列号子程序
LCALL DELAY1S ;调延时1S子程序
LCALL RET_1820
MOV A,#0CCH
LCALL WRITE
MOV A,#0BEH
LCALL WRITE
LCALL READ
RET
;************************读取温度子程序1**************************
ORG 0500H
GET_TEMPER1: SETB P2.7 ;定时入口,P2.7=1
LCALL RET_1820
JB FLAG1,TS2
RET
TS2: CLR P2.7
MOV A,#0CCH ; 跳过ROM匹配------0CC
LCALL WRITE ;写命令字
MOV A,#44H ; 发出温度转换命令
LCALL WRITE ; 写命令字,启动所有1820进行转换
NOP
LCALL RET_1820 ;调初始化程序
MOV A,#055H ;发匹配ROM命令
LCALL WRITE ;写命令字
MOV R0,#I2 ;置第三个1820的序列号存放首地址
LCALL XL ;调发序列号子程序
LCALL DELAY1S ;调延时1S子程序
LCALL RET_1820
MOV A,#0CCH
LCALL WRITE
MOV A,#0BEH
LCALL WRITE
LCALL READ
RET
;************************读取温度子程序2**************************
ORG 0500H
GET_TEMPER2: SETB P2.7 ;定时入口,P2.7=1
LCALL RET_1820
JB FLAG1,TS3
RET
TS3: CLR P2.7
MOV A,#0CCH ; 跳过ROM匹配------0CC
LCALL WRITE ;写命令字
MOV A,#44H ; 发出温度转换命令
LCALL WRITE ; 写命令字,启动所有1820进行转换
NOP
LCALL RET_1820 ;调初始化程序
MOV A,#055H ;发匹配ROM命令
LCALL WRITE ;写命令字
MOV R0,#I3 ;置第三个1820的序列号存放首地址
LCALL XL ;调发序列号子程序
LCALL DELAY1S ;调延时1S子程序
LCALL RET_1820
MOV A,#0CCH
LCALL WRITE
MOV A,#0BEH
LCALL WRITE
LCALL READ
RET
;************************读取温度子程序3**************************
ORG 0600H
GET_TEMPER3: SETB P2.7 ;定时入口,P2.7=1
LCALL RET_1820
JB FLAG1,TS4
RET
TS4: CLR P2.7
MOV A,#0CCH ; 跳过ROM匹配------0CC
LCALL WRITE ;写命令字
MOV A,#44H ; 发出温度转换命令
LCALL WRITE ; 写命令字,启动所有1820进行转换
NOP
LCALL RET_1820 ;调初始化程序
MOV A,#055H ;发匹配ROM命令
LCALL WRITE ;写命令字
MOV R0,#I4 ;置第四个1820的序列号存放首地址
LCALL XL ;调发序列号子程序
LCALL DELAY1S ;调延时1S子程序
LCALL RET_1820
MOV A,#0CCH
LCALL WRITE
MOV A,#0BEH
LCALL WRITE
LCALL READ
RET
;***********************计算温度子程序*****************************
ORG 0700H
;*****************计算小数位BCD值*****************
CONTEMPER: MOV A,TEMPL ;
ANL A,#0FH ; 乘0.0625
MOV DPTR,#TEMPDOTTAB ;取小数位分码地址
MOVC A,@A+DPTR ;
MOV TEMPLC,A ; TEMPLC LOW= 小数部分 BCD
;**************************************
MOV A,TEMPL ; 计算整数位温度BCD值
ANL A,#0F0H ;保留TEMPL的高四位,低四位置0
SWAP A ;高四位和低四位交换
MOV R5,A
MOV A,TEMPH
ANL A,#0FH ;保留TEMPH的低四位,高四位置0
MOV B,#10H ;籅=16
MUL AB ;籅=乘积高四位,A=乘积低四位
MOV TEMPL,A
MOV TEMPH,B
ADD A,R5
DA A ;皇
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -