毕业设计(论文)-基于单片机的热水控制器设计.doc_第1页
毕业设计(论文)-基于单片机的热水控制器设计.doc_第2页
毕业设计(论文)-基于单片机的热水控制器设计.doc_第3页
毕业设计(论文)-基于单片机的热水控制器设计.doc_第4页
毕业设计(论文)-基于单片机的热水控制器设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

毕业设计(论文)题目: 基于单片机的热水控制器 学生姓名: 学 号: 专 业: 指导教师: 论文完成时间: 2008 年 06 月 05 日目 录摘要31 绪论32 系统的总体设计33 系统的主要硬件介绍43.1 单片机介绍43.1.1单片机概述43.1.2 单片机编程语言介绍63.1.3 系统选择73.1.4 at89c51引脚功能介绍83.2 温度传感器ds18b20103.2.1 ds18b20简介113.2.2 ds18b20的硬件连接124 热水控制器的系统设计134.1硬件设计134.1.1 温度检测部分134.1.2 led数码管显示电路134.1.3 报警及控制输出部分144.1.4 单片机及按键电路设计154.2 软件系统设计174.2.1 系统程序流程图174.2.2 单片机软件开发语言184.2.3 ds18b20驱动程序194.2.4 系统的程序源代码23参考文献28附:系统整体硬件电路图29摘要本文以单片机at89c51为核心,从ds18b20温度检测的数据采集、设定值调整、led数码管显示电路、报警及输出控制电加热器等几个方面出发,详细研究和设计了基于单片机的热水控制器的各个部分内容,设计了单片机及其外围电路,并结合一套经典的程序算法。给出了一套合理的基于单片机的热水控制器软硬件解决方案。关键字 温度检测 ds18b20 单片机 温度控制1 绪论 单片机在电子产品中的应用已经越来越广泛,并且在很多电子产品中也将其用到温度检测和温度控制。基于单片机的热水控制器较传统的温度控制器具有更高的智能性,并且系统的功能更加易于扩展和升级,是一种低成本的温度检测、控制方案。 在一些温控系统电路中,广泛采用的是通过热电偶、热电阻或pn结测温电路经过相应的信号调理电路,转换成ad转换器能接收的模拟量,再经过采样保持电路进行ad转换,最终送入单片机及其相应的外围电路,完成监控。但是由于传统的信号调理电路实现复杂、易受干扰、不易控制且精度不高。本文介绍单片机结合ds18b20热水控制器设计,本系统用一种新型的可编程温度传感器(ds18b20),不需复杂的信号调理电路和ad转换电路能直接与单片机完成数据采集和处理,实现方便、精度高,可根据不同需要用于各种场合。2 系统的总体设计单片机的热水控制器需要完成温度的检测并可以通过按键设定调整最高温度和最低温度值、能够显示当前温度值、最高温度和最低温度值,同时要实现水温超过最高温度+3度时,停止电热棒加热并报警;当水位低于最低温度-3度时,启动电热棒加热等功能。需要系统包括单片机最小系统电路和按键电路、led显示电路、温度检测部分、报警和控制输出等主要部分,系统地总体设计狂徒如下图所示:led数码管显示ds18b20温度检测部分单片机报警和输出控制部分按键电路图2.1 系统整体设计框图3 系统的主要硬件介绍3.1 单片机介绍3.1.1单片机概述单片微机(single-chip microcomputer)简称单片机,通常统称微控制器(micro-controller 简写c)或微型处理部件(micro controller unit 简写mcu)。一般的说,单片机就是在一块硅片上集成cpu、ram、rom、定时器/计数器、和多种i/o的完整的数字处理系统。二十世纪,微电子、ic集成电路行业发展迅速,其中单片机行业的发展最引人注目。单片机功能强、价格便宜、使用灵活,在计算机应用领域中发挥着极其重要的作用。从intel公司于1971年生产第一颗单片机intel-4004开始,开创了电子应用的“智能化”新时代。单片机以其高性价比和灵活性,牢固树立了其在嵌入式微控制系统中的“霸主”地位,在pc机以286、386、pentium、p高速更新换代的同时,单片机却“始终如一”保持旺盛的生命力。例如,mcs-51系列单片机已有十多年的生命期,如今仍保持着上升的态势就充分证明了这一点。1.单片机的结构与组成目前,单片机的系统结构有两种类型:一种是将程序和数据存储器分开使用, 即哈佛(harvard)结构,当前的单片机大都是这种结构。另一种是采用和pc机的冯.诺依曼(von neumann)类似的原理,对程序和数据存储器不作逻辑上的区分,用来存放用户程序,可分为eprom、otp、rom和flash等类。eprom型内存编程后其内容可用紫外线擦除,用户可反复使用,故特别适用于开发过程,但eprom型单片机价格很高。具有rom型(掩膜型)内存的单片机价格最低,它适用于大批量生产。由于rom型单片机的代码只能由生产厂商在制造芯片时写入,故用户要更改程序代码就十分不便,在产品未成熟时选用rom型单片机风险较高。otp型(一次可编程)单片机介于eprom和rom型单片机之间,它允许用户自己对其编程,但只能写入一次。otp型单片机生产多少完全可由用户自己掌握,不存在rom型有最小起订量和掩膜费问题,另外,该类单片机价格已同掩膜型十分接近,故特别受中小批量客户的欢迎。flash型(闪速型)单片机允许用户使用编程工具或在线快速修改程序代码,且可反复使用,故一推出就受到广大用户的欢迎。flash型单片机,即可用于开发过程,也可用于批量生产,随着制造工艺的改进,flash型单片机价格不断下降,使用越来越普遍,它已是现代单片机的发展趋势。 随机内存(ram):用来存放程序运行时的工作变量和数据,由于ram的制作工艺复杂,价格比rom高得多,所以单片机的内部ram非常宝贵,通常仅有几十到几百个字节。ram的内容是易失性(也有的称易挥发性)的,掉电后会丢失。最近出现了eeprom或flash型的数据存储器,方便用户存放不经常改变的数据及其它重要信息。单片机通常还有特殊寄存器和通用寄存器,它们是单片机中存取速度最快的内存,但通常存储空间很小。2.中央处理器(cpu)是单片机的核心单元,通常由算术逻辑运算部件alu和控制部件构成。cpu就象人的大脑一样,决定了单片机的运算能力和处理速度。 并行输入/输出(i/o)口:通常为独立的双向口,任何口既可以用作输入方式,又可以作输出方式,通过软件编程来设定。现代的单片机的i/o口也有不同的功能,有的内部具有上拉或下拉电阻,有的是漏极开路输出,有的能提供足够的电流可以直接驱动外部设备。i/o是单片机的重要资源,也是衡量单片机功能的重要指针之一。串口输入/输出口:用于单片机和串行设备或其它单片机的通信。串行通信有同步和异步之分,这可以用硬件或通用串行收发器件来实现。不同的单片机可能提供不同标准的串行通信接口,如uart、spi、micro wire等。3.定时器/计数器(t/c)单片机内部用于精确定时或对外部事件(输入信号如脉冲)进行计数,有的单片机内部有多个定时/计数器。4.系统时钟通常需要外接石英晶体或其它振荡源来提供时钟信号输入,也有的使用内部rc振荡器。 以上是单片机的基本构成,现代的单片机又加入了许多新的功能部件,如模拟/数字转换器(a/d)、数字/模拟转换器(d/a)、温度传感器、液晶(lcd)驱动电路、电压监控、看门狗(wdt)电路、低压检测(lvd)电路等等。3.1.2 单片机编程语言介绍对于51系列单片机,现有四种语言支持,即汇编、pl/m,c和basic。basic通常附在pc机上,是初学编程的第一种语言。一个新变量名定义之后可在程序中作变量使用,非常易学,根据解释的行可以找到错误而不是当程序执行完才能显现出来。basic由于逐行解释自然很慢,每一行必须在执行时转换成机器代码,需要花费许多时间不能做到实时性。basic为简化使用变量,所有变量都用浮点值。basic是用于要求编程简单而对编程效率和运行速度要求不高的场合。pl/m是intel从8080微处理器开始为其系列产品开发的编程语言。它很像pascal,是一种结构化语言,但它使用关键词去定义结构。pl/m编译器好像汇编器一样可产生紧凑代码。pl/m总的来说是“高级汇编语言”,可详细控制着代码的生成。但对51系列,pl/m不支持复杂的算术运算、浮点变量而无丰富的库函数支持。学习pl/m无异于学习一种新语言。c语言是一种源于编写unix操作系统的语言,它是一种结构化语言,可产生压缩代码。c语言结构是以括号 而不是子和特殊符号的语言。c可以进行许多机器级函数控制而不用汇编语言。与汇编相比,有如下优点:对单片机的指令系统不要求了解,仅要求对51的内存结构有初步了解寄存器分配、不同内存的寻址及数据类型等细节可由 编译器管理程序有规范的结构,可分为不同的函数。这种方式可使程序结构化将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性编程及程序调试时间显著缩短,从而提高效率提供的库包含许多标准子程序,具有较强的数据处理能将已编好程序可容易的植入新程序,因为它具有方便的模块化编程技术 c语言作为一种非常方便的语言而得到广泛的支持,c语言程序本 身并不依赖于机器硬件系统,基本上不做修改就可根据单片机不同较快地移植过来。51的汇编语言非常像其它汇编语言。指令系统比第一代微处理器要强一些。51的不同存储区域使得其复杂一些。尽管懂得汇编语言不是你的目的,看懂一些可帮助你了解影响任何语言效率的51特殊规定。例如,懂得汇编语言指令就可以使用在片内ram作变量的优势,因为片外变量需要几条指令才能设置累加器和数据指针进行存取。要求使用浮点和启用函数时只有具备汇编编程经验才能避免生成庞大的、效率低的程序,这需要考虑简单的算术运算或先算好的查表法。最好的单片机编程者应是由汇编转用c而不是原来用过标准c语言的人。由此来看,单片机有着微处理器所不具备的功能,它可单独地完成现代工业控制所要求的智能化控制功能,这是单片机最大的特征。3.1.3 系统选择本系统以mcs-51单片机成员中的at89c51为控制核心。at89c51是美国atmel公司生产的低功耗,高性能cmos 8位单片机,片内含4k bytes的可系统编程的flash只读程序内存,器件采用atmel公司的高密度、非易失性存储技术生产,兼容标准8051指令系统及引脚。它集flash程序内存既可在线编程(isp)也可用传统方法进行编程及通用8位微处理器于单片芯片中,atmel公司的功能强大,低价位at89c51单片机可为您提供许多高性价比的应用场合,它灵活应用于各种控制领域。主要性能参数:(1)与mcs-51产品指令系统完全兼容(2)4k字节在系统编程(isp)flash闪速内存(3)1000次擦写周期(4)4.0-5.5v的工作电压范围(5)全静态工作模式:0hz33mhz(6)三级程序加密锁(7)2568字体内部ram(8)32个可编程i/o口线(9)3个16位定时/计数器(10)5个中断源(11)全双工串行uart通道(12)低功耗空闲和掉电模式(13)中断可从空闲模唤醒系统(14)看门狗(wdt)及双数据指针(15)掉电标识和快速编程特性(16)灵活的在系统编程(isp字节或页写模式)其内部结构结构如图3.1所示:图3.1 单片机内部结构图3.1.4 at89c51引脚功能介绍1.电源引脚vcc和gnd vcc:电源电压,gnd(10脚):接地端。2.时钟电路引脚xtall和xtal2 xtal2(18脚):接外部晶体和微调电容的一端。在内它是振荡电路反相放大器的输出端,振荡电路的频率就是晶体的固有频率。要检查单片机的振荡电路是否正确工作,可用示波器查看xtal2端是否有脉冲信号输出。xtal 1(19脚):接外部晶体的微调电容的另一端。在片内它是振荡电路反相放大器的输入端。若需采用外部时钟电路时,该引脚输入外部时钟脉冲如图3.2,3.3所示。3.控制信号引脚rst图3.2 at89s51单片机晶振接法 图3.3 外部时钟电路res(8脚)“rst是复位信号输入端,高电平有效。当此输入端保持两个机器周期(24个时钟振荡周期)的高电平时,可以完成复位操作。4.i/o(输入/输出) p0、 p1、 p2和 p3标准51单片机,如8051、8031、at89c51、at89s51、p89c51等有4个i/o(输入/输出)口,分别为:p0口(3932脚):p0口是一个漏极开路的8位双向埠。作为漏极八路的输出端口,每次能驱动8个ls型ttl负载。当p0口作为输入口使用时,其先向锁存器(地址80h)写入全1,此时p0口的全部引脚悬空,叫作为高阻抗输入。p1口(18脚):p1口是一个带上拉电阻的8位准双向i/o端口每一位能驱动(吸收成输出电流)4个ls型ttl负载。在p1口作为输入口使用时,应先向p1口锁存器(地址90h)写入全1,上拉电阻接成高电平。p2口(2128脚):p2口是一个带内部上接电阻的8位准双向埠。p2口的每一位能驱动4个ls型ttl负载。p3口(2128脚):p3口是一个带内部上接电阻的8位准双向埠。p3口的每一位能驱动(吸收或输出电流)4个ls型ttl负载。p3口与其它的i/o埠有很大区别,它除作为般准双向i/o口外,每个引脚还具有专门的功能,见表3-1。表3-1 端口引脚功能p1口也是一个准双向口,作通用i/o口使用。其电路结构见图3.4。图3.4 p1口作通用i/o口使用输出驱动部分内部有上拉负载电阻与电源相连。实质上拉电阻是两个场效应管(fet)并在一起,个fet为负载管,其电阻固定;另一个fet可工作在导通或截止两种状态,使其总电阻值变化近为0或阻值很大两种情况。当阻值近似为0时,可将引脚快速上拉至全高电平,当阻值很大时,p1口为高阻输入状态。当p1口输出高电平时,能向外提供拉电流负载,所以不必再接上拉电阻。在埠用作输入时,也必须先向对应的锁存器写入“1”,使fet截止。由于片内负载电阻较大,约20k40k,所以不会对输入的数据产生影响。3.2 温度传感器ds18b20集成式数字温度传感器ds1820的出现开辟了温度传感器技术的新领域,它利用单总线的特点可以方便的实现多点温度的测量。而可组网数字温度传感器ds18b20则是ds1820的更新产品,它在电压、特性及封装方面都更具有优势,给了用户更多的选择,让用户可以更方便的构建适合自己的测温系统。ds18b20充分利用了单总线的独特特点,可以轻松的组建传感器网络,提供系统的抗干扰性,使系统设计更灵活、方便、而且适合于在恶劣的环境下进行现场温度测量。3.2.1 ds18b20简介图3.5 ds18b20的管脚排列图ds18b20是美国dallas公司最新推出的一种可组网数字式温度传感器,与ds1820相同,ds18b20也能够直接读取被测物体的温度值,但是与ds1820相比,ds18b20的功能更强大些。它体积小,电压使用范围宽(3v-5v),用户还可以通过编程实现9-12位的温度读数,即具有可调的温度分辨率,因此它的实用性和可靠性比同类产品更高。另外,ds18b20有多种封装可选,如to-92、soic及csp封装。图3.5即为ds18b20的管脚排列图。 由图3.5可见,ds18b20只是一个数据输入/输出口,属于单总线专用芯片之一。ds18b20工作时被测温度值直接以“单总线”的数字方式传输,大大提高了系统的抗干扰能力。其内部采用在板温度测量专用技术,测量范围为-55+125,在-10+85时,精度为。每个ds18b20在出厂时已具有唯一的64位序列号,因此一条总线上可以同时挂接多个ds18b20,而不会出现混乱现象。另外用户还可自设定非易失性温度报警上下限值th和tl(掉电后依然保存)。ds18b20在完成温度变换后,所测温度值将自动与存储在th和tl内的触发值相比较,如果测温结果高与th或低于tl,ds18b20内部的告警标志就会被置位,表示温值超出了测量范围,同时还有报警搜索命令识别出温度超限ds18b20。图3.6为ds18b20的内部存储结构图,它包括一个暂存ram和一个非易失性可擦除。图3.6 ds18b20内部存储结构图其中暂存存储器作用是在单线通信时确保数据的完整性,它包括8个字节,头两个字节表示测得的温度读数,数据格式如下:s=1时表示温度为负,s=0时表示温度为正,其余低于以二进制补码形式表示,最低位为1时表示0.0625。温度/数字对应关系如上表所示。ds18b20内部暂存存储器的第5个字节是结构寄存器,它主要用于确定温度值的数字转换分辨率。字节结构如下:其中、用于设置分辨率。3.2.2 ds18b20的硬件连接ds18b20与单片机的接口极其简单,只需将ds18b20的信号线与单片机的一位双向端口相连即可。如图3.7(a)所示。此时应注意将vdd、dq、gnd三线焊接牢固。另外也可用两个端口,即接收口与发送口分开,这样读写操作就分开了,不会出现信号竞争的问题。如图3.7(b)所示。此图是采用寄生电源方式,将ds18b20的vdd和gnd接在一起。如若vdd脱开未接好,传感器将只送+85.0的温度值。一般测温电缆线采用屏蔽4芯双绞线,其中一对接地线与信号线,另一对接vdd和地线,屏蔽层在源端单点接地。图3.7 ds18b20与单片机的接口4 热水控制器的系统设计4.1硬件设计基于单片机的热水控制器主要有以下几部分:温度检测数据采集部分,led数码管显示电路、报警及控制输出部分、单片机及按键电路设计等几个部分,下面分别加以介绍4.1.1 温度检测部分温度传感器有很多种,如热敏电阻,热电偶,pn结,半导体温度传感器等。这里选用单总线数字输出的集成半导体温度传感器ds18b20,其特点:独特的单线接口方式,ds18b20在与微处理器连接时仅需要一条口线即可实现微处理器与ds18b20的双向通讯;测温范围55125,固有测温分辨率0.5;支持多点组网功能,多个ds1820可以并联在唯一的三线上,实现多点测温;工作电源:35v/dc。温度检测数据采集电路如图4.1所示,由温度传感器ds18b20采集被控对象的实时温度,提供给at89c51的i/o口作为数据输入。在本次设计中我们所控的对象为热水的温度。 图4.1 温度传感器电路4.1.2 led数码管显示电路显示器分为数码管和液晶显示,我所采用是的数码管显示,其外形和引脚如下图所示:图4.2 数码管外形和引脚图 led数码有共阳和共阴两种,把这些led发光二极管的正极接到一块(一般是拼成一个8字加一个小数点)而作为一个引脚,就叫共阳机极数码管;相反的,就叫共阴的(如下图所示)那么应用时这个脚就分别的接vcc和gnd。再把多个这样的8字装在一起就成了多位的数码管了。图4.3 共阴极和共阳极数码管内部电路 基于单片机的热水控制器采用7段数led码管显示,这里采用6个数码管显示温度,两位显示设定的最高温度、两位显示设定的最低温度、两位显示热水的当前温度。 6位共阳极数码管采用扫描形式工作,其8个数据为接在单片机灌电流驱动能力最大的po口,at89c51单片机的p0口的每一个i/o都能能吸收8个ttl逻辑器件的输入漏电流,算下来能驱动约10ma。能驱动数码管的8个数据阴极。6位共阳极数码的6个阳极采用6个pnp三极管9012驱动。用单片机p2.0-p2.5 6个i/o口控制。led数码管显示电路如图4.4所示。图4.4 数码管显示电路4.1.3 报警及控制输出部分当水温超过最高温度+3度时,热水控制器需停止加热并报警;当水位低于最低温度-3度时,需开始加热,这就需要报警电路及输出模块。声音报警电路通过驱动蜂鸣器发声实现,当其接通5v的电压会发出蜂鸣叫声。原理图如图4.5,npn型三极管8050驱动蜂鸣器,当单片机i/o口输出高电平时蜂鸣器发声此外,控制加热棒的控制信号同样由单片机输出,经过三极管q3驱动继电器j1, j1 具有两对常开和常闭接点,利用其常开接点串到加热棒的控制回路中,可以实现加热棒的控制。电路中二极管d1为续流二极管, 继电器线圈在通过电流时,会在其两端产生感应电动势。当电流消失时,其感应电动势会对电路中的三极管q3产生反向电压。当反向电压高于q3 的反向击穿电压时,会把三极管成损坏。续流二极管并联在线圈两端,当流过线圈中的电流消失时,线圈产生的感应电动势通过二极管和线圈构成的回路做功而消耗掉。从而保护了电路中的三极管的安全。图4.5 声音报警电路4.1.4 单片机及按键电路设计图4.6为单片机及键盘电路的电路图,单片机at89s52的时钟引脚外接12m晶振,作为单片机工作的时钟,ea端接高电平,表示使用片内程序存储器。rst引脚接了上电复位电路,当系统上电时,上电复位电路会产生一个高电平脉冲信号,使系统复位。图4.6 单片机及键盘电路电路图键盘是标准的输入设备,实现键盘有两种方案:一是采用现有的一些芯片实现键盘扫描,如8279, ch451, lmc9768等,还有就是用软件实现键盘扫描。使用现成的芯片可以节省cpu的开销,但增加了成本,而用软件实现具有较强的灵活性,也只需要很少的cpu开销,可以节省开发成本。本文便使用软件实现键盘的扫描。 常见的键盘可分为独立按键式键盘和行列扫描式键盘。独立按键式键盘应用在需要少量按键的情况,按键和单片机的i/o口线直接连接。而行列扫描式键盘用在按键需求较多的情形下。考虑到热水控制器只需要高限加、高限减、低限加、低限减四个按键 ,所以采用独立按键式键盘。理论上当按键按下或弹起时,可以相应的产生低电平或高电平,但实际并非如此。键盘按键一般都采用触点式按键开关。当按键被按下或释放时,按键触点的弹性会产生抖动现象。即当按键按下时,触点不会迅速可靠地接通,当按键释放时,触点也不会立即断开,而是要经过一段时间的抖动才能稳定下来,按键材料不同,抖动时间也各不相同。 图4-7 按键抖动示意图一次完整的按键过程,包含以下几个阶段:如图4-7所示。1) 等待阶段:此时按键尚未按下,处于空闲阶段;2) 闭合抖动阶段:此时键刚刚按下,但信号处于抖动状态,系统在检测时应消抖延时,约5ms到20ms;3) 有效闭合阶段:此时抖动己经结束,一个有效按键动作己经产生,系统应该在此时执行按键功能,或将按键编码记录下来,待键弹起时再执行其功能;4) 释放抖动阶段:许多时候编程人员并不在此时消抖延时,但最好也执行一次消抖延时,以防止误操作;5) 有效释放阶段:若设计要求在按键抬起时才执行功能,则应当在此时进行按键功能的处理。软件上对闭合阶段的抖动一般采取延时再次确认按键是否按下的方式消除抖动。如上图所示,完成系统的最高温度和最低温度的高低调整的四个按键分别加上拉电阻接到单片机的p1.1-p1.4口上,供单片机查询,当没有按键按下时,单片机i/o口输入高电平,当有按键按下时,对应的单片机端口变为低电平,单片机通过检测这种电平的变化确定按键的状态。4.2 软件系统设计4.2.1 系统程序流程图系统程序流程图如图4.8所示。开 始初始化n是否高低限调整 y高低限增减启动ds18b20读取温度值n高于高限3度或低于低限3度y控制加热,报警显示高低限和当前值图4.8 系统程序流程图4.2.2 单片机软件开发语言对于8051单片机,现有四种语言支持,即汇编、fi/m、c和basic。c是一种源于编写unix操作系统的语言,它是一种结构化语言,可产生紧凑代码。c可以进行许多机器级函数控制而不用汇编语言。与汇编相比,有如下优点:(1)对单片机的指令系统不要求了解,仅要求对8051的存贮器结构有初步了解;(2)寄存器分配、不同存贮器的寻址及数据类型等细节可由编译器管理;(3)程序有规范的结构,可分为不同的函数,这种方式可使程序结构化;(4)具有将可变的选择与特殊操作组合在一起的能力,改善了程序的可读性;(5)关键字及运算函数可用近似人的思维过程方式使用;(6)编程及程序调试时间显著缩短,从而提高效率;(7)提供的库包含许多标准子程序,具有较强的数据处理能力;(8)已编好程序可容易地植入新程序,因为它具有方便的模块化编程技术。4.2.3 ds18b20驱动程序根据ds18b20的通讯协议,主机(单片机)控制ds18b20完成温度转换必须经过三个步骤:每一次读写之前都要对ds18b20进行复位操作,复位成功后发送一条rom指令,最后发送ram指令,这样才能对ds18b20进行预定的操作。复位要求主cpu将数据线下拉500微秒,然后释放,当ds18b20收到信号后等待1660微秒左右,后发出60240微秒的存在低脉冲,主cpu收到此信号表示复位成功。 ds18b20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625/lsb形式表达,其中s为符号位。表4.1 ds18b20温度值格式表这是12位转化后得到的12位数据,存储在18b20的两个8比特的ram中,二进制中的前面5位是符号位,如果测得的温度大于0,这5位为0,只要将测到的数值乘于0.0625即可得到实际温度;如果温度小于0,这5位为1,测到的数值需要取反加1再乘于0.0625即可得到实际温度。dsl820工作过程包括;初始化、rom操作命令、存储器操作、命令处理数据。1、初始化 单总线上的所有处理均从初始化开始 2、rom操作指令: 总线主机检测到dsl820的存在,便可以发出rom操作命令之一,这些命令如: 指令 代码 read rom(读rom) 33h match rom(匹配rom) 55h skip rom(跳过rom) cch search rom(搜索rom) f0h alarm search(告警搜索) ech 3、存储器操作命令: 指令 代码 write scratchpad(写暂存存储器) 4eh read scratchpad(读暂存存储器) beh copy scratchpad(复制暂存存储器) 48h convert temperature(温度变换) 44h recall eprom(重新调出) b8h read power supply(读电源) b4h 4、时 序 主机使用时间隙(time slots)来读写dsl820的数据位和写命令字的位 (1)初始化 时序见图4.9主机总线to时刻发送一复位脉冲(最短为480us的低电平信号)接着在tl时刻释放总线并进入接收状态dsl820在检测到总线的上升沿之后等待15-60us,接着ds1820在t2时刻发出存在脉冲(低电平)如图中虚线所示:图4.9 初始化时序 (2)写时间隙 当主机总线t0时刻从高拉至低电平时就产生写时间隙,从to时刻开始15us之内应将所需写的位送到总线上,dsl820在t0后15-60us间对总线采样若低电平写入的位是0,若高电平写入的位是1,见图4.10,连续写2位间的间隙应大于1us。图4.10 写时序 (3)读时间隙 见图4.11,主机总线t0时刻从高拉至低电平时总线只须保持低电平l5us之后在t1时刻将总线拉高产生读时间隙读时间隙。在t1时刻后t2时刻前有效,t2距to为15us,也就是说t2时刻前主机必须完成读位, 并在t0后的60us一120us内释放总线.图4.11 读时序 根据数字温度传感器的工作时序及原理进行软件的设计,ds18b20的c51程序代码如下:sbit dq =p10; /ds18b20端口 typedef unsigned char byte;typedef unsigned intword;void delay(word useconds) /延时子函数 for(;useconds0;useconds-); byte ow_reset(void) /复位ds18b20 byte presence; dq = 0; /送出低电平 delay(29); / 延时 480us dq = 1; / 送出高电平 delay(3); / 等到ds18b20存在脉冲presence = dq; / 读存在脉冲(低电平有效)delay(25); /延时return(presence); byte read_byte(void) /从 1-wire 总线上读取一个字节 byte i; byte value = 0; for (i=8;i0;i-) value=1; dq = 0; / 输出一脉冲 dq = 1; delay(1); if(dq)value|=0x80; delay(6); return(value); void write_byte(char val) /向 1-wire 总线上写一个字节byte i;for (i=8; i0; i-) / 写一个字节,每次写一位dq = 0; dq = val&0x01;delay(5);dq = 1; val=val/2; /用除法实现移位 delay(5); char read_temperature(void) /读取温度 byte temp2; float x; ow_reset(); /复位ds18b20 write_byte(0xcc); /跳过 rom write_byte(0xbe); /写入读存储器指令temp1=read_byte(); /读入数据 temp0=read_byte(); x= temp1*0x112 + temp0; x= x*0.0625; /将数值转换为摄氏温度return x; 4.2.4 系统的程序源代码系统的c51 源程序如下:#include#includesbit dq =p10; /ds18b20端口 sbit hup=p11; /最高温度增键sbit hdown=p12; /最高温度减键sbit lup=p13; /最低温度增建sbit ldown=p14; /最低温度减键sbit baojing=p15; /报警输出sbit out=p16; /控制加热棒sbit led1=p25; /第一位数码管位控制端sbit led2=p24; /第二位数码管位控制端sbit led3=p23; /第三位数码管位控制端sbit led4=p22; /第四位数码管位控制端sbit led5=p21; /第五位数码管位控制端sbit led6=p20; /第六位数码管位控制端unsigned char code tab_led10=0x0c0,0x0f9,0x0a4,0x0b0,0x99,0x92,0x82,0xf8,0x80,0x90; /显示的段码,分别代表0-9typedef unsigned char byte;typedef unsigned int word;/*18b20驱动程序*void delay(word useconds) /延时子函数 for(;useconds0;useconds-); byte ow_reset(void) /复位ds18b20 byte presence; dq = 0; /送出低电平 delay(29); / 延时 480us dq = 1; / 送出高电平 delay(3); / 等到ds18b20存在脉冲 presence = dq; / 读存在脉冲(低电平有效) delay(25); /延时 return(presence); byte read_byte(void) /从 1-wire 总线上读取一个字节 byte i; byte value = 0; for (i=8;i0;i-) value=1; dq = 0; / 输出一脉冲 dq = 1; delay(1); if(dq) value|=0x80; delay(6); return(value); void write_byte(char val) /向 1-wire 总线上写一个字节 byte i; for (i=8; i0; i-) / 写一个字节,每次写一位 dq = 0; dq = val&0x01; delay(5); dq = 1; val=val/2; /用除法实现移位 delay(5); /* read_temperature完成一次采样过程,返回温度值* char read_temperature(void) /读取温度 byte temp2; float x; ow_reset(); /复位ds18b20 write_byte(0xcc); /跳过 rom write_byte(0xbe); /写入读存储器指令 temp1=read_byte(); /读入数据 temp0=read_byte(); x= temp1*0x112 + temp0; x= x*0.0625; /将数值转换为摄氏温度 return x; /*主函数*main() byte n=20,h=50,l=30; /定义温度值、高低限,并置初值byte i; baojing=0; /初始化 out=0; led1=1; led2=1; led3=1; led4=1; led5=1; led6=1;while(1) if(hup=0) /如果温度高限增加键按下 delay(10000); /按键消抖 if(hup=0) h+; else if(hdow

温馨提示

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

评论

0/150

提交评论