基于DS18B20在单片机AT89S52上实现的数字式温度计.docx

上传人:b****7 文档编号:23394863 上传时间:2023-05-16 格式:DOCX 页数:17 大小:114.40KB
下载 相关 举报
基于DS18B20在单片机AT89S52上实现的数字式温度计.docx_第1页
第1页 / 共17页
基于DS18B20在单片机AT89S52上实现的数字式温度计.docx_第2页
第2页 / 共17页
基于DS18B20在单片机AT89S52上实现的数字式温度计.docx_第3页
第3页 / 共17页
基于DS18B20在单片机AT89S52上实现的数字式温度计.docx_第4页
第4页 / 共17页
基于DS18B20在单片机AT89S52上实现的数字式温度计.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

基于DS18B20在单片机AT89S52上实现的数字式温度计.docx

《基于DS18B20在单片机AT89S52上实现的数字式温度计.docx》由会员分享,可在线阅读,更多相关《基于DS18B20在单片机AT89S52上实现的数字式温度计.docx(17页珍藏版)》请在冰豆网上搜索。

基于DS18B20在单片机AT89S52上实现的数字式温度计.docx

基于DS18B20在单片机AT89S52上实现的数字式温度计

基于DS18B20在单片机AT89S52上实现的数字式温度计

功能要求

数字式温度计要求测温范围为-50~110℃,精度误差在0.1℃以内,LED数码管直读显示并通口串口发送到PC机上显示

 

方案论述

 在日常生活及工农业生产中经常要用到温度的检测及控制,传统的测温元件有热电偶和热电阻。

而热电偶和热电阻测出的一般都是电压,再转换成对应的温度,需要比较多的外部硬件支持,硬件电路复杂,软件调试复杂,制作成本高。

  本数字温度设计采用美国DALLAS半导体公司继DS1820之后推出的一种改进型智能温度传感器DS18B20作为检测元件,测温范围为-55~125℃,最大分辩率可达0.0625℃。

DS18B20可以直接读出被测温度值,而且采用1-wire与单片机相连,减少了外部的硬件电路,具有低成本和易使用的特点。

 

系统硬件电路的设计

温度计电路设计原理图如下图所示,控制器使用单片机AT89S52,温度传感器使用DS18B20,用4位共阴LED数码管以动态扫描法实现温度显示

基于DS18B20在单片机AT89S52上实现的数字式温度计

温度传感器工作原理

DS18B20功能特点

1.采用单总线技术,与单片机通信只需要一根I/O线,在一根线上可以挂接多个DS18B20。

2.每只DS18B20具有一个独有的,不可修改的64位序列号,根据序列号访问地应的器件。

3.低压供电,电源范围从3~5V,可以本地供电,也可以直接从数据线上窃取电源(寄生电源方式)。

4.测温范围为-55℃~+125℃,在-10℃~85℃范围内误差为±0.5℃。

5.可编辑数据为9~12位,转换12位温度时间为750ms(最大)

6.用户可自设定报警上下限温度

7.报警搜索命令可识别和寻址哪个器件的温度超出预定值。

8.DS18B20的分辩率由用户通过EEPROM设置为9~12位

9.DS18B20可将检测到温度值直接转化为数字量,并通过串行通信的方式与主控制器进行数据通信。

 

DS18B20内部结构及功能

DS18B20的内部结构如下图所示,主要包括:

寄生电源,温度传感器,64位ROM和单总线接口,存放中间数据的高速暂存器RAM,用于存储用户设定温度上下限值的TH和TL触发器,存储与控制逻辑,8位循环冗余校验码(CRC)发生器等7部分

 

温度和数字量的关系

ROM操作命令

指令

说明

读ROM命令(33H)

读18B20的序行号

搜索ROM命令(F0H)

识别总线上各器件的编码

匹配ROM命令(55H)

用于多个DS18B20的定位

跳过ROM命令(CCH)

此命令执行后,存储器操作将针对总线上的所有操作

报警搜索ROM命令(ECH)

仅温度超限的器件对此命令做出响应

RAM操作命令

指令

说明

温度转换(44H)

启动温度转换

读暂存器(BEH)

读全部暂存器内容,包括CRC字节

写暂存器(4EH)

写暂存器第2,3和4个字节的数据

复制暂存器(48EH)

将暂存器中的TH,TL和配置寄存器内容复制到EEPROM中

读EEPROM(B8H)

将TH,TL和配置寄存器内容从EEPROM中回读至暂存器

字节

ROM

RAM

0

产品代号

温度低8位

1

 

48位

器件

序列

温度高8位

2

TH

3

TL

4

配置寄存器

5

保留

6

保留

7

CRC

保留

8

 

CRC

温度配置寄存器的格式如下

0

R1

R2

1

1

1

1

1

分辩率设置如表

