2022年单片机原理及应用3_第1页
2022年单片机原理及应用3_第2页
2022年单片机原理及应用3_第3页
2022年单片机原理及应用3_第4页
2022年单片机原理及应用3_第5页
已阅读5页,还剩28页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

单片机原理及应用

(第十六讲)

08自动化专业适用DS18B20的特性●独立的单线接口方式;●使用时不需要外围元件的支持;●温度测量范围:-55~+125°C,固有测量分辨率为0.5°C;●编成实现9~12位的温度数据;●可实现多点组网测量功能;●具有良好的负压特性。DS18B20封装与引脚

GNDDQVDDNC1●16NCNC215NCNC314NCNC413NCNC512NCNC611NCVDD710NCDQ89GND123DS18B20的操作命令初始化:初始化过程就是单片机向DS18B20芯片发出一个有时间宽度要求的初始化脉冲来实现。ROM操作命令:1.读ROM命令字为[33H]读DS18B20中的ROM命令,在BS18B20内部包含一个64位长的序号,该序号存放在ROM中,,前8为---------产品类型编码10H48位----------芯片惟一的序号后8位---------循环冗余码(CRC校验码)2.匹配ROM命令字为[55H]多温度测量使用3.跳过ROM命令为[CCH]

不必读64位序列号,之后的操作是针对DB18B20。

4.搜索ROM命令字为[F0H]

搜索序列号或芯片

5.报警搜索命令字为[ECH]

温度上、下限的设置

随机存储器(RAM)操作命令

随机存储器的命令主要是用于对DS18B20进行的读、写、启动等操作。在DS18B20中,共有8个随机存储器,与温度有关的主要是前4个。

0字节-------低8位寄存器

1字节-------高8位寄存器

2字节-------温度上限寄存器TH

3字节-------温度下限寄存器TL

1.写随机存储器命令字为[4EH]

2.读随机存储器命令字为[BEH]

从0字节开始读取

3.启动温度变换命令字为[44H]高速暂存RAM的结构为8字节的存储器

结构图温度LSB温度MSB高温限值TH低温限值TL配置寄存器保留保留保留CRC配置寄存器

R1R0的值决定了温度转换的分辨率;默认值为11。0R1R011111R1R0分辨率/位转换时间/ms00993.750110187.510113751112750当BS18B20接收到温度转换命令后,开始启动转换。转换完成的温度值就以16位带符号扩展的二进制补码形式存储在高速暂存RAM的第1、2字节。单片机可以通过单线接口读出该数据,读出数据时,地位在先,高位在后。格式如下:S=0,正值;S=1,负值

2³2²2¹2°2¯¹2¯²2¯³2¯⁴LSBSSSSS2⁶2⁵2⁴MSB

4.复制随机存储器命令字为[48H]

把报警值存入EEPROM

5.重新调用命令字为[B8H]

与复制随机存储器对应

6.读电源命令字为[B4H]

数据总线供电方式返回0;外部供电方式返回1。

9.2DS18B20的工作时序

初始化时序、写时序、读时序三种。

1.初始化时序

480μs

400μs~960μs15μs~60

μs60μs~240μs

t0t1t2t3t4

2.写时序>60μs

15μs45μs>1μs

t0t1

写1时序图

>60μs

15μs45μs>1μs

t0t1

写0时序图===============计算温度的子程序==========

CONVER:MOVA,#0FH

ANLA,TEMPER_H

SWAPA

MOVB,A

MOVA,#0F0H

ANLA,TEMPER_L

SWAPA

ADDA,B

MOV32H,A

BCD:MOVB,#100

DIVAB

MOV30H,A

MOVA,#10

XCHA,B

DIVAB

MOVA_BIT,A

MOVB_BIT,B0000000000110010是否取完64位

RET

;0;读时序

>60μs

15μs>1μs

t0t1t2t3

读时序图

CPU在t0时刻从高拉低电平时,总线只需保持低电平1μs,在t1时刻

将总线拉高,产生读的时序,读时序在t1时刻后t2时刻前有效。跳过ROM命令为[CCH]

不必读64位序列号,之后的操作是针对DB18B20。共8X8=64位序列号

XL1:MOVA,@R0;判断是否送完8位命令字

SETBP1.NC314NCFFFFH判断是否送完8位命令字

SETBP1.读DS18B20,ROM的编码(即64位ROM的地址)启动DS18B20进行温度转换,转换时间最长为500ms(典型值为200ms),结果存入内部9字节RAM中在t2时刻前,CPU必须完成读位,在t0后的60~120μs内释放总线。===========写入DS18B20中1字节子程序=============

入口处A

WRITE:CLREA;3.读时序

>60μs

15μs>1μs

t0t1t2t3

读时序图

CPU在t0时刻从高拉低电平时,总线只需保持低电平1μs,在t1时刻

将总线拉高,产生读的时序,读时序在t1时刻后t2时刻前有效。T2距t0为15μs

。在t2时刻前,CPU必须完成读位,在t0后的60~120μs内释放总线。

9.3温度测量结果的换算

测量范围-55°C~+125°C

测量精度0.5°C温度(°C)二进制输出十六进制输出+125000000001111101000FAH…….

+2500000000001100100032H……..+0.500000000000000010001H000000000000000000000H-0.51111111111111111FFFFH……

-251111111111001110FFCEH…..-1251111111110010010FF92H9.4接口编程

DS18B20硬件接口虽然简单,但是接口编程比较繁。DS18B20与89C51的接口协议是通过严格的时序来实现的,DS18B20的数据的写入和读出都是由单片机读写特定的时间暂存器来实现的。

主要有三个接口程序:

DS18B20初始化程序

写DS18B20子程序

读DS18B20子程序

CPU控制DS18B20完成温度转换必须经过2个步骤:

先启动DS18B20开始转换

再读出温度转换值;==============DS18B20初始化子程序============

ABC:CLREA;关中断

L0:CLRP1.0;给复位信号

MOVR2,#200;延时600μs

L1:CLRP1.0;再确定复位信号

DJNZR2,L1

SETBP1.0;P1.0改为输入口

MOVR2,#32;延时64μs

L4:DJNZR2,L4

CLRC;清位

JBP1.0,L0;DS18B20数据线变低,若没有,说

;明没准备好,重来

MOVR6,#80;已变低,

L5:JBP1.0,L3;DS18B20数据变低,(为0顺序执

;行)收到相应的脉冲,初始化成功

DJNZR6,L5

SJMPL0;初始化失败,跳转L0重来

L3:MOVR2,#240

L2:DJNZR2,L2;DS18B20应答过程最少480μs

SETBEA

RET

;===========写入DS18B20中1字节子程序=============

入口处A

WRITE:CLREA;关中断

MOVR3,#8;设定8位

WR1:SETBP1.0;启动写时序

MOVR4,#8;设定延时时间

RRCA;最低位送C

CLRP1.0;写位送总线

WR2:DJNZR4,WR2;延时16μs

MOVP1.0,C;送C到P1.0口

MOVR4,#30;设定延时时间

WR3:DJNZR4,WR3;保证整个写过程持续60μs

DJNZR3,WR1;判断是否送完8位命令字

SETBP1.0;送完,置位

SETBEA

RET;===========读入DS18B20中1字节子程序============

出口为A

READ:CLREA;关中断

MOVR6,#8;设定8位

RE1:CLRP1.0;启动读时序

MOVR4,#4;设定延时时间

NOP;低电平持续2μs

SETBP1.0;P1.0设定为输入口,位送总线

RE2:DJNZR4,RE2;延时8μs

MOVC,P1.0,;单片机按位读入DB18B20数据

RRCA;数据送入A

MOVR5,#30;设定延时时间

RE3:DJNZR5,RE3;保证整个写过程持续60μs

DJNZR6,RE1;判断是否送完8位命令字

SETBP1.0;送完,置位

SETBEA

RET;================发序列号的子程序=============

入口:R0为DS18B20的序列号存放的首地址

XL:MOVR1,#8;共8X8=64位序列号

XL1:MOVA,@R0;取序列号的8位

LCALLWRINT;写序列号,调子程序

INCR0;

DJNZR1,XL1;是否取完64位

RET

;=================延时1秒的子程序=============

DELAY:MOVR5,#10;1秒延时

D3:MOVR6,#200

D2:MOVR7,#250

DJNZR7,$

DJNZR6D2

DJNZR5D3

RET

;================保存第1个18B20温度值的子程序======

DDD:MOVR1#60H

MOV@R1A

INCR1;====================主程序=====================

ORG0000H

LJMPMAIN

ORG000BH

LJMPINT0

..

ORG0200H

MAIN:…..

LCALLABC

MOVA,#0CCH

LCALLWRITE

MOVA,#44H

LCALLWRITE

LCALLABC

LCALLWRITE

MOVR0,#CC

LCALLXL

LCALLDELAY

MOVA,#0BEH

LCALLWRITE

LCALLREAD

LCALLDDD

---

END;===============常数值的设置=============

DATBITP1.0

TEMPER_LEQU40H

TEMPER_HEQU41H

A_BITEQU60H

B_BITEQU61H

;===============计算温度的子程序==========

CONVER:MOVA,#0FH

ANLA,TEMPER_H

SWAPA

MOVB,A

MOVA,#0F0H

ANLA,TEMPER_L

SWAPA

ADDA,B

MOV32H,A

BCD:MOVB,#100

DIVAB

MOV30H,A

MOVA,#10

XCHA,B

DIVAB

MOVA_BIT,A

MOVB_BIT,B;===========温度比较子程序=============

COMPARE:MOV50H,#50H;设定值在50H,50为37度

MOVA,32H;取温度值

CLRC;清C

CJNEA,50H,RESULT1;比较,不等转

LOOP2:SETBP1.7;相等,报警

LJMPRETURN

RESULY1:JNCLOOP;不等,判C,C为1,温度小于37度

;C为0,温度大于37度,转

CLRP1.7

LJMPRETURN

LOOP:LJMPLOOP2

RETURN:RET

;===========温度数据转换成BCD码子程序======9.2DS12C887的应用

DS12C887是一个24引脚的双列直插芯片,芯片内有锂电池、晶振、驱动和控制电路。主要特点:片内有14字节的时钟和控制寄存器114字节的供用户使用的静态非易失RAM有两种总线模式片内供电可连续工作10年时钟日历选择二进制或BCD码有三种编程中断可编程输出15种频率的方波输出MOT1●24VCC

23SQW

AD04

AD15

AD2619/IRQ

AD3718/RESET

AD4817DS

AD59

AD61015R/W

AD71114AS

GND1213/CSDS18B20DS18B20外部引脚的功能1MOT方式选择端4~11AD0~AD7双向地址/数据复用总线12GND接地端13/CS片选端14AS地址线选通端15R/W读写使能端17DS数据选通或输入18/RESET复位端19/IRQ中断申请端23SQW可编程方波输出端24VCC+5VDS12C887片内地址分配

00014字节130D140E114字节RAM(用户使用)1277F0秒00

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论