⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20

📁 RM51单片机实验板配套实验例程库
💻
字号:

;****************************************************************
;*      ★★★            DS18B20测温实验              ★★★   *
;* (电子驿站单片机实验板、开发板配套例程,程序转载请著明出处。) *
;*  E-mail: support@ourmpu.com     QQ留言:451338254 476485321  *
;*  编程:ourmpu  http://www.ourmpu.com/ 更多例程请登陆网站     *
;****************************************************************
;*  数码管显示温度值,精确到整数                                *
;*  用手拧住温度探头,就可以看到温度值的变化!                  *
;*  实验时需要数字温度传感器DS18B20配合                         *
;****************************************************************

	ORG	0000H
	
START:	MOV	SP,#60H
	MOV	P0,#0FFH
	MOV	P1,#0FFH
	MOV	P2,#0FFH
	MOV	P3,#0FFH
			
MAIN: 	LCALL 	GET_TEMPER	;调用读温度子程序
	LCALL 	DISP		;调用数码管显示子程序
	AJMP 	MAIN		;重复循环

;------ 读DS18B20传感器的温度值 ------
GET_TEMPER:
	SETB 	P3.3
	LCALL 	RST18B20	;先复位DS18B20
	JB 	00H,DSS2
	RET
DSS2:
	MOV 	A,#0CCH		;跳过ROM匹配
	LCALL 	WR18B20
	MOV 	A,#44H 		;发出温度转换命令
	LCALL 	WR18B20
	LCALL 	RST18B20	;准备读温度前先复位
	MOV 	A,#0CCH 	;跳过ROM匹配
	LCALL 	WR18B20
	MOV 	A,#0BEH 	;向DS18B20发出读温度命令
	LCALL 	WR18B20
	LCALL 	RE18B20		;读出的温度数据
	RET

;------ DS18B20复位初始化程序 ------
RST18B20:
	SETB 	P3.3
	NOP
	CLR 	P3.3
	MOV 	R0,#06BH	;主机发出复位低脉冲
	MOV 	R1,#03H
DSR1:
	DJNZ 	R0,DSR1 
	MOV 	R0,#6BH
	DJNZ 	R1,DSR1
	SETB 	P3.3		;拉高数据线
	NOP
	NOP
	NOP
	MOV 	R0,#25H
DSR2:
	JNB 	P3.3,DSR3	;等待DS18B20回应
	DJNZ 	R0,DSR2
	LJMP 	DSR4
DSR3:
	SETB 	00H		;置标志位,表示DS1820存在
	LJMP 	DSR5
DSR4:
	CLR 	00H 		;清标志位,表示DS1820不存在
	LJMP 	DSR7
DSR5:
	MOV 	R0,#06BH
DSR6:
	DJNZ 	R0,DSR6 	;时序要求延时一段时间
DSR7:
	SETB 	P3.3
	RET

;------ 写DS18B20的子程序 ------
WR18B20:
	MOV 	R2,#8
	CLR 	C
WR1:
	CLR 	P3.3
	MOV 	R3,#6
	DJNZ 	R3,$
	RRC 	A
	MOV 	P3.3,C
	MOV 	R3,#21
	DJNZ 	R3,$
	SETB 	P3.3
	NOP
	DJNZ 	R2,WR1
	SETB 	P3.3
	RET

;------ 从DS18B20中读温度数据程序 ------
RE18B20:
	MOV 	R4,#2
	MOV 	R1,#2FH
RE00:
	MOV 	R2,#8
RE01:
	CLR 	C
	SETB 	P3.3
	NOP
	NOP
	CLR 	P3.3
	NOP
	NOP
	NOP
	SETB 	P3.3
	MOV 	R3,#6
RE10: 
	DJNZ 	R3,RE10
	MOV 	C,P3.3
	MOV 	R3,#21
RE20: 
	DJNZ 	R3,RE20
	RRC 	A
	DJNZ 	R2,RE01
	MOV 	@R1,A
	DEC 	R1
	DJNZ 	R4,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
	MOVC	A,@A+DPTR
	MOV	P0,A		;显示温度“十位”值
	SETB	P2.0
	SETB	P2.1
	SETB	P2.2
	SETB	P2.3
	SETB	P2.4
	CLR	P2.5
	LCALL	YS4722U
	MOV	A,31H
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	MOV	P0,A		;显示温度“个位”值
	SETB	P2.0
	SETB	P2.1
	SETB	P2.2
	SETB	P2.3
		  CLR		 P2.4
	SETB	P2.5
	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
	DJNZ	R5,$
	DJNZ	R4,Y3
	RET

	END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -