1、多点温度的数据采集系统摘要本系统由两部分组成:测温部分和显示部分。本课题中实现温度的检测芯片使用了 STC89C52单片机和 DALLAS公司的 DS18B20数字温度传感器。该系统可应用于温室测温、楼宇空调控制和生产过程监控等领域。DS18B20是一种高精度数字式传感器,由于具有单总线的独特优点,可以使用户轻松的组建起传感器网络。由于其特殊的一线式接口,DS18B20 可使多点温度测量电路简单、可靠。本文结合实际使用经验,介绍了 DS18B20基于单片机的数字温度传感器应用。关键字:温度测量,单总线,数字温度传感器,单片机Multi-point temperature data acquis
2、ition systemAbstractThe system is constituted by two parts, the temperature measured part and display part. It uses STC89C52 and DS18B20 of DALLAS company. This system can be applied in such domains as greenhouse temperature detecting, air conditioner controlling system in building and supervisory p
3、roductive process and so on.As a kind of high-accuracy digital temperature sensor, DS18B20 can be used in building a sensor net easily. It can also make the net simple and reliable with its special 1-wire interface. Based on the practical experience, this paper introduces the application of DS18B20
4、based on single chip processor.Key words: temperature measure, single bus, digital thermometer, single chip第 I页 共 I页目 录1 绪论 .11.1 系统背景 .12 方案论证 82.1 传感器部分 .82.2 主控制部分 .92.3 系统方案 .93 硬件电路设计 103.1 电源电路 103.2 显示电路 103.3 温度测试电路 113.4 整体电路 184 软件设计 194.1 概述 194.2 主程序方案 194.3 各模块子程序设计 215 系统调试 275.1 系统仿真
5、275.2 实验板分步调试 285.3 统一调试 28附录 A: 29附录 B: .31参 考 文 献 35致 谢 .37第 1 页 共 37 页1 绪论1.1 系统背景温度测量是现代检测技术的重要组成部分,在保证产品质量、节约能源和安全生产等方面起着关键的作用。因此,能够确保快速、准确地测量温度的技术及其装置普遍受到各国的重视。近年来,利用智能化数字式温度传感器以实现温度信息的在线检测已成为温度检测技术的一种发展趋势。本文介绍的智能温度检测系统,以智能化数字式温度传感器构成一种智能化温度检测系统。该系统具有性能可靠、测温准确、结构简单、造价低廉等特点,并兼具线路简捷、使用灵活、抗干扰性好、可
6、移植性强等优点,可在工程实际中得到广泛应用。随着电子技术的发展,将组成 CPU 的部件集成在一块半导体芯片上,这个具有 CPU 功能的大规模集成电路芯片就称之为微处理器(MPU)。微处理器的出现,推动了微型计算机的发展,同时也引起了电子设计技术领域的探到变革电子技术专业人员,使之可以把微处理器部件像其他集成电路一样嵌入到电子系统中,使电子系统具有可编程序的智能化特点,开辟了计算机技术在电子技术领域应用的广阔大地 【1】 。将微处理器、存储器、I/O 电路集成到一块半导体芯片的技术再次推动了这种嵌入式技术的发展,单片微型计算机是这种设计技术中的一个典型代表。单片机适用于测量和控制领域,它以芯片形
7、式嵌人到电子产品或系统中起到“电脑”作用,受到电子专业技术人员的青睐。单片机以其体积小、可靠性高、功能的专门化为特点。沿着与适用微处理器不同的方向发展。它的出现和发展,标志着单片嵌入技术已经成为电子系统设计的一个重要发展方向。本系统采用 STC89C52 作为该系统的单片机。系统整体硬件电路包括,电源电路,传感器电路,温度显示电路,上下限报警电路等。报警电路可以在被测温度不在上下限范围内时,发出报警鸣叫声音。温度控制的基本原理为:当DSl8B20采集到温度信号后,将温度信号送至 STC89C52 中处理,同时将温度送到 LED 数码管显示,单片机根据初始化设置的温度上下限进行判断处理,即第 2
8、 页 共 37 页如果温度大于所设的最高温度温或小于所设定的最低温度就启动报警装置 【2】 。单片机是微机发展的一个分支,是为了适应控制系统微型化、集成化的需要而生产和发展起来的。严格的说,对单片机目前还没有严格确切的定义。如果将 8位单片机的推出作为起点,那么单片机的发展历史大致可分为以下几个阶段(1)第一阶段(1976-1978)单片机的控索阶段。以 Intel 公司的 MCS-48 为代表。MCS-48 的推出是在工控领域的控索,参与这一控索的公司还有 Motorola 、Zilog 等,都取得了满意的效果。这就是 MCS 的诞生年代,“单机片”一词即由此而来。(2)第二阶段(1978-
9、1982)单片机的完善阶段。Intel 公司在 MCS-48 基础上推出了完善的、典型的单片机系列 MCS-51。它在以下几个方面奠定了典型的通用总线型单片机体系结构。完善的外部总线。MCS-51 设置了经典的 8位单片机的总线结构,包括 8位数据总线、16 位地址总线、控制总线及具有很多机通信功能的串行通信接口。CPU 外围功能单元的集中管理模式。体现工控特性的位地址空间及位操作方式。指令系统趋于丰富和完善,并且增加了许多突出控制功能的指令。(3)第三阶段(1982-1990)8 位单片机的巩固发展及 16位单片机的推出阶段,也是单片机向微控制器发展的阶段。Intel 公司推出的 MCS 9
10、6 系列单片机,将一些用于测控系统的模数转换器、程序运行监视器、脉宽调制器等纳入片中,体现了单片机的微控制器特征。随着 MCS 51 系列的广应用,许多电气厂商竞相使用 80C51为内核,将许多测控系统中使用的电路技术、接口技术、多通道 A/D 转换部件、可靠性技术等应用到单片机中,增强了外围电路路功能,强化了智能控制的特征。(4)第四阶段(1990)微控制器的全面发展阶段。随着单片机在各个领域全面深入地发展和应用,出现了高速、大寻址范围、强运算能力的 8位/16 位/32位通用型单片机,以及小型廉价的专用型单片机 【3】 。第 3 页 共 37 页单片机作为计算机发展的一个重要领域,应用一个
11、较科学的分类方法。根据目前发展情况,从不同角度单片机大致可以分为通用型/专用型、总线型/非总线型及工控型/家电型。1.通用型/专用型这是按单片机适用范围来区分的。例如,80C51是通用型单片机,它不是为某种专用途设计的;专用型单片机是针对一类产品甚至某一个产品设计生产的,例如为了满足电子体温计的要求,在片内集成ADC接口等功能的温度测量控制电路。2.总线型/非总线型这是按单片机是否提供并行总线来区分的。总线型单片机普遍设置有并行地址总线、数据总线、控制总线,这些引脚用以扩展并行外围器件都可通过串行口与单片机连接,另外,许多单片机已把所需要的外围器件及外设接口集成一片内,因此在许多情况下可以不要
12、并行扩展总线,大大减省封装成本和芯片体积,这类单片机称为非总线型单片机。3.控制型/家电型这是按照单片机大致应用的领域进行区分的。一般而言,工控型寻址范围大,运算能力强;用于家电的单片机多为专用型,通常是小封装、低价格,外围器件和外设接口集成度高。显然,上述分类并不是惟一的和严格的。例如,80C51类单片机既是通用型又是总线型,还可以作工控用 【4】 。单片机的特点:(1)有优异的性能价格比单片机的这种高性能,低价格是它最显著的一个特点。单片机尽可能把应用所需要的存储器,各种功能的 I/O 口都继承在一块芯片内,使之成为名副其实的单片机。有的单片机为了提高速度和执行效率,可是采用了 RISC
13、流水线和 DSP的设计技术,使单片机的性能明显优于同类型微处理器,有的单片机片第 4 页 共 37 页内的 ROM可达 64KB(式中的B表示为字节),片内 RAM 可达 2KB,单片机的寻址已突破 64KB的限制,八位和十六位单片机寻址可达 1MB 和 16MB。 单片机另一个显著特点是量大面广,因此世界上个大公司提高单片机性能的同时,进一步降低价格,性能/价格之比是各公司竞争的主要策略(2)集成度高、体积小、有很高的可靠性单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合在
14、恶劣环境下工作。(3)控制功能强为了满足工业控制的要求,一般单片机的指令系统中均有极丰富的转移指令、I/O 口的逻辑操作以及位处理功能。单片机的逻辑控制功能及运行速度均高于同一档次的微机。单片机是电子计算机这个庞大家族中的一个特殊品种,体积虽小,但“五脏俱全”,它非常适用于专门的控制用途。为了满足工业控制要求,一般单片机的指令系统中有极丰富的转移指令、I/O 口的逻辑操作以及位处理功能。单片机的逻辑控制功能及运行速度均高于同一档次微型计算机。(4)低功耗、低电压,便于生产便携式产品单片机大量应用于携带式产品和家用消费类产品,低电压和低功耗的特性尤为重要。许多单片机已可在 2.2 V 的电压下运
15、行,有的已能在 1.2 V 或 0.9 V下工作;功耗降至为 A 级,一粒纽扣电池就可以长期使用。(5) 集成度及可靠性高单片机的系统扩展和系统配置较典型、规范,容易构成各种规模的应用系统。单片机把各功能部件集成在一块芯片上,内部采用总线结构,减少了各芯片之间的连线,大大提高了单片机的可靠性与抗干扰能力。另外,其体积小,对于强磁场环境易于采取屏蔽措施,适合于在恶劣环境下工作。第 5 页 共 37 页外部总线增加了 IC 及 SPI 等串行总线方式,进一步缩小了体积,简化了结构 【5】 。单片机的应用范围很广,可以说覆盖了所有领域。其主要在智能仪器和控制中的应用。(1)单片机在智能仪表中的应用单
16、片机广泛地用于各种仪器仪表,使仪器仪表智能化,并可以提高测量的自动化程度和精度,简化仪器仪表的硬件结构,提高其性能价格比。(2)单片机在机电一体化中的应用机电一体化是械工业发展的方向。机电一体化产品是指集成机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,例如微机控制的车床、钻床等。单片机作为产品中的控制器,能充分发挥它的体积小、可靠性高、功能强等优点,可大大提高机器的自动化、智能化程度。(3)单片机在实时控制中的应用单片机广泛地用于各种实时控制系统中。例如,在工业测控、航空航天、尖端武器、机器人等各种实时控制系统中,都可以用单片机作为控制器。单片机的实时数据处理能力和控制功能
17、,可使系统保持在最佳工作状态,提高系统的工作效率和产品质量。(4)单片机在分布式多机系统中的应用在比较复杂的系统中,常采用分布式多机系统。多机系统一般由若干台功能各异的单片机组成,各自完成特定的任务,它们通过串行通信相互联系、协调工作。单片机在这种系统中往往作为一个终端机,安装在系统的某些节点上,对现场信息进行实时的测量和控制。单片机的高可靠性和强抗干扰能力,使它可以置于恶劣环境的前端工作。(5)单片机在人类生活中的应用自从单片机诞生以后,它就步入了人类生活,如洗衣机、电冰箱、电子玩具、收录机等家用电器配上单片机后,提高了智能化程度,增加了功能,倍受人们喜爱。单片机将使人类生活更加方便、舒适、
18、丰富多彩。第 6 页 共 37 页综合所述,单片机已成为计算机发展和应用的一个重要方面。另一方面,单片机应用的重要意义还在于,它从根本上改变了传统的控制系统设计思想和设计方法。从前必须由模拟电路或数字电路实现的大部分功能,现在已能用单片机通过软件方法来实现了。这种软件代替硬件的控制技术也称为微控制技术,是传统控制技术的一次革命 【6】 。单片机应用系统的设计(开发)的最终目的是能把它应用到实时控制系统以及仪器仪表、家用电器、汽车制造、医疗器械等各个领域。由于它的应用领域很广,技术要求各不相同,因此应用系统的硬件设计可以是各种各样的,但总体设计方法和研制步骤基本相同。有关单片机应用系统的一般开发
19、、研制方法论述如下:1. 组成单片机应用系统的基本方法用单片机组成应用系统时,实际问题的领域很宽,要求各不相同,组成的方案也千差万别,很难有一个固定的模式适应一切问题,但考虑问题的基本方法大体相似。对一般的应用系统,大都要经历如下步骤: 提出问题,了解现场,明确指标。无论是制作智能仪表还是研制工业控制系统都要对应用对象的工作过程进行深入调查和分析,了解课题的目的要求、信号的种类和数量、应用的环境等等,要把课题最终的指标明确下来。 进行可行性论证,提出初步方案。分析所接受任务的技术关键,论证能否用计算机来解决,有没有别的途径,用计算机合算与否,用什么计算机等等。如果可行,应对接受的课题提出初步方
20、案,划分软、硬件各分课题的任务。 提出各分课题的设计方案。软、硬件所承担的任务明确之后,则可以分别设计出软、硬件各自的功能及实现的方案。 完成总体设计,完成各分课题的任务,组成计算机应用系统。 对系统进行调试、修改、完善 【7】 。2. 应用系统研制进程所谓应用系统,就是利用单片机为某应用目的而设计的单片机专用系统(在调试过程中通常称为目标系统)。第 7 页 共 37 页单片机的应用系统和一般的计算机应用系统一样,也是由硬件和软件所组成。硬件指单片机、扩展的存储器、输入输出设备、控制设备、执行部件等组成的系统,软件是各种控制程序的总称。硬件和软件只有紧密相结合,协调一致,才能组成高性能的单片机
21、应用系统。在系统的研制过程中,软硬件的功能总是在不断地调整,以便相互适应,相互配合,以达到最佳性能价格比 【8】 。单片机应用系统的研制过程包括总体设计、硬件设计、软件设计、在线仿真调试、程序固化等几个阶段。各个阶段所完成的主要工作概述如下:总体设计主要包括确定技术指标,机型及器件选择,软、硬功能划分等。硬件设计主要包括程序存储器和数据存储器芯片的选择和设计;I/O 电路、A/D、D/A 及有关外围电路的设计;系统地址译码电路、总线驱动器等的设计等。软件的主要任务是定义系统功能,软件的结构设计,画出程序结构框图及各功能的程序框图,逐个编写程序。一般采用汇编语言编程较为适合。也可采用高级语言编程
22、 【9】 。软件设计完成后,进行在线仿真调试,也即查找程序中的错误。软件调试完成后再进行软、硬联机调试直至最后生成可用的软、硬件系统。软件和硬件联调完成以后,反复运行正常则可将用户系统程序固化到EPROM中,插入用户样机,用户系统即可脱离开发系统独立工作。详细的开发过程可以参阅有关的资料 【10】 。本章主要分析了国内外温度测试的发展现状及其趋势,系统的介绍了本课题主要用到单片机。在回顾了单片机发展历史,分析了其分类和特点之后,重点介绍了单片机应用系统设计,为下一步课题设计做了充分的准备。2 方案论证2.1 传感器部分方案一:采用热敏电阻,可满足 40 摄氏度至 90 摄氏度测量范围,但热敏电
23、阻精度、重复性 、可靠性较差。而且在温度测量系统中,采用单片温度传感器,比如第 8 页 共 37 页AD590,LM35 等,但这些芯片输出都是模拟信号,必须经过 A/D 转换后才能送给计算机,这样就使得测温装置的结构复杂。另外,这种测温装置的一根数据总线上只能挂一个传感器,不能进行多点测量,即使实现,也要用到复杂的算法,一定程度上也增加了软件的实现难度 【11】 。方案二:在多点测温系统中,传统的测温方法是将模拟信号远距离采集进行 AD 转换,而为了获得较高的测温精度,就必须采用措施解决由长线传输,多点测量切换及放大电路零点漂移等造成的误差补偿问题。采用数字温度芯片 DS18B20测量温度,
24、输出信号全数字化。便于单片机处理及控制,省去传统的测温方法的很多外围电路。且该芯片的物理化学性很稳定,它能用做工业测温元件,此元件线性较好。在 0100 摄氏度时,最大线性偏差小于 1 摄氏度。DS18B20的最大特点之一采用了单总线的数据传输,由数字温度计 DS18B20 和微控制器STC89C52 构成的温度测量装置,它直接输出温度的数字信号,可直接与计算机连接。这样,测温系统的结构就比较简单,体积也不大,且由于 STC89C52可以带多个传感器,因此可以非常容易的实现多点测量,轻松组建传感器网络。采用温度芯片 DS18B20 测量温度,可以体现信通信片化这个趋势。部分功能电路的集成,是总
25、体电路更简洁,搭建电路和焊接电路时更快。而且,集成块的使用,有效地避免外界干扰,提高测量电路的精度。所以集成芯片的使用将成为电路发展的一种趋势。本方案应用这一温度芯片,也是顺应这一趋势【12】 。2.2 主控制部分方案一:此方案采用 PC 机实现。它可在线编程,可在线仿真,这让调试变得方便。且人机交互友好。但是 PC 机输出信号不能直接与 DS18B20 通信。需要通过第 9 页 共 37 页RS232 电平转换兼容,硬件的合成在线调试,较为繁琐,很不简便。而且在一些环境较为恶劣的场合,PC 机的体积大,携带安装不方便,性能不稳定,给工程带来很多麻烦!方案二:此方案采用 STC89C52 八位
26、单片机实现。单片机软件编程的自由度大,可通过编程实现各种各样的算术算法和逻辑控制。而且体积小,硬件实现简单,安装方便。既可以单独对多个传感器实现控制,还可以与 PC 机通信。另外,STC89C52 在工业控制上也有着广泛的应用,编程技术及外围功能电路的配合使用都很成熟。2.3 系统方案综上所述,温度传感器及主控部分都采用第二套方案。该系统采用针对传统温度测温系统测温点少,系统兼容性及扩展性较差的特点,运用分布通讯思想。设计一种可用于大规模多点温度测量的巡回检测系统【13】 。系统方案如下图:DS18B20(1)数码管单片机最小系统DS18B20(2)DS18B20(3)图 2.1 系统方案框图
27、3 硬件电路设计硬件设计主要包括以下几个模块:电源电路,显示电路,温度测试电路。下面对电路分块进行说明。第 10 页 共 37 页3.1 电源电路因为单片机工作电源为+5V,采用 7805 可满足要求。图 3.1 电源电路原理图3.2 显示电路设计采用共阳极七段数码管。显示方式有动态扫描和静态显示,两种方法在本设计中皆可。本人采用节约硬件资源的动态扫描方式。具体电路如下:图 3.2 显示电路原理图3.3 温度测试电路这里采用温度芯片 DS18B20。DS18B20 是 DALLAS 公司生产的一线式数字温度传感器,具有 3 引脚 T0-92 小体积封装形式。测温分辨率可达 0.0625 摄氏度
28、,被测温度用符号的 8 位数字量方式串行输出。其工作电源既可在远端引第 11 页 共 37 页入,也可采用寄生电源方式产生。CPU 只需一根端口线就能与诸多传感器通信,占用微处理器的端口较少,可节省大量的引线和逻辑电路。DS18B20 以单总线协议工作,51 单片机首先分别发送复位脉冲,使信号上所有的 DS18B20 芯片都被复位,程序先跳过 ROM,启动 DS18B20 进行温度变换,再读取存储器的第一位和第二位读取温度,通过 I/O 口传到 LED 数码管显示。DS18B20图 3.3 DS18B20引脚图引脚定义如图:(1) GND 为电源地;(2) DQ 为数字信号输入 /输出端;(3
29、) Vcc 为外接供电电源输入端(在寄生电源接线方式时接地)。DS18B20 的内部结构如下图所示:第 12 页 共 37 页图 3.4 DS18B20内部结构图DS18B20 供电方式是“寄生电源”。电路会在 I/0 或 VDD 引脚处于高电平时“偷” 能量。当有特定的时间和电压需求时,I/0 要提供足够的能量。寄生电源有两个好处:1.进行远距。测温较远时,无需本地电源,2.可以在没有常规电源的条件下读 ROM。要想使 DSl820 能够进行精确的温度转换, I/0 线必须在转换期间保证供电。由于 DSl820 的工作电流达到 lmA,所以仅靠 5k 上拉电阻提供电源是不行的,当儿只 DSl
30、820 挂在同一根 I/0 线上并同时想进行温度转换时,这个问题变得更加尖锐。有两种方法能够使 DSl820 在动态转换周期中获得足够的电流供应。第一种方法,当进行温度转换或拷贝到存储器操作时,给 I/0 线提供一个强上拉。用MOSFET 把 I/0 线直接拉到电源上就可以实现。第 13 页 共 37 页图 3.5 强上拉供电框图在发出任何涉及拷贝到存储器或启动温度转换的协议之后,必须在最 10u s 之内把 I/0 线转换到强上拉。使用寄生电源方式时,VDD 引脚必须接地。另一种给 DSl8B20 供电的方法是从 VDD 引脚接入一个外部电源,见图3.6。这样做的好处是 I/0 线上不需要加
31、强上拉,而且总线控制器不用在温度转换期间总保持高电平。这样在转换期间可以允许在单线总线上进行其他数据往来。另外,在单线总线上可以挂任意多片 DSl8B20,而且如果它们都使用外部电源的话,就可以先发一个 Skip ROM 命令,再接一个 Convert T 命令,让它们同时进行温度转换。注意当加上外部电源时,GND 引脚不能悬空。图 3.6 外部电源供电框图第 14 页 共 37 页温度高于 100 摄氏度时,不推荐使用寄生电源,因为 DS18B20 在这种温度下表现出的漏电流比较大,通讯可能无法进行。在类似这种温度的情况下,强烈推荐使用 DS18B20 的 VDD 引脚。对于总线控制器不知道
32、总线上的 DS18B20 是用寄生电源还是用外部电源的情况,DS18B20 预备了一种信号指示电源的使用意图。总线控制器发出一个Skip ROM 协议,然后发出读电源命令,这条命令发出后,控制器发出读时间隙,如果是寄生电源,DS18B20 在单线总线上发回“0”,如果是从 VDD 供电,则发回“1”,这样总线控制器就能够决定总线上是否有 DSl820 需要强上拉。如果控制器接收到一个“0”,它就知道必须在温度转换期间给 I/0 线提供强上拉。DS18B20 有 4 个主要的数据部件: 64 位激光 ROM。64 位激光 ROM 从高位到低位依次为 8 位 CRC、48 位序列号和 8 位家族代
33、码(28H)组成。 温度灵敏元件。 非易失性温度报警触发器 TH 和 TL。可通过软件写入用户报警上下限值。 配置寄存器。配置寄存器为高速暂存存储器中的第五个字节。DS18B20 在0 工作时按此寄存器中的分辨率将温度转换成相应精度的数值,其各位定义如表 3.1所示。表 3.1 DS18B20 配置寄存器结构TM R1 R0 1 1 1 1 1MSB LSB其中,TM:测试模式标志位,出厂时被写入 0,不能改变;R0、R1:温度计分辨率设置位,其对应四种分辨率如下表所列,出厂时 R0、R1 置为缺省值:R0=1,R1=1(即 12 位分辨率),用户可根据需要改写配置寄存器以获得合适的分辨率。第
34、 15 页 共 37 页表 3.2 配置寄存器与分辨率关系表R0 R1 温度计分辨率/bit 最大转换时间/us0 0 9 93.750 1 10 187.51 0 11 3751 1 12 750(2) 高速暂存存储器高速暂存存储器由 9个字节组成,其分配如表 3.3所示。当温度转换命令发布后,经转换所得的温度值以二字节补码形式存放在高速暂存存储器的第 0和第 1个字节。单片机可通过单线接口读到该数据,读取时低位在前,高位在后,数据格式如表 3.5所示。对应的温度计算:当符号位 S=0时,直接将二进制位转换为十进制;当 S=1时,先将补码变为原码,再计算十进制值。表 3.3 DS18B20
35、存储器映像温度低位 温度高位 TH TL 配置 保留 保留 保留 8 位 CRC表 3.4典型对应的温度值表温度/ 二进制表示 十六进制表示+125 +25.0625+10.125+0.50-0.5-10.125-25.0625-5500000111 1101000000000001 1001000100000000 1010001000000000 0000100000000000 0000000011111111 1111100011111111 0101111011111110 0110111111111100 1001000007D0H0191H00A2H0008H0000HFFF8H
36、FF5EHFE6FHFC90H表 3.5 DS18B20温度值格式 第 16 页 共 37 页23 22 21 20 2-1 2-2 2-3 2-4MSB LSBS S S S S 26 25 24DS28B20 芯片 ROM 指令表:Read ROM(读 ROM)33H (方括号中的为 16 进制的命令字)这个命令允许总线控制器读到 DS18B20 的 64 位 ROM。只有当总线上只存在一个DS18B20 的时候才可以使用此指令,如果挂接不只一个,当通信时将会发生数据冲突。 Match ROM(指定匹配芯片)55H这个指令后面紧跟着由控制器发出了64 位序列号,当总线上有多只 DS18B2
37、0 时,只有与控制发出的序列号相同的芯片才可以做出反应,其它芯片将等待下一次复位。这条指令适应单芯片和多芯片挂接。Search ROM(搜索芯片)F0H在芯片初始化后,搜索指令允许总线上挂接多芯片时用排除法识别所有器件的 64 位 ROM。Alarm Search(报警芯片搜索)ECH在多芯片挂接的情况下,报警芯片搜索指令只对附合温度高于 TH 或小于 TL 报警条件的芯片做出反应。只要芯片不掉电,报警状态将被保持,直到再一次测得温度什达不到报警条件为止。DS28B20 芯片存储器操作指令表:Write Scratchpad (向 RAM 中写数据)4EH这是向 RAM 中写入数据的指令,随后
38、写入的两个字节的数据将会被存到地址 2(报警 RAM 之 TH)和地址3(报警 RAM 之 TL)。Read Scratchpad (从 RAM 中读数据)BEH此指令将从 RAM 中读数据,读地址从地址 0 开始,一直可以读到地址 9,完成整个 RAM 数据的读出。Copy Scratchpad (将 RAM 数据复制到 EEPROM 中)48H此指令将 RAM中的数据存入 EEPROM 中,以使数据掉电不丢失。此后由于芯片忙于第 17 页 共 37 页EEPROM 储存处理,当控制器发一个读时间隙时,总线上输出“0” ,当储存工作完成时,总线将输出“1” 。在寄生工作方式时必须在发出此指令
39、后立刻超用强上拉并至少保持 10MS,来维持芯片工作。Convert T(温度转换) 44H收到此指令后芯片将进行一次温度转换,将转换的温度值放入 RAM 的第 1、2 地址。此后由于芯片忙于温度转换处理,当控制器发一个读时间隙时,总线上输出“0” ,当储存工作完成时,总线将输出 “1” 。在寄生工作方式时必须在发出此指令后立刻超用强上拉并至少保持 500MS,来维持芯片工作。RecallEEPROM(将 EEPROM 中的报警值复制到 RAM)B8H此指令将EEPROM 中的报警值复制到 RAM 中的第 3、4 个字节里由于芯片忙于复制处理,当控制器发一个读时间隙时,总线上输出“0” ,当储
40、存工作完成时,总线将输出“1”另外,此指令将在芯片上电复位时将被自动执行。这样 RAM 中的两个报警字节位将始终为 EEPROM 中数据的镜像。Read Power Supply(工作方式切换) B4H此指令发出后发出读时间隙,芯片会返回它的电源状态字,“0” 为寄生电源状态, “1”为外部电源状态。硬件连接电路如下:图 3.7 硬件连接图本系统为多点温度测试。DS18B20 采用外部供电的方式,理论上可以在一根数据线上挂 256 个 DS18B20,但实际应用中发现,如果挂接 25 个以上的DS18B20 仍旧有可能产生功耗问题。另外单总线长度也不宜超过 80 米,否则第 18 页 共 37
41、 页也会影响到数据的传输。在这种情况下,我们可以采用分组的方式,用单片机的多个 I/O 口来驱动多路传感器 【14】 。对 DS18B20 的设计,需要注意以下问题:(1)对硬件结构简单的单数字是传感器进行操作,需要用较为复杂的程序完成。编程时必须严格按照芯片数据手册提供的有关操作循序进行,读写时间隙程序要严格按照要求编写。(2)在实际应用时,要注意单线的驱动能力,不宜挂过多的 DS18B20,同时还应注意最远线的距离。另外还应根据情况选择其接线拓扑结构。测温电路原理图见附录 B。3.4 整体电路整体电路原理图见附录 B。第 19 页 共 37 页4 软件设计4.1 概述 整个系统的功能是由硬
42、件电路配合软件来实现的,当硬件基本定型后,软件的功能就基本定下来了。从软件的功能不同可分为两大类:一是监控软件(主程序),它是整个控制系统的核心,专门用来协调各执行模块和操作者的关系。二是执行软件(子程序),它是用来完成各种实质性的功能如测量、计算、显示、通信的等。每个执行软件也就是一个功能模块。这里将个执行模块一一列出,并为每一个模块进行功能定义和接口定义。各执行模块规划好以后,就可以规划监控程序了。4.2 主程序方案主程序调用了 3 个子程序,分别是数码管显示程序、温度测试程序、中断控制子程序。1.温度测试程序:对温度芯片送过来的数据进行处理,进行判断和显示。包括DS18B20 初始化子程
43、序、DS18B20 读一字节子程序、DS18B20 写一字节子程序、延时子程序。2.数码管显示程序:向数码管送数显示,控制系统的显示部分。3.中断控制程序:实现循环显示功能。将各个功能程序以子程序的形式写好,当写主程序时,只需要调用子程序,然后在寄存器的分配上做一下调整,消除寄存器冲突和 I/O 冲突即可。调用子程序使得结构清晰,无论是修改还是维护都比较方便。主程序流程图如下:第 20 页 共 37 页两个 DS18B20初始化延时 2 秒显示第一个温度延时 0.2 秒显示第二个温度延时 0.2 秒开始图 4.1 主程序流程图主程序如下:main()TMOD|=0x01;/定时器设置TH0=0
44、xef;TL0=0xf0;/初值IE=0x82;TR0=1;P2=0x00; count=0;while(1)第 21 页 共 37 页str2=0xc6;/显示 C 符号str0=tabtemp/10; /第一个传感器十位温度str1=tabtemp%10; /第一个传感器 个位温度str12=0xc6;/显示 C 符号str10=tabtemp1/10; /第二个传感器十位温度str11=tabtemp1%10; /第二个传感器 个位温度if(flag_get=1) /定时读取当前温度 temp=ReadTemperature();temp1=ReadTemperature1();flag
45、_get=0;4.3 各模块子程序设计下面对几个主要的子程序做介绍:(1) 温度测试子程序温度测试子程序包括:写 1 字节子程序、读 1 字节子程序、DS18B20 复位程序【14】 。温度测试子程序流程图见附录 A。温度测试子程序如下:unsigned char ReadTemperature(void)unsigned char i;unsigned char a=0;unsigned char b=0;第 22 页 共 37 页Init_DS18B20();WriteOneChar(0xCC); / 跳过读序号列号的操作WriteOneChar(0x44); / 启动温度转换delay(
46、200);Init_DS18B20(); /调用复位函数delay(1);WriteOneChar(0x55); /发送 ROM 匹配命令for(i=0;i4;t0=b;return(t0);DS18B20 的读取数据流程图见附录 A。DS18B20 的读取数据程序如下:unsigned char ReadOneChar(void)unsigned char i=0;unsigned char dat = 0;第 23 页 共 37 页for (i=8;i0;i-)DQ = 0; / 给脉冲信号dat=1;DQ = 1; / 给脉冲信号if(DQ)dat|=0x80;delay(5);retu
47、rn(dat);DS18B20 的写数据流程图见附录 A。DS18B20 的写数据如下:void WriteOneChar(unsigned char dat)unsigned char i=0;for (i=8; i0; i-)DQ = 0;DQ = datdelay(5);DQ = 1;dat=1;delay(5);DS18B20 复位程序流程图见附录 A。第 24 页 共 37 页DS18B20 复位程序如下:void Init_DS18B20(void)unsigned char x=0;DQ = 1; /DQ 复位delay(8); /稍做延时DQ = 0; /单片机将 DQ 拉低d
48、elay(80); /精确延时 大于 480usDQ = 1; /拉高总线delay(10);x=DQ; /稍做延时后 如果 x=0 则初始化成功 x=1 则初始化失败delay(5);(2)中断控制子程序中断控制子程序用于数码管扫描和温度检测间隔,实现数码管的动态显示。在本课题中,中断源为定时器 1 溢出中断 【15】 。中断控制子程序如下:void tim(void) interrupt 1 using 1TH0=0xef;/定时器重装值TL0=0xf0;num+;if (num=50)num=0;flag_get=1;/标志位有效second+;if(second=60)第 25 页 共
49、 37 页second=0;minute+; count+;if(count=1)P2=0xfd; dataled=str0;/数码管扫描if(count=2)P2=0xfb;dataled=str1;if(count=3) P2=0xf7;dataled=str2;if(count=4)P2=0xdf; dataled=str10;if(count=5)P2=0xbf;dataled=str11;if(count=6) P2=0x7f;dataled=str12;count=0; (3)读取序列号第 26 页 共 37 页在本课题的设计过程中,由于实验板的数码管数量不足,无法同时显示DS18B20 的 64 位光刻 ROM 序列号。在本课题设计中,本人采用将 64 位序列号分 8 次读出,然后转化成十进制数由数码管显示。5 系