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

📄 ds18b20

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

;****************************************************************
;*      ★★★          DS18B20高精度测温实验          ★★★   *
;* (电子驿站单片机实验板、开发板配套例程,程序转载请著明出处。) *
;*  E-mail: support@ourmpu.com     QQ留言:451338254 476485321  *
;*  编程:ourmpu  http://www.ourmpu.com/ 更多例程请登陆网站     *
;****************************************************************
;*  数码管显示温度值,0~99度精确到小数后面4位值                       *
;*  使用时将DS18B20温度传感器插入对应插座中运行即可             *
;*  用手拧住温度探头,就可以看到温度值的变化!                  *
;****************************************************************

	ORG	0000H
	AJMP	START
		
	ORG	0033H
START:	
	K1	BIT	P3.2
	K2	BIT	P3.3
	K3	BIT	P3.4
	K4	BIT	P3.5
	DQ	BIT	P3.3
	SPK	BIT	P3.7
	J1	BIT	P3.6
		
	DS18B20		BIT	01H
	TEMPERRB	BIT	02H
	TEMPSBIT	BIT	03H
	TEMPFH	EQU	30H	;温度符号位
	TEMPBW	EQU	31H	;温度"百"位
	TEMPSW	EQU	32H	;温度"十"位
	TEMPGW	EQU	33H	;温度"个"位
	TEMPXS1	EQU	34H	;温度小数位第"1"位
	TEMPXS2	EQU	35H	;温度小数位第"2"位
	TEMPXS3	EQU	36H	;温度小数位第"3"位
	TEMPXS4	EQU	37H	;温度小数位第"4"位
	TEMPXSD	EQU	38H
	TEMPZS	EQU	39H
	TEMPXS	EQU	3AH
	TEMPL	EQU	3BH
	TEMPH	EQU	3CH
		
;---------------------------------------------------------

TEST0:	MOV	SP,#60H
	MOV	P0,#0FFH
	MOV	P1,#0FFH
	MOV	P2,#0FFH
	MOV	P3,#0FFH
					
MAIN:	ACALL	GETTEMP
	JB 	DS18B20,MAIN1
	AJMP	TEST0
MAIN1:	LCALL	DISP
	AJMP	MAIN

;-------- 数码管显示子程序--------
DISP:	MOV	A,TEMPSW
	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,TEMPGW
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	ANL	A,#01111111B
	MOV	P0,A
	SETB	P2.0
	SETB	P2.1
	SETB	P2.2
	SETB	P2.3
	CLR	P2.4
	SETB	P2.5
	LCALL	YS4722U

	MOV	A,TEMPXS1
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	MOV	P0,A
	SETB	P2.0
	SETB	P2.1
	SETB	P2.2
	CLR	P2.3
	SETB	P2.4
	SETB	P2.5
	LCALL	YS4722U

	MOV	A,TEMPXS2
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	MOV	P0,A
	SETB	P2.0
	SETB	P2.1
	CLR	P2.2
	SETB	P2.3
	SETB	P2.4
	SETB	P2.5
	LCALL	YS4722U

	MOV	A,TEMPXS3
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	MOV	P0,A
	SETB	P2.0
	CLR	P2.1
	SETB	P2.2
	SETB	P2.3
	SETB	P2.4
	SETB	P2.5
	LCALL	YS4722U
	
	MOV	A,TEMPXS4
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	MOV	P0,A
	CLR	P2.0
	SETB	P2.1
	SETB	P2.2
	SETB	P2.3
	SETB	P2.4
	SETB	P2.5
	LCALL	YS4722U
	
	RET

GETTEMP:CLR	EA
	LCALL 	INIT18B20	;先复位DS18B20
	JB 	DS18B20,TSS2
	SETB	EA
	RET
TSS2:	MOV 	A,#0CCH 	; 跳过ROM匹配
	LCALL 	WRITE18B20
	MOV 	A,#44H 		; 发出温度转换命令
	LCALL 	WRITE18B20
	LCALL	YS800M		;延时0.8S,延时>750MS
	LCALL 	INIT18B20
	MOV 	A,#0CCH 	;跳过ROM匹配
	LCALL 	WRITE18B20
	MOV 	A,#0BEH 	;发出读温度命令
	LCALL 	WRITE18B20
	MOV 	R4,#2 		;从DS18B20中读出2字节温度数据
	MOV 	R1,#TEMPL
	LCALL 	READ18B20	;读温度
	SETB	EA


