DS18B20温度传感器的使用方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这是关于DS18B20的读写程序,数据脚,晶振

;温度传感器18B20汇编程序,采用器件默认的12位转化,最大转化时间750微秒

;可以将检测到的温度直接显示到AT89C51的两个数码管上

;显示温度00到99度,很准确无需校正!

ORG 0000H

;单片机内存分配申明!

TEMPER_L EQU 29H;用于保存读出温度的低8位

TEMPER_H EQU 28H;用于保存读出温度的高8位

FLAG1 EQU 38H;是否检测到DS18B20标志位

a_bit equ 20h ;数码管个位数存放内存位置

b_bit equ 21h ;数码管十位数存放内存位置

MAIN:

LCALL GET_TEMPER;调用读温度子程序

;进行温度显示,这里我们考虑用网站提供的两位数码管来显示温度

;显示范围00到99度,显示精度为1度

;因为12位转化时每一位的精度为度,我们不要求显示小数所以可以抛弃29H的低4位;将28H中的低4位移入29H中的高4位,这样获得一个新字节,这个字节就是实际测量获得的温度

;这个转化温度的方法可是我想出来的哦~~非常简洁无需乘于系数

MOV A,29H

MOV C,40H;将28H中的最低位移入C

RRC A

MOV C,41H

RRC A

MOV C,42H

RRC A

MOV C,43H

RRC A

MOV 29H,A

LCALL DISPLAY;调用数码管显示子程序

CPL

AJMP MAIN

; 这是DS18B20复位初始化子程序

INIT_1820:

SETB

NOP

CLR

;主机发出延时537微秒的复位低脉冲

MOV R1,#3

TSR1:MOV R0,#107

DJNZ R0,$

DJNZ R1,TSR1

SETB ;然后拉高数据线

NOP

NOP

MOV R0,#25H

TSR2:

JNB ,TSR3;等待DS18B20回应

DJNZ R0,TSR2

LJMP TSR4 ; 延时

TSR3:

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

CLR ;检查到DS18B20就点亮

LJMP TSR5

TSR4:

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

CLR

LJMP TSR7

TSR5:

MOV R0,#117

TSR6:

DJNZ R0,TSR6 ; 时序要求延时一段时间

TSR7:

SETB

RET

; 读出转换后的温度值

GET_TEMPER:

SETB

LCALL INIT_1820;先复位DS18B20

JB FLAG1,TSS2

CLR

RET ; 判断DS1820是否存在若DS18B20不存在则返回

TSS2:

CLR ;DS18B20已经被检测到!!!!!!!!!!!!!!!!!!

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

LCALL WRITE_1820

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

LCALL WRITE_1820

;这里通过调用显示子程序实现延时一段时间,等待AD转换结束,12位的话750微秒LCALL DISPLAY

LCALL INIT_1820;准备读温度前先复位

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

LCALL WRITE_1820

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

LCALL WRITE_1820

LCALL READ_18200; 将读出的温度数据保存到35H/36H

CLR

;写DS18B20的子程序(有具体的时序要求)

WRITE_1820:

MOV R2,#8;一共8位数据

CLR C

WR1:

CLR

MOV R3,#5

DJNZ R3,$

RRC A

MOV ,C

MOV R3,#21

DJNZ R3,$

SETB

NOP

DJNZ R2,WR1

SETB

RET

READ_18200: ; 读DS18B20的程序,从DS18B20中读出两个字节的温度数据MOV R4,#2 ; 将温度高位和低位从DS18B20中读出

MOV R1,#29H ; 低位存入29H(TEMPER_L),高位存入28H(TEMPER_H)

RE00:

MOV R2,#8;数据一共有8位

RE01:

CLR C

SETB

NOP

NOP

CLR

NOPNOP

NOP

SETB

MOV R3,#8

RE10:

DJNZ R3,RE10

MOV C,

MOV R3,#21

RE20:

DJNZ R3,RE20

RRC A

DJNZ R2,RE01

MOV @R1,A

DEC R1

相关文档
最新文档