您好,欢迎来到保捱科技网。
搜索
您的当前位置:首页DS18B20测温程序

DS18B20测温程序

来源:保捱科技网


DS18B20测温程序(数码显示) *

;**************************************************************************

;*接线方法: *

;* 1、用一8P的数据线,一头插在J1,另一头插在J5,接通数码管的段选 ;* 2、用一8P的数据线,一头插在J4,另一头插在J6,接通数码管的位选 ;* 3、将DS18B20插在主机上的测温部份 *

;* 4、用一根单根的数据线,一头插在DS18B20所在数据插针,另一头插到P2.7 ;**************************************************************************

TEMPER_L EQU 36H ;从DS18B20中读回高位,低位暂存区

TEMPER_H EQU 35H ;

TEMPER_NUM EQU 60H;温度值存储

TEMPER_GE EQU 61H

TEMPER_SHI EQU 62H

*

*

*

TEMPER_SAVE EQU 63H

FLAG1 BIT 00H

FLAG2 BIT 01H

RS BIT p3.0;液晶控制接口

RW BIT p3.1

E BIT p3.2

DQ BIT P2.7;单总线口

ORG 0000H

AJMP MAIN

ORG 0030H

MAIN: MOV SP,#70H

LCALL GET_TEMPER

LCALL TEMPER_COV

LCALL DISPLAY

LJMP MAIN

NOP

;**************************************************

;读出转换后的温度值

;**************************************************

GET_TEMPER:

SETB DQ ; 定时入口

BCD: LCALL INIT_1820

JB FLAG1,S22

LJMP BCD ; 若DS18B20不存在则返回

S22: LCALL DELAY1

MOV A,#0CCH ; 跳过ROM匹配------0CC命令

LCALL WRITE_1820

MOV A,#44H ; 发出温度转换命令

LCALL WRITE_1820

NOP

LCALL DELAY

CBACALL INIT_1820

JB FLAG1,ABC

LJMP CBA

ABCCALL DELAY1

MOV A,#0CCH ; 跳过ROM匹配

LCALL WRITE_1820

MOV A,#0BEH ; 发出读温度命令

LCALL WRITE_1820

LCALL READ_18200 ;READ_1820

RET

;**************************************************************

;读DS18B20的程序,从DS18B20中读出一个字节的数据

;**************************************************************

READ_1820:

MOV R2,#8

RE1:

CLR C

SETB DQ

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#7

DJNZ R3,$

MOV C,DQ

MOV R3,#23

DJNZ R3,$

RRC A

DJNZ R2,RE1

RET

;******************************************************

;写DS18B20的程序

;******************************************************

WRITE_1820:

MOV R2,#8

CLR C

WR1:

CLR DQ

MOV R3,#6

DJNZ R3,$

RRC A

MOV DQ,C

MOV R3,#23

DJNZ R3,$

SETB DQ

NOP

DJNZ R2,WR1

SETB DQ

RET

;****************************************************

;读DS18B20的程序,从DS18B20中读出两个字节的温度数据

;****************************************************

READ_18200:

MOV R4,#2 ; 将温度高位和低位从DS18B20中读出

MOV R1,#36H ; 低位存入36H(TEMPER_L),高位存入35H(TEMPER_H)

RE00:

MOV R2,#8

RE01:

CLR C

SETB DQ

NOP

NOP

CLR DQ

NOP

NOP

NOP

SETB DQ

MOV R3,#7

DJNZ R3,$

MOV C,DQ

MOV R3,#23

DJNZ R3,$

RRC A

DJNZ R2,RE01

MOV @R1,A

DEC R1

DJNZ R4,RE00

RET

;;****************************************************

;将从DS18B20中读出的温度数据进行转换

;;****************************************************

TEMPER_COV:

MOV A,#0F0H

ANL A,TEMPER_L ; 舍去温度低位中小数点后的四位温度数值

SWAP A

MOV TEMPER_NUM,A ;得到低四位

MOV A,TEMPER_L