DOTEMP:	MOV	TEMPXSD,#2EH
TESTS1:	MOV	A,TEMPH
	ANL	A,#11111000B
	CJNE	A,#0F8H,TESTS0
	MOV	TEMPFH,#0FFH
	SETB	TEMPSBIT
	CLR	TEMPERRB
	LJMP	DOTEMP1
TESTS0:	CJNE	A,#00H,TEMPERR
	MOV	TEMPFH,#00H
	CLR	TEMPSBIT
	CLR	TEMPERRB
	LJMP	DOTEMP1
TEMPERR:
	SETB	TEMPERRB
	LJMP	TEMPRET
DOTEMP1:
	JNB	TEMPSBIT,DOTEMP2
	MOV	A,TEMPH
	CPL	A
	MOV	TEMPH,A
	MOV	A,TEMPL
	CPL	A
	CLR	C
	ADD	A,#1
	MOV	TEMPL,A
	MOV	A,TEMPH
	ADDC	A,#00H
	ANL	A,#00000111B
	MOV	TEMPH,A
DOTEMP2:
	MOV	A,TEMPH
	SWAP	A
	MOV	TEMPH,A
	MOV	A,TEMPL
	ANL	A,#00001111B
	MOV	TEMPXS,A
	MOV	A,TEMPL
	ANL	A,#11110000B
	SWAP	A
	MOV	R1,TEMPH
	ORL	A,R1
	MOV	TEMPZS,A
HBCD:
	MOV	A,TEMPZS
	MOV 	B,#100
	DIV 	AB
	MOV 	TEMPBW,A
	MOV 	A,#10
	XCH 	A,B
	DIV 	AB
	MOV 	TEMPSW,A
	MOV	A,B
	MOV 	TEMPGW,A
FLXS:	MOV	R2,#4
	MOV	A,TEMPXS
	ANL	A,#00001111B
	MOV	B,#4
	MUL	AB
	MOV	R1,A
	MOV	R0,#TEMPXS1
FLXS1:	MOV	DPTR,#DISPXS
	MOV	A,R1
	MOVC	A,@A+DPTR
	MOV	@R0,A
	INC	R0
	INC	R1
	DJNZ	R2,FLXS1
			
TEMPRET:
	SETB	EA
	RET

;-----------------------------------------------------
INIT18B20:
	SETB	DQ
	NOP
	CLR	DQ
	MOV	R0,#107		;主机发出延时537微秒的复位低脉冲[2]
	MOV 	R1,#3
TSR1:	DJNZ 	R0,TSR1
	MOV 	R0,#107
	DJNZ 	R1,TSR1
	SETB 	DQ
	NOP
	NOP
	NOP
	MOV 	R0,#25H
TSR2:	JNB 	DQ,TSR3
	DJNZ 	R0,TSR2
	AJMP 	TSR4
TSR3:	SETB 	DS18B20
	AJMP 	TSR5
TSR4:	CLR 	DS18B20
	AJMP 	TSR7
TSR5:	MOV 	R0,#107
TSR6:	DJNZ 	R0,TSR6
TSR7:	SETB 	DQ
	JNB	DQ,$
	RET


READ18B20:
	MOV 	R2,#8
RE01:	CLR 	C
	SETB 	DQ
	NOP
	NOP
	CLR 	DQ
	NOP
	NOP
	NOP
	SETB 	DQ
	MOV 	R3,#6
RE10:	DJNZ 	R3,RE10
	MOV 	C,DQ
	MOV 	R3,#20
RE20:	DJNZ 	R3,RE20
	RRC 	A
	DJNZ 	R2,RE01
	MOV 	@R1,A
	INC 	R1
	DJNZ 	R4,READ18B20
	RET

;写DS18B20的子程序
WRITE18B20:
	MOV 	R2,#8
	CLR 	C
WR18:	CLR 	DQ
	MOV 	R3,#6
	DJNZ 	R3,$
	RRC 	A
	MOV 	DQ,C
	MOV 	R3,#20
	DJNZ 	R3,$
	SETB 	DQ
	NOP
	DJNZ 	R2,WR18
	SETB 	DQ
	RET

DISPXS:
	DB	00H,00H,00H,00H,00H,06H,02H,05H,01H,02H,05H,00H,01H,08H,07H,05H
	DB	02H,05H,00H,00H,03H,01H,02H,05H,03H,07H,05H,00H,04H,03H,07H,05H
	DB	05H,00H,00H,00H,05H,06H,02H,05H,06H,02H,05H,00H,06H,08H,07H,05H
	DB	07H,05H,00H,00H,08H,01H,02H,05H,08H,07H,05H,00H,09H,03H,07H,05H
TABHEX:	DB	30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H
		
;************* 8位共阳LED显示器字型码表 *****************
SGTB:	DB	0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
	DB	88H,83H,0C6H,0A1H,86H,8EH,89H,0A3H,8CH,0C8H

;********  延时程序  ********
YS806U:	MOV	R4,#19 		;延时806微秒
Y1: 	MOV	R5,#18		;[1]
	DJNZ	R5,$		;[2]
	DJNZ	R4,Y1 		;[2]
	RET			;[1]

YS4722U:MOV	R4,#5 		;延时4722微秒
Y3:	MOV	R5,#216		;[1]
	DJNZ	R5,$		;[2]
	DJNZ	R4,Y3 		;[2]
	RET			;[1]
	
;********** 10ms延时程序 ***********
YS10MS:	MOV	R7,#128
DL1:	MOV	R6,#0FFH
DL0:	DJNZ	R6,DL0
	DJNZ	R7,DL1
	RET

YS118M:	MOV 	 R1,#25		;延时118MS
Y5:	ACALL  YS4722U
	DJNZ   R1,Y5
	RET

YS500M:	MOV	R3,#40		;延时1000MS
Y5_1:	MOV	R4,#10 		;[1]延时5MS
Y5_2:	MOV	R5,#228		;[1]
	ACALL	KEYSCAN
	DJNZ	R5,$		;[2]
	DJNZ	R4,Y5_2		;[2]
	DJNZ	R3,Y5_1		;[2]
	RET			;[1]

YS800M:	MOV	R3,#45
YYSS1:	LCALL	DISP
	DJNZ	R3,YYSS1
	RET

YS1000M:MOV	R3,#200		;延时1000MS
Y4_1:	MOV	R4,#10 		;[1]延时5MS
Y4_2:	MOV	R5,#228		;[1]
	DJNZ	R5,$		;[2]
	DJNZ	R4,Y4_2		;[2]
	DJNZ	R3,Y4_1		;[2]
	RET			;[1]


;******* 按键音效延时(50ms)子程序 *******
SOUND:	MOV	R7,#228
SDL1:	CPL	SPK
	MOV	R6,#0FFH
SDL0:	DJNZ	R6,SDL0
	DJNZ	R7,SDL1
	SETB	SPK
	RET
                 
;************ 按键扫描程序 **************
KEYSCAN:	
SK1:	JB	K1,SK2
	ACALL	YS10MS
	JB	K1,SK2
	MOV	P0,#0FFH
	ACALL	SOUND
K1DD:	JNB	K1,K1DD
	MOV	A,#1
	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	YS500M
	SJMP	SRET
	
SK2:	JB	K2,SK3
	ACALL	YS10MS
	JB	K2,SK3
	MOV	P0,#0FFH
	ACALL	SOUND
K2DD:	JNB	K2,K2DD
	MOV	A,#2
	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	YS500M
	SJMP	SRET		

SK3:	JB	K3,SK4
	ACALL	YS10MS
	JB	K3,SK4
	MOV	P0,#0FFH
	ACALL	SOUND
K3DD:	JNB	K3,K3DD
	MOV	A,#3
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	MOV	P0,A
	SETB	P2.0
	SETB	P2.1
	SETB	P2.2
	CLR	P2.3
	SETB	P2.4
	SETB	P2.5
	LCALL	YS500M
	SJMP	SRET

SK4:	JB	K4,SRET
	ACALL	YS10MS
	JB	K4,SRET
	MOV	P0,#0FFH
	ACALL	SOUND
K4DD:	JNB	K1,K4DD
	MOV	A,#4
	MOV	DPTR,#SGTB
	MOVC	A,@A+DPTR
	MOV	P0,A
	SETB	P2.0
	SETB	P2.1
	CLR	P2.2
	SETB	P2.3
	SETB	P2.4
	SETB	P2.5
	LCALL	YS500M
SRET:	RET

	END

⌨️ 快捷键说明

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