单线多点数字温度检测仪设计 - 图文(8)

2019-05-26 21:42

西南交通大学本科毕业设计(论文) 第29页

DJNZ B,RLOP ;8位读完? POP

B ;恢复B

RET

3.3.4多路测试

每一片DSl820 在其ROM 中都存有其唯一的48 位序列号 在出厂前已写入片内ROM中主机在进入操作程序前必须逐一接入1820 用读ROM(33H)命令将该l 820 的序列号读出并登录当主机需要对众多在线 1820的某一个进行操作时 首先要发出

匹配ROM 命令(55H)紧接着主机提供64 位序列(包括该1820 的48 位序列号) 之后的操作就是针对该1820 的 而所谓跳过ROM 命令即为 之后的操作是对所有

1820 的 框图中先有跳过ROM即是启动所有1820 进行温度变换之后通过匹配ROM 再逐一地读回每个1820的温度数据在 1820 组成的测温系统中 主机在发出跳过 ROM 命令之后 再发出统一的温度转换启动码44H就可以实现所有1820 的统一转换 再经过1s 后 就可以用很少的时间去逐一读取 这种方式使其T 值往往小于传统方式 由于采取公用的放大电路和AD 转换器 只能逐一转换显然通道数越多这种省时效应就越明显。

开始设置DS18B20个数BDS18B20初始化匹配ROM否跳过ROMDS18B20初始化变换温度读存储器等待1S存在缓冲区指针增1DS18B20初始化DS18B20初始化B-1=0?是 图3-20 多路测试程序框图

西南交通大学本科毕业设计(论文) 第30页

3.3.5 读DS18B20序列号

一条总线连接多个温度传感器是,若要对一个传感器进行操作,必须要知道其序列号。下面为获取DS18B20序列号应用程序,P1.6接DS18B20:

ORG 0000H AJMP MAIN ORG 0020H MAIN: MOV CLR

SP,#60H

EA ;使用DS18B20一定要

MOV 46H,A LCALL READ MOV 47H,A SETB

EA

SJMP $

INT: ;初始化DS18B20子程序 CLR EA

L0:CLR P1.6 ;DS18B20总线为低复位电平 MOV R2,#200 L1:CLR P1.6 DJNZ 400us SETB

P1.6 ;释放DS18B20总线 R2,L1 ;总线复位电平保持

禁止任何中断产生

LCALL INT ;初始化DS18B20 MOV

A,#33H

LCALL WRITE ;送入读DS18B20的ROM命令

LCALL READ :开始读出当前DS18B20序列号

MOV

40H,A

LCALL READ MOV

41H,A

MOV R2,#30 L4: DJNZ

R2,L4 ;释放DS18B20总线保

LCALL READ MOV 42H,A LCALL READ MOV 43H,A LCALL READ MOV 44H,A LCALL READ MOV 45H,A LCALL READ

持60us

CLR C ;清存在信号 ORL C,P1.6 JC

L0 ;存在吗?不存在则重新来

MOV R6,#80 L5:

ORL JC

C,P1.6 L3

西南交通大学本科毕业设计(论文) 第31页

DJNZ R6,L5 SJMP L0 L3:MOV

R2,#240

DJNZ SETB RET

READ: ;从DS18B20读出一个字节 CLR EA

MOV R6,#8 ;连续读8个bit RE1: CLR P1.6 ;读前总线保持为低

EA

R3,#8 ;写入DS18B20的

MOV R4,#4 NOP SETB

P1.6 ;开始读总线释放 R3,WR1 ;写入下一个bit P1.6 ;重新释放DS18B20总线

L2:DJNZ R2,L2 RET

WRITE: ;向DS18B20写操作命令子程序

CLR MOV

bit数,一个字节8个bit

WR1: SETB P1.6 MOV

R4,#8

RE2:DJNZ R4,RE2 ;持续8us MOV C,P1.6 ;从DS18B20总线读得一个bit

RRC A ;把读得的位值环移给 A MOV R5,#30

RE3:DJNZ R5,RE3 ;持续60us DJNZ SETB RET END

R6,RE1 ;读下一个bit P1.6 ;重新释放DS18B20总线

RRC A ;把一个字节data(A)分成8个bit环移给 C

CLR P1.6 ;开始写入DS18B20总线要处于复位(低)状态

WR2: DJNZ R4,WR2 ;DS18B20总线复位保持16us

MOV P1.6,C ;写入一个bit MOV R4,#20

WR3: DJNZ R4,WR3 ;等待40us

通过上面的读DS18B20序列程序,读出本次设计中应用到的DS18B20的序列号。将使用的三个DS18B20命名为DS18B20-1、DS18B20-2、DS18B20-3。这三个DS18B20的序列号为:

DS18B20-1 DS18B20-2 DS18B20-3

28F0149201000042; 28A20F920100000E; 28E54F9201000017。

西南交通大学本科毕业设计(论文) 第32页

3.3.6 温度转换和读取

获取单个DS18B20转化的温度值的应用程序,P1.6接DS18B20数据通信接口。 ORG

0000H

MAIN: MOV

SP,#60H

LCALL GET_TEMP ;调用获取温度子程序 SJMP $

GET_TEMP: 获取温度值子程序 CLR

PSW.4

SETB PSW.3 ;设置工作寄存器当前所在的区域 CLR

EA ;使用DS18B20一定要禁止任何中断产生

LCALL INT ;调用初使化子程序 MOV

A,#0CCH

LCALL WRITE ;送入跳过ROM命令 MOV

A,#44H

LCALL WRITE ;送入温度转换命令

LCALL INT ;温度转换完全,再次初使化DS18B20 MOV

A,#0CCH

LCALL WRITE ;送入跳过ROM命令 MOV

A,#0BEH

LCALL WRITE ;送入读温度暂存器命令 LCALL READ MOV

R7,A ;读出温度值低字节存入R7

LCALL READ MOV

R6,A ;读出谩度值高字节存入R6

SETB EA RET

西南交通大学本科毕业设计(论文) 第33页

3.4 按键程序

多个温度传感器进行温度测试后,将所测得到温度值存储在特定的存储单元。接下来应该选择将哪个温度传感器测得的温度进行显示。首先,选择一个特定的存储单元(命名为JISHU)用来计数,计数单元的值为多少就选择第几个DS18B20测得的温度进行显示。

由框图3-21可知:首先判断有无按键按下,如果没有就跳出子程序,如果有按键按下,接着判断是那个键按下,如果是P1.1按下,则判断JISHU内容是否为1:是,则置JISHU为4,再执行减1操作,最后跳出按键子程序;否,则直接执行减1操作,然后跳出子程序。如果是P1.0按下,则判断JISHU内容是否为3:是,则置JISHU为0,再执行加1操作,最后跳出按键子程序;否,则直接执行加1操作,然后跳出子程序。

开始按下键否是按下P1.1按下P1.0否JISHU=1JISHU-1是JISHU=4JISHU=3是JISHU=0否JISHU=1

图3-21 按键程序框图

按键子程序: KEY: MOV

A,P0;读P0口


单线多点数字温度检测仪设计 - 图文(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:诸葛神薮

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: