温度检测与控制实验报告.docx

上传人:b****5 文档编号:6785247 上传时间:2023-01-10 格式:DOCX 页数:13 大小:29.29KB
下载 相关 举报
温度检测与控制实验报告.docx_第1页
第1页 / 共13页
温度检测与控制实验报告.docx_第2页
第2页 / 共13页
温度检测与控制实验报告.docx_第3页
第3页 / 共13页
温度检测与控制实验报告.docx_第4页
第4页 / 共13页
温度检测与控制实验报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

温度检测与控制实验报告.docx

《温度检测与控制实验报告.docx》由会员分享,可在线阅读,更多相关《温度检测与控制实验报告.docx(13页珍藏版)》请在冰豆网上搜索。

温度检测与控制实验报告.docx

温度检测与控制实验报告

实验三十二温度传感器温度控制实验

一、实验目的

1.了解温度传感器电路的工作原理

2.了解温度控制的基本原理

3.掌握一线总线接口的使用

二、实验说明

这是一个综合硬件实验,分两大功能:

温度的测量和温度的控制。

1.DALLAS最新单线数字温度传感器DS18B20简介

Dallas半导体公司的数字化温度传感器DS1820是世界上第一片支持“一线总线”接口的温度传感器。

现场温度直接以“一线总线”的数字方式传输,大大提高了系统的抗干扰性。

适合于恶劣环境的现场温度测量,如:

环境控制、设备或过程控制、测温类消费电子产品等。

与前一代产品不同,新的产品支持3V~5.5V的电压范围,使系统设计更灵活、方便。

DS18B20测量温度范围为-55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C。

DS18B20可以程序设定9~12位的分辨率,及用户设定的报警温度存储在EEPROM中,掉电后依然保存。

DS18B20内部结构

DS18B20内部结构主要由四部分组成:

64位光刻ROM、温度传感器、非挥发的温度报警触发器TH和TL、配置寄存器。

DS18B20的管脚排列如下:

DQ为数字信号输入/输出端;GND为电源地;VDD为外接供电电源输入端(在寄生电源接线方式时接地)。

光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。

64位光刻ROM的排列是:

开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。

光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。

DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:

用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。

 

LSByte:

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

Bit0

23

22

21

20

2-1

2-2

2-3

2-4

MSByte:

Bit15

Bit14

Bit13

Bit12

Bit11

Bit10

Bit9

Bit8

S

S

S

S

S

26

25

24

这是12位转化后得到的12位数据,存储在18B20的两个8比特的RAM中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。

例如+125℃的数字输出为07D0H,+25.0625℃的数字输出为0191H,-25.0625℃的数字输出为FF6FH,-55℃的数字输出为FC90H。

温度

数据输出(二进制)

数据输出(十六进制)

+125℃

0000011111010000

07D0h

+85℃

0000010101010000

0550h

+25.0625℃

0000000110010001

0191h

+10.125℃

0000000010100010

00A2h

+0.5℃

0000000000001000

0008h

0℃

0000000000000000

0000h

-0.5℃

1111111111111000

FFF8h

-10.125℃

1111111101011110

FF5Eh

-25.0625℃

1111111001101111

FE6Fh

-55℃

1111110010010000

FC90h

DS18B20温度传感器的存储器

DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。

暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。

第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。

第六、七、八个字节用于内部计算。

第九个字节是冗余检验字节。

该字节各位的意义如下:

TM

R1

R0

1

1

1

1

1

低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。

在DS18B20出厂时该位被设置为0,用户不要去改动。

R1和R0用来设置分辨率,如下表所示:

(DS18B20出厂时被设置为12位)

分辨率设置表:

R1

R0

分辨率

温度最大转换时间

0

0

9位

93.75ms

0

1

10位

187.5ms

1

0

11位

375ms

1

1

12位

750ms

根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:

每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。

复位要求主CPU将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。

2.本实验在读取温度的基础上,完成类似空调恒温控制的实验。

用加热电阻代替加热电机,制冷采用自然冷却。

温度值通过LED静态显示电路以十进制形式显示出来,同时显示电路还将显示设定的恒温值,通过键盘可以改变设定值。

按一次‘升高’键,恒温值加1℃,按一次‘降低’键,恒温值减小1℃。

恒温值在2℃~50℃范围内可调。

当实际温度低于设定的恒定温度2℃时,单片机发出指令信号,继电器吸合,红色LED点亮,加热电阻开始加热。

当温度超过设定的恒温值2℃时,单片机发出指令信号,继电器断开,红色LED熄灭,加热电阻停止加热,制冷采用自然冷却。

三、实验内容及步骤

1.用串行数据通信线连接计算机与仿真器,把仿真器插到模块的锁紧插座中,请注意仿真器的方向:

缺口朝上。

2.打开KeiluVision2仿真软件,首先建立本实验的项目文件,接着添加“DS18B20.ASM”源程序,编译无误后,全速运行程序。

3.程序正常运行后,按下自锁开关‘控制’。

5LED数显为“XX20”,“XX”为十进制温度测量值,当气温低于0℃,或者模拟信号输入端的电位器没有逆时针旋到底时,温度值前面出现“-”号。

“20”为十进制温度设定值,按设定键‘升高’、‘降低’可以改变设定值。

当测量值小于设定值2个字时,加热启动,当实际值超过设定值2个字时,加热停止。

4.可把源程序编译成可执行文件,烧录到89C51芯片中。

四、源程序

LEDBufEQU60H;显示缓存1

TEMPEQU65H;显示缓存2

UPEQU1;1键定义为增加键

DOWNEQU2;2键定义为减小键

LowLimitEQU2;设定值最低为2

HighLimitEQU50;设定值最高为50

FLAG1EQU38H;是否检测到DS18B20标志位

SetTempEQU50h;温度设定值缓存

CurTempEQU29h;温度实际值缓存

DINBITP3.0;串行显示数据口

CLKBITP3.1;串行显示时钟口

ORG0000H

ljmpStart

ORG0100H

Start:

movSetTemp,#20;设定值初值20

MLoop:

LCALLTestKey;测试键盘是否有键按下

CJNEA,#03H,KeyPressed;有键按下,处理按键

MLOOP1:

ACALLDisplayResult;无键按下,调显示

ACALLDisplayLED

ACALLGET_TEMPER;调用读温度子程序

mova,CurTemp

jbacc.7,LE0;为负值

clrc

movb,SetTemp;为正值时与设定值比较

decb

decb

subba,b

jncGN2;小于(设定值-2),加热

LE0:

setbp3.2

sjmpGN4

GN2:

mova,CurTemp

setbc

movb,SetTemp

incb

incb

subba,b

jcGN4;大于(设定值+2),停止加热

CLRP3.2

sjmpGN4

GN4:

ACALLDELAY1

LjmpMLoop;大循环

KeyPressed:

;处理按键

LCALLGetKey;读取键值

movb,a

xrla,#DOWN

jnzKey0

mova,SetTemp

xrla,#LowLimit

jzKey1

DECSetTemp

sjmpKey1

Key0:

mova,b

xrla,#UP

jnzKey1

mova,SetTemp

xrla,#HighLimit

jzKey1

incSetTemp

Key1:

LjmpMLooP1

INIT_1820:

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

SETBP2.0

NOP

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

MOVR1,#3

TSR1:

MOVR0,#107

DJNZR0,$

DJNZR1,TSR1

SETBP2.0;然后拉高数据线

NOP

NOP

NOP

MOVR0,#25H

TSR2:

JNBP2.0,TSR3;等待DS18B20回应

DJNZR0,TSR2

LJMPTSR4;延时

TSR3:

SETBFLAG1;置标志位,表示DS1820存在

LJMPTSR5

TSR4:

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

LJMPTSR7

TSR5:

MOVR0,#117

TSR6:

DJNZR0,TSR6;时序要求延时一段时间

TSR7:

SETBP2.0

RET

GET_TEMPER:

;读出转换后的温度值

SETBP2.0

LCALLINIT_1820;先复位DS18B20

JBFLAG1,TSS2

RET;判断DS1820是否存在?