JNB ACC.3,TEMPER_COV1 ; 四舍五入去温度值

INC TEMPER_NUM

TEMPER_COV1:

MOV A,TEMPER_H

ANL A,#07H

SWAP A

ORL A,TEMPER_NUM ;得到高四位,再与低四位相或得到值

MOV TEMPER_NUM,A ; 保存变换后的温度数据

LCALL BIN_BCD

RET

;;****************************************************

;将16进制的温度数据转换成压缩BCD码

;;****************************************************

BIN_BCD:

MOV A,TEMPER_NUM

MOV B,#10

DIV AB

MOV TEMPER_SHI,A

MOV TEMPER_GE,B

MOV A,TEMPER_SAVE

CJNE A,TEMPER_GE,ZW

FHRET:

MOV TEMPER_SAVE,TEMPER_GE

RET

ZW:

CALL LCDDISP

AJMP FHRET

;****************************************************

;DS18B20初始化程序

;;****************************************************

INIT_1820:

SETB DQ

NOP

CLR DQ

MOV R0,#250

TSR1:

DJNZ R0,TSR1 ; 延时520us

SETB DQ

MOV R0,#25H ;96US-25H

TSR2:

DJNZ R0,TSR2

JNB DQ,TSR3;如D0为低则复位成功,DS18B20存在

LJMP TSR4 ; 延时

TSR3:

SETB FLAG1 ; 置标志位,表示DS1820存在

LJMP TSR5

TSR4:

CLR FLAG1 ; 清标志位,表示DS1820不存在

LJMP TSR7

TSR5:

MOV R0,#06BH ;200US

TSR6:

DJNZ R0,TSR6 ; 延时

TSR7:

SETB DQ ;拉高总线

RET

;*************************************************

;数码显示程序

;*************************************************

Display:

MOV DPTR,#disptab

MOV A,TEMPER_GE

MOVC A,@A+DPTR

MOV P1,A

CLR P2.2

CALL DELAY

CALL DELAY

SETB P2.2

MOV DPTR,#disptab

MOV A,TEMPER_SHI

MOVC A,@A+DPTR

MOV P1,A

CLR P2.3

CALL DELAY

CALL DELAY

SETB P2.3

RET

;*************************************************

;液晶显示程序

;*************************************************

LCDDISP:

mov p0,#01h;清屏

call enrw

mov p0,#38h;设为8位,5*7字 型两行

call enrw

mov p0,#0Ch

call enrw

mov p0,#06h

call enrw

mov p0,#80h

call enrw

mov dptr,#yjtab

call rwram

mov p0,#0C0h

call enrw

mov dptr,#yjtab1

call rwram

W_TEM:

mov p0,#0CCh

call enrw

MOV DPTR,#ASCII

MOV A,TEMPER_SHI

MOVC A,@A+DPTR

MOV P0,A

setb rs

clr rw

clr e

call delay

setb e

MOV DPTR,#ASCII

MOV A,TEMPER_GE

MOVC A,@A+DPTR

MOV P0,A

setb rs

clr rw

clr e

call delay

setb e

RET

enrw:clr rs

clr rw

clr e

call delay

setb e

ret

rwram:mov r1,#00h

a1: mov a,r1

movc a,@a+dptr

call rwram2

inc r1

cjne a,#00h,a1

ret

rwram2:mov p0,a

setb rs

clr rw

clr e

call delay

setb e

ret

;*************************************************

;延时子程序

;*************************************************

DELAY:

MOV R6,#250;延时500us

DJNZ R6,$

RET

DELAY1:MOV R7,#20H

DJNZ R7,$

RET

disptab:

db 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H;字形代码表

;0 1 2 3 4 5 6 7 8 9

yjtab: db 'HTTP//WWW.C51.CN ',00h

yjtab1:db 'CHENZHOU_TE:**`C',00h

ASCII: DB 30H,31H,32H,33H,34H,35H,36H,37H,38H,39H

end

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baoaiwan.cn 版权所有 赣ICP备2024042794号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务