R1

R2

分辩率设置/位

测温精度/C

转换时间/ms

0

0

9

0.5

93.75

0

1

10

0.25

187.5

1

0

11

0.125

375

1

1

12(默认)

0.0625

750

DS18B20的通信协议

DS18B20器件要求采用严格的通信协议,以保证数据的完整性。

该协议定义了几种信号类型:

复位脉冲,应答脉冲时隙;写0,写1时隙;读0,读1时隙。

与DS18B20的通信,是通过操作时隙完成单总线上的数据传输。

发送所有的命令和数据时,都是字节的低位在前,高位在后。

1. 复位和应答脉冲时隙

每个通信周期起始于微控制器发出的复位脉冲,其后紧跟DS18B20发出的应答脉冲,在写时隙期间,主机向DS18B20器件写入数据,而在读时隙期间,主机读入来自DS18B20的数据。

在每一个时隙,总线只能传输一位数据。

2. 写时隙

当主机将单总线DQ从逻辑高拉为逻辑低时,即启动一个写时隙,所有的写时隙必须在60~120us完成,且在每个循环之间至少需要1us的恢复时间。

写0和写1时隙如图所示。

在写0时隙期间,微控制器在整个时隙中将总线拉低;而写1时隙期间,微控制器将总线拉低,然后在时隙起始后15us之释放总线。

3. 读时隙

  DS18B20器件仅在主机发出读时隙时,才向主机传输数据。

所以在主机发出读数据命令后,必须马上产生读时隙,以便DS18B20能够传输数据。

所有的读时隙至少需要60us,且在两次独立的读时隙之间,至少需要1us的恢复时间。

每个读时隙都由主机发起,至少拉低总线1us。

在主机发起读时隙之后,DS18B20器件才开始在总线上发送0或1,若DS18B20发送1,则保持总线为高电平。

若发送为0,则拉低总线当发送0时,DS18B20在该时隙结束后,释放总线,由上拉电阻将总线拉回至高电平状态。

DS18B20发出的数据,在起始时隙之后保持有效时间为15us。

因而主机在读时隙期间,必须释放总线。

并且在时隙起始后的15us之内采样总线的状态。

单片机程序设计

DOUTBITP1.7   ;定义P1.7为与DS18B20的通信口

 ORG0000H

 MOVTMOD,#20H   ;定时器T1工作于方式2

 MOVTH1,#0E6H   ;传输速率为1200波特

 MOVTL1,#0E6H

 SETBTR1        ;启动定时器T1

 MOVSCON,#40H   ;串行口工作于方式1

 MOVR0,#38H     ;将温度的最高位符号位放入Ro寄存器

MAIN:

 LCALLRESET     ;调用复用子程序

 MOVA,#0CCH     ;写跳过ROM命令

 LCALLWRITE     ;调用写子程序

 MOVA,#44H      ;启动温度转换

 LCALLWRITE

 LCALLRESET     ;调用复用子程序

 MOVA,#0CCH     ;写跳过ROM命令

 LCALLWRITE

 MOVA,#0BEH     ;发读存储器命令

 LCALLWRITE

 LCALLREAD      ;调用读子程序

 MOV32H,3DH     ;温度值存储在32H,33H单元

 LCALLREAD

 MOV33H,3DH

 LCALLCONVERT   ;温度转换子程序

 LCALLDISPLAY   ;调用显示子程序

 LCALLSEND      ;把温度发送到PC

 SJMPMAIN

RESET:

 CLRDOUT

 MOVR2,#200

NE1:

 NOP

 DJNZR2,NE1

 SETBDOUT

 MOVR2,#30

 DJNZR2,$     ;控制适当的延时

 CLRC

 MOVC,DOUT

 JCNE3

 MOVR6,#80

NE5:

 MOVC,DOUT

 JCNE3

 DJNZR6,NE5

 SJMPRESET

NE3:

 MOVR2,#250

 DJNZR2,$       ;控制适当的延时

 RET

WRITE:

 MOVR3,#8       ;定义循环次数

WR1:

 SETBDOUT

 MOVR4,#8

 RRCA           ;把对DS18B20操作的命令一位一位的从A移到CY位中

 CLRDOUT

 DJNZR4,$       ;控制适当的延时

 MOVDOUT,C      ;把CY位中的命令通过P1.7口发给DS18B20

 MOVR4,#20

 DJNZR4,$       ;控制适当的延时

 DJNZR3,WR1     ;循环八次

 SETBDOUT

 RET

READ:

 MOVR6,#8       ;定义循环次数

RE1:

 CLRDOUT

 MOVR4,#6

 SETBDOUT

 DJNZR4,$       ;控制适当的延时

 MOVC,DOUT      ;把从P1.7的数读到CY位中

 RRCA           ;把数据一位一位从CY位移到A中

 MOVR5,#30

 DJNZR5,$       ;控制适当的延时

 DJNZR6,RE1     ;循环八次

 MOV3DH,A       ;把读到的数据从A中放在3DH中

 SETBDOUT

 RET