若DS18B20不存在则返回

TSS2:

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

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

LCALLWRITE_1820

;这里通过调用显示子程序实现延时一段时间,等待AD转换结束

LCALLDELAY1

LCALLINIT_1820;准备读温度前先复位

MOVA,#0CCH;跳过ROM匹配

LCALLWRITE_1820

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

LCALLWRITE_1820

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

MOVA,CurTemp

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

RRCA

MOVC,41H

RRCA

MOVC,42H

RRCA

MOVC,43H

RRCA

MOVCurTemp,A

RET

WRITE_1820:

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

MOVR2,#8;一共8位数据

CLRC

WR1:

CLRP2.0

MOVR3,#6

DJNZR3,$

RRCA

MOVP2.0,C

MOVR3,#23

DJNZR3,$

SETBP2.0

NOP

DJNZR2,WR1

SETBP2.0

RET

READ_18200:

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

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

MOVR1,#CurTemp;低位存入29H,高位存入28H

RE00:

MOVR2,#8;数据一共有8位

RE01:

CLRC

SETBP2.0

NOP

NOP

CLRP2.0

NOP

NOP

NOP

SETBP2.0

MOVR3,#9

RE10:

DJNZR3,RE10

MOVC,P2.0

MOVR3,#23

RE20:

DJNZR3,RE20

RRCA

DJNZR2,RE01

MOV@R1,A

DECR1

DJNZR4,RE00

RET

DisplayLED:

;数码管显示

MOVR0,#LEDBUF

MOVR1,#TEMP

MOVR2,#5

DP10:

MOVDPTR,#LEDMAP

MOVA,@R0

MOVCA,@A+DPTR

MOV@R1,A

INCR0

INCR1

DJNZR2,DP10

MOVR0,#TEMP

MOVR1,#5

DP12:

MOVR2,#8

MOVA,@R0

DP13:

RLCA

MOVDIN,C

CLRCLK

SETBCLK

DJNZR2,DP13

INCR0

DJNZR1,DP12

RET

LEDMAP:

DB3FH,6,5BH,4FH,66H,6DH;0,1,2,3,4,5

DB7DH,7,7FH,6FH,77H,7CH;6,7,8,9,A,B

DB58H,5EH,7BH,71H,0,40H;C,D,E,F,,-

DB63H,39H;℃

DisplayResult:

;十六进制转换为十进制

mova,CurTemp

jnbacc.7,GE0

movLEDBuf,#11h;'-'

deca

cpla

LjmpGoon

GE0:

movLEDBuf,#10H;''

Goon:

movb,#10

divab

movLEDBuf+1,a

mova,b

movLEDBuf+2,a

mova,SetTemp

movb,#10

divab

movLEDBuf+3,A

mova,b

movLEDBuf+4,A

ret

TestKey:

;测试键盘是否有键按下

MOVP1,#03H

MOVA,P1;读入键状态

ret

KeyTable:

;键码定义

DB02H,01H,0F7H

DB0EFH,0DFH,0BFH,07FH

GETKEY:

MOVR6,#10

LCALLDELAY

MOVA,P1

anla,#03h;高六位不用

CJNEA,#03H,K01;确有键按下

LJMPMLOOP

K01:

MOVR3,#2;2个键

MOVR2,#0;键码

MOVB,A;暂存键值

MOVDPTR,#KeyTable

K02:

MOVA,R2

MOVCA,@A+DPTR;从键值表中取键值

CJNEA,B,K04;键值比较

MOVA,R2;得键码

INCA

RET

K04:

INCR2;不相等,到继续访问键值表

DJNZR3,K02

MOVA,#0FFH;键值不在键值中,即多键同时按下

LJMPMLOOP

Delay:

;延时子程序

movr7,#0

DelayLoop:

djnzr7,DelayLoop

djnzr6,DelayLoop

ret

DELAY1:

;延时子程序

MOVR4,#0FFH

AA1:

MOVR5,#0FFH

AA:

NOP

NOP

DJNZR5,AA

DJNZR4,AA1

RET

end

五、电路图

 

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1