在前面,我们学习了DS18B20新型数字温度传感器的基础理论知识,对DS18B20的特性及应用有了较全面的了解,本课我们就结合S51增强型实验板,ISP编程器来学习DS18B20的应用软件编程,做DS18B20测温实验,DIY一个我们自己的数字温度计,通过本实验的学习,熟练掌握DS18B20的开发,相信你也可以自己的智能温控系统!
首先介绍实验的硬件设备:S51增强型单片机实验板 + ISP编程器 + DS18B20温度传感器
(已焊接好并经过测试,免去初学者因焊接不好损坏DS18B20的风险,采用屏蔽线焊接,热缩管绝缘保护,防插反接头,抗干扰能力强,测温精度更高,插入实验板即可使用)
注:如图中所示,实验板的第5位数码管可以显示温度的符号“℃”,做温度实验更加直观。将配套温度传感器插入DS18B20实验接口,完成温度传感器的硬件连接。
图2: ISP编程器套件
DS18B20测温实验原理图见下面图3
图3
新建Keil工程ds18sy.UV2,输入下面的DS18B20测温实验源程序,编译得到HEX格式目标文件ds18sy.hex。
》》》 点击下载DS18B20测温实验目标程序ds18sy.hex 》》》
》》》 点击下载DS18B20测温实验源程序 》》》
;--------- 下面是DS18B20测温实验源程序 ---------
ORG0000H
START:MOVSP,#60H ;开机初始化
MOVP0,#0FFH
MOVP1,#0FEH
MOVP2,#0FFH
MOVP3,#0FFH
MAIN: LCALL GET_TEMPER ;调用读温度子程序
LCALL DISP ;调用数码管显示子程序
AJMPMAIN ;重复循环
;------ 读DS18B20传感器的温度值 ------
GET_TEMPER:
SETBP3.3
LCALL RST18B20 ;复位DS18B20
JB 00H,DSS2
RET
DSS2: MOV A,#0CCH;跳过ROM匹配
LCALL WR18B20
MOV A,#44H ;向DS18B20发出温度转换命令
LCALL WR18B20
LCALL RST18B20 ;准备读温度前先复位DS18B20
MOV A,#0CCH;跳过ROM匹配
LCALL WR18B20
MOV A,#0BEH;向DS18B20发出读温度命令
LCALL WR18B20
LCALL RE18B20;读出温度数据
RET
;------ DS18B20复位初始化程序 ------
RST18B20:
SETBP3.3
NOP
CLR P3.3
MOV R0,#06BH;主机发出复位低脉冲
MOV R1,#03H
DSR1: DJNZR0,DSR1
MOV R0,#6BH
DJNZR1,DSR1
SETBP3.3;拉高数据线
NOP
NOP
NOP
MOV R0,#25H
DSR2: JNB P3.3,DSR3;等待DS18B20回应
DJNZR0,DSR2
LJMPDSR4
DSR3: SETB00H;置标志位,表示DS1820存在
LJMPDSR5
DSR4: CLR 00H ;清标志位,表示DS1820不存在
LJMPDSR7
DSR5: MOV R0,#06BH
DSR6: DJNZR0,DSR6;延时一段时间
DSR7: SETBP3.3
RET
;------ 写DS18B20的子程序 ------
WR18B20:
MOV R2,#8
CLR C
WR1:CLR P3.3
MOV R3,#6
DJNZR3,$
RRC A
MOV P3.3,C
MOV R3,#23
DJNZR3,$
SETBP3.3
NOP
DJNZR2,WR1
SETBP3.3
RET
;------ 从DS18B20中读温度数据程序 ------
RE18B20:
MOV R4,#2
MOV R1,#2FH
RE00: MOV R2,#8
RE01: CLR C
SETBP3.3
NOP
NOP
CLR P3.3
NOP
NOP
NOP
SETBP3.3
MOV R3,#09
RE10: DJNZR3,RE10
MOV C,P3.3
MOV R3,#23
RE20: DJNZR3,RE20
RRC A
DJNZR2,RE01
MOV @R1,A
DEC R1
DJNZR4,RE00
RET
;-------- 显示子程序 --------
DISP: MOV A,2FH
MOV C,70H
RRC A
MOV C,71H
RRC A
MOV C,72H
RRC A
MOV C,73H
RRC A
MOV 2FH,A
MOV A,2FH
MOV B,#10
DIV AB
MOV 30H,A
MOV 31H,B
MOV A,30H
MOV DPTR,#SGTB
MOVCA,@A+DPTR
MOV P0,A;显示温度“十位”值
CLR P2.2
SETBP2.0
SETBP2.1
SETBP2.3
SETBP2.4
LCALL YS4722U
MOV A,31H
MOV DPTR,#SGTB
MOVCA,@A+DPTR
MOV P0,A;显示温度“个位”值
CLR P2.3
SETBP2.0
SETBP2.1
SETBP2.2
SETBP2.4
LCALL YS4722U
MOV A,#01000110B
MOV P0,A;显示温度符号“ ℃”
CLR P2.4
SETBP2.0
SETBP2.1
SETBP2.2
SETBP2.3
LCALL YS4722U
RET
;************* 8位共阳数码管显示器字型码表 *****************
SGTB: DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 88H,83H,0C6H,0A1H,86H,8EH,89H,0A3H,8CH,0C8H
YS4722U:
MOV R4,#10 ;延时子程序
Y3: MOV R5,#216
DJNZR5,$
DJNZR4,Y3
RET
END
-
传感器
+关注
关注
2548文章
50642浏览量
751672 -
DS18B20
+关注
关注
10文章
778浏览量
80680 -
编程器
+关注
关注
9文章
393浏览量
42269
发布评论请先 登录
相关推荐
评论