CONVERT:

 MOVA,33H

 ADDA,#00H

 DAA

 MOV33H,A

 ANLA,#0F0H

 SWAPA

 MOV38H,A    ;33H高4位

 MOVA,33H

 ANLA,#0FH

 MOV37H,A    ;33H低4位

 MOVA,32H

 ADDA,#00H

DAA

 MOV32H,A

 ANLA,#0F0H

 SWAPA

 MOV36H,A    ;32H高4位

 MOVA,32H

 ANLA,#0FH

 MOV35H,A    ;32H低4位

 RET

DISPLAY:

 MOVB,#10H     ;数码管位选信号起始的位

 MOVA,35H      ;显示温度的小数位

 LCALLREVEAL

 LCALLDELAY

 MOVA,36H      ;显示温度整数位的低位

 LCALLREVEAL

 LCALLDELAY

 MOVA,37H      ;显示温度整数位的高位

 LCALLREVEAL

 LCALLDELAY

 MOVA,38H      ;显示温度的符号位

 LCALLREVEAL

 LCALLDELAY

 RET

REVEAL:

 MOVDPTR,#TAB    ;查表字形码

 MOVCA,@A+DPTR

 MOVP2,A         ;P2口段选

 MOVA,B          ;循环右移数码管位选信号

 RRA

 MOVB,A

 MOVP1,A         ;P1口位选

 RET

DELAY:

  MOVR6,#70

D2:

MOVR7,#10

D1:

NOP

  NOP

  NOP

  DJNZR7,D1

  DJNZR6,D2

  RET

SEND:

  MOVA,@R0        ;将存放温度的起始位放入A中

  MOVDPTR,#TAB2   ;从表中查找温度对应的ASCII码

  MOVCA,@A+DPTR

  MOVSBUF,A       ;将温度发送到发送缓冲区SBUF

  JNBTI,$          ;一帧未发完继续查询

  CLRTI            ;一帧发完了就清发送中断标志位为0

  DECR0            ;将R0的地址减一以读取下一位的温度值

  CJNER0,#34H,J1   ;温度未发完则继续发,直到把温度的四位值全部发完

  MOVR0,#38H       ;修改R0的起始地址为存放温度的首地址

  RET

J1:

SJMPSEND

TAB:

DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FH,77H,7CH,39H,5EH,79H

TAB2:

DB30H,31H,32H,33H,34H,35H,36H,37H,38H,39H  ;0~9的ASCII码表

  END

PC程序设计

  stacksegmentstack’stack’

        dw32dup(?

  stackends

  datasegment

  dataends

  codesegment

  beginprocfar

     assumess:

stack,cs:

code,ds:

data

     pushds

     movax,0

     pushax

     mov ax,data

     movds,ax

MAIN:

     MOVDX,3FBH     ;操作对象为线路控制寄存器LCR

     MOVAL,80H      ;通过给DLAB置1选波特率除数锁存器

     OUTDX,AL

     MOVDX,3F8H    ;操作对象为波特率除数锁存器的低8位

     MOVAL,60H     ;波特率为1200

     OUTDX,AL

     MOVDX,3F9H    ;操作对象为波特率除数锁存器的高8位

     MOVAL,00H

     OUTDX,AL

     MOVDX,3FBH    ;每帧8位,1个停止位,无校验位

     MOVAL,03H

     OUTDX,AL

     MOVDX,3FCH     ;Moderm控制寄存器LCR

     MOVAL,03H

     OUTDX,AL

     MOVDX,3F8H     ;接收缓冲区RDR

     INAL,DX

AGAIN:

     MOVCX,4       ;循环输出四次后会回车换行再输出

 REC:

MOVDX,3FDH    ;传输线状态寄存器LSR

WAIT:

INAL,DX

     TESTAL,01H    ;检测接收数据准备好了没有

     JZWAIT        ;为0表示接收数据未准备好则等待

     MOVDX,3F8H    ;接收缓冲区RDR

     INAL,DX       ;读入端口数据

     MOVDL,AL      ;DL中置输出字符的ASCII码

     MOVAH,2       ;2号功能调用,显示一个字符

     INT21H

     LOOPREC

     MOVDL,0DH    ;在显示器上输出回车

     MOVAH,2      ;2号功能调用,显示一个字符

     INT21H

     MOVDL,0AH    ;在显示器上输出换行

     MOVAH,2      ;2号功能调用,显示一个字符

     INT21H

     JMPAGAIN

 ret

  beginendp

   codeends

  endbegin

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

当前位置:首页 > PPT模板 > 动态背景

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

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