📄 ds18b20_read_write.txt
字号:
DS18B20的读写程序
以下是我为宾馆智能控制器所做的温度探测器DS18B20的一个程序。在网上看到很多朋友想要DS18B20的读写程序却苦于找不到这样的程序,我把它贡献出来和大家分享。这个程序取到的温度值范围为0-70(一般应用足够了),如需大于此温度值可自行在TAB中添加。测温精度为0.5度,没有加校正,需要的朋友可自行查一些资料。这个程序使用下来没有什么问题,希望广大朋友提出宝贵意见,谢谢!
; FLAG1: 标志位,为"1"时表示检测到DS18B20
; DQ: DS18B20的数据总线接脚
; TEMPER_NUM:保存读出的温度数据
; 本程序仅适合单个DS18B20和51单片机的连接,晶振为12MHZ左右
TEMPER_L EQU 36H
TEMPER_H EQU 35H
DQ BIT P1.7
; DS18B20初始化程序
;//*****************************************//
INIT_1820:
SETB DQ
NOP
CLR DQ
MOV R0,#06BH
TSR1:
DJNZ R0,TSR1 ; 延时
SETB DQ
MOV R0,#25H
TSR2:
JNB DQ,TSR3
DJNZ R0,TSR2
LJMP TSR4 ; 延时
TSR3:
SETB FLAG1 ; 置标志位,表示DS1820存在
LJMP TSR5
TSR4:
CLR FLAG1 ; 清标志位,表示DS1820不存在
LJMP TSR7
TSR5:
MOV R0,#06BH
TSR6:
DJNZ R0,TSR6 ; 延时
TSR7:
SETB DQ
RET
;//*****************************************//
; 重新写DS18B20暂存存储器设定值
;//*****************************************//
RE_CONFIG:
JB FLAG1,RE_CONFIG1 ; 若DS18B20存在,转RE_CONFIG1
RET
RE_CONFIG1:
MOV A,#0CCH ; 发SKIP ROM命令
LCALL WRITE_1820
MOV A,#4EH ; 发写暂存存储器命令
LCALL WRITE_1820
MOV A,#00H ; TH(报警上限)中写入00H
LCALL WRITE_1820
MOV A,#00H ; TL(报警下限)中写入00H
LCALL WRITE_1820
MOV A,#1FH ; 选择9位温度分辨率
LCALL WRITE_1820
RET
;//*****************************************//
读出转换后的温度值
;//*****************************************//
GET_TEMPER:
SETB DQ ; 定时入口
LCALL INIT_1820
JB FLAG1,TSS2
RET ; 若DS18B20不存在则返回
TSS2:
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#44H ; 发出温度转换命令
LCALL WRITE_1820
LCALL INIT_1820
MOV A,#0CCH ; 跳过ROM匹配
LCALL WRITE_1820
MOV A,#0BEH ; 发出读温度命令
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -