📄 18b20.asm
字号:
DIN EQU P2.4
BEE EQU P2.1
TEMPER_L EQU 29H ;保存读出温度的低8位
TEMPER_H EQU 28H ;保存读出温度的高8位
FLAG1 EQU 30H ;是否检测到DS18B20标志位(位)
D_BIT EQU 31H ;数码管小数位存放内存位置(位)
TEM_BIT EQU 32H ;负温度标志位
GGE EQU 21H ;数码管个位数存放内存位置
SHI EQU 22H ;数码管十位数存放内存位置
ORG 0000H
JMP MAIN
ORG 0030H
MAIN: NOP
LOOP:
MOV SP,#60H
MOV SCON,#50H ;设定串口工作方式为1,REN=1允许接收
MOV TMOD,#20H ;定时器1工作方式为2
ANL PCON,#7FH ;SMOD=0
MOV TL1,#0FDH ;设定波特率为9600
MOV TH1,#0FDH ;
; SETB EA
; SETB EX0
SETB IT0
SETB TR1 ;开启定时器1
LCALL INIT_1820 ;初始化1820
JB FLAG1,LOOP1
; CLR BEE
AJMP $
LOOP1: SETB BEE
MOV A,#0CCH ;跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ;发出温度转换命令
LCALL WRITE_1820
LCALL DELAY ;等待温度转换的完成
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL DELAY
LCALL INIT_1820 ;复位DS18B20
MOV A,#0CCH
LCALL WRITE_1820
MOV A,#0BEH ;发出读温度命令
LCALL WRITE_1820
LCALL READ_1820
MOV R7,#4
MOV R5,TEMPER_L
MOV R6,TEMPER_H
AAA:
MOV A,R6
RRC A
MOV R6,A
MOV A,R5
RRC A
MOV R5,A
DJNZ R7,AAA
MOV A,R5
MOV B,#10
DIV AB
SWAP A
ADD A,B
LCALL SEND
MOV R7,#50
BBB: LCALL DELAY
DJNZ R7,BBB
LJMP LOOP
INIT_1820: ;DS18B20复位初始化程序
SETB DIN
NOP
CLR DIN
MOV R0,#255 ;主机发出延时537微秒的复位低脉冲
DJNZ R0,$
SETB DIN
NOP
NOP
NOP
MOV R0,#15
DJNZ R0,$ ;判断18B20是否存在
JNB P2.4,TSR3
LJMP TSR4
TSR3: SETB FLAG1
LJMP TSR5
TSR4: CLR FLAG1
LJMP TSR7
TSR5: MOV R0,#6BH ;时序要求延时
TSR6: DJNZ R0,TSR6
TSR7: SETB DIN
RET
WRITE_1820: ;写DS18B20子程序(有具体的时序要求)
MOV R2,#8 ;有8位数据
CLR C
WR1: CLR DIN
MOV R3,#6 ;时序要求的延时
DJNZ R3,$
RRC A ;把数据依次写入DS18B20
MOV DIN,C
MOV R3,#23 ;时序要求的延时
DJNZ R3,$
SETB DIN
NOP
DJNZ R2,WR1
SETB DIN
RET
READ_1820: ;读DS18B20的程序,从DS18B20读出2个字节的温度数据
MOV R4,#2 ;将温度的最高位和最地位从DS18B20中读出
MOV R1,#29H ;低位存入29H,高位存入28H
RE00:MOV R2,#8
RE01:CLR C
SETB DIN
NOP
NOP
CLR DIN
NOP
NOP
NOP
SETB DIN
MOV R3,#9 ;时序延时
RE02:DJNZ R3,$
MOV C,DIN
MOV R3,#23 ;时序延时
RE03:DJNZ R3,$
RRC A
DJNZ R2,RE01
MOV @R1,A
DEC R1
DJNZ R4,RE00
RET
DELAY:MOV R3,#80h
D1:MOV R4,#0fEh
DJNZ R4,$
DJNZ R3,D1
RET
SEND:
MOV SBUF,A
NOP
JNB TI,$ ;检测标志位,等带数据传送完毕
CLR TI
RET
END
;*****************************************
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -