基于单片机与VC串口通信的温度采集系统设计.doc_第1页
基于单片机与VC串口通信的温度采集系统设计.doc_第2页
基于单片机与VC串口通信的温度采集系统设计.doc_第3页
基于单片机与VC串口通信的温度采集系统设计.doc_第4页
基于单片机与VC串口通信的温度采集系统设计.doc_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

第1章 绪 论1.1 背景和意义传统靠人工控制的温度、湿度、液位等信号的测压力控系统,外围电路比较复杂,测量精度较低,分辨力不高,需进行温度校准(非线性校准、温度补偿、传感器标定等);且它们的体积较大、使用不够方便,更重要的是参数的设定需要有其它仪表的参与,外界设备多,成本高,因而越来越适应不了社会的要求。在对多类型、多通道信号同时进行检测和控制中,传统的测控系统能力有限。如何将计算机与各种设施、设备结合,简化人工操作并实现自动控制,满足社会的需求,成为一个很迫切的问题. 温度检测是现代检测技术的重要组成部分,在保证产品质量、节约能源和安全生产等方面起着关键的作用。随着科学技术的发展,由单片集成电路构成的温度传感器的种类越来越多,测量的精度越来越高,响应时间越来越短,因其使用方便、无需变换电路等特点已经得到了广泛的应用,例如:以前常用的ad590和lm35等,以及现在得到广泛应用的dsl820、ds1821和ds1620等。本次毕业设计正是为了完成温度采集而设计的,而且采用了前不久美国dallas公司生产的可组网数字式温度传感器ds1820,可以说与人们的日常生活是息息相关的,具有很大的现实意义。1.2 目的和内容新型数字化、网络化传感器在工程中的应用具有极其重要的意义。 这类传感器是各种参量送入计算机系统,进行智能监测、控制的最前端。随着科技的发展,数字化、网络化传感器应用日益广泛,以其传统方式不可比拟的优势渐渐成为技术的趋势和主流。本次设计的目的就是以数字传感器ds1820作为前端,采集温度经过单片机处理后,再采用串口通信,把温度显示在vc编辑的计算机界面上,实现与计算机的通信。本系统的设计包括硬件和软件两大部分。系统的硬件部分大致可分为四部分:ds1820温度采集部分、单片机处理部分、显示电路部分、与计算机串口通信部分。设计框图如图1.1所示:图1.1 总设计框图系统的软件部分分为五大部分:读取ds1820的内部数据部分、单片机对温度的处理部分、数码显示部分、串口通信部分、vc+界面部分。1.3 发展前景近年来,利用智能化数字式温度传感器以实现温度信息的在线检测已成为温度检测技术的一种发展趋势。数字化技术推动了信息化的革命,在传感器的器件结构上采用数字化技术,使信息的采集更加方便。例如,对于温度信号采集系统,传统的模拟温度传感器多为铂电阻、铜电阻等。每一个传输线至少有两根导线,带补偿接法需要三根导线。如果对50路温度信号进行检测,就需要100根导线接到采集端口,然后还要经过电桥电路、信号放大、通道选择、a心转换等,才能将温度信号供计算机处理。而ds1820新型单总线数字温度传感器,采用3脚(或8脚)封装,从ds1820读出或写入数据仅需要一根io口线。并且以串行通信的方式与微控制器进行数据通信。该器件将半导体温敏器件、a心转换器、存储器等做在一个很小的集成电路芯片上,传感器直接输出的就是温度信号数字值。信号传输采用两芯(或三芯)电缆构成的单总线结构。一条单总线电缆上可以挂接若干个数字温度传感器,每个传感器有一个唯一的地址编码。微控制器通过对器件的寻址,就可以读取某一个传感器的温度值,从而简化了信号采集系统的电路。第2章 主要器件介绍2.1 温度传感器ds1820ds1820是美国dallas半导体公司生产的可组网数字式温度传感器,在其内部使用了在板(on-b0ard)专利技术。全部传感元件及转换电路集成在形如一只三极管的集成电路内。ds1820具有以下特性: 1、独特的单线接口方式,ds1820在与微处理器连接时仅需要一条口线即可实现微处理器与ds1820的双向通讯。 2、ds1820支持多点组网功能,多个ds1820可以并联在唯一的三线上,实现多点测温。 3、ds1820在使用中不需要任何外围元件。 4、温范围55125,固有测温分辨率0.5。 5、测量结果以9位数字量方式串行传送。ds1820采用3脚pr-35封装或8脚soic封装,引脚排列如图2.1所示。i/o为数据输入/输出端(即单线总线),常态下呈高电平。udd是可供选用的外部+5v电源端不用时需接地。gnd为地,nc为空脚。图2.1 ds1820的封装图2.1.1 ds1820的工作原理1、 ds1820的内部结构ds1820的内部结构如图2.2所示:图2.2 ds1820的内部结构该芯片内部有经过激光修正的rom,内含64位rom编码,包括产品系列号(高8位),产品序列号(中间48位)和crc编码(低8位)编码格式如下表2.1:表2.1 ds1820的rom结构图8位产品系列号48位产品序号8位crc编码2、 ds1820测温原理ds1820测温原理如图2.3所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在55所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1 ,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图2.3中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。图2.3 测温原理框图在正常测温情况下,ds1820的测温分辩率为0.5以9位数据格式表示,其中最低有效位(lsb)由比较器进行0.25比较,当计数器1中的余值转化成温度后低于0.25时,清除温度寄存器的最低位(lsb),当计数器1中的余值转化成温度后高于0.25,置位温度寄存器的最低位(lsb)。高字节温度值只代表符号位,低字节具体对应的温度格式如下表2.2所示: 表2.2 低字节温度格式262524232221202-1下面举例说明这种温度输出形式,如表2.3所示。表2.3 温度输出形式温 度(temp_read)msb,lsb二进制温度输出十六进制温度输出+125.000000000,1111101000fa+25.000000000,001100100032+0.500000000,0000000100010.000000000,000000000000-0.511111111,11111111ffff续表温 度(temp_read)msb,lsb二进制温度输出十六进制温度输出-25.011111111,11001110ffce-55.011111111,10010010ff922.1.2 ds1820操作协议dsl820作为一种单线器件,要求严格的协议来确保数据的正确读写这个协议是:初始化、rom操作命令、存储器操作命令、处理数据。下面介绍ds1820工作的时序要求:1、 初始化在单总线上的所有处理均是从初始化开始,主机总线发送一个复位脉冲(最短为480us的低电平信号),ds1820在检测到总线的上升沿之后等待1560us,接着发出存在脉冲(60us240us)。 任何命令的发送必须先由主机发出复位信号,收到dsl820发出的先导脉冲后,再发送命令和数据。复位和先导脉冲的时序如图2.4所示。首先由主机把数据线下拉成低电平持续480us960us,然后释放数据线完成复位操作,dsl820收到后,等待16us60us发出宽度为60us240us的低电乎,即先导脉冲,主机收到先导脉冲后说明握手成功,可以进行下一步的通讯。任何一次读写操作都必须先进行复位,发送一条rom指令,然后发送ram指令,完成预定的操作。 图2.4 ds1820复位2、 读写时序读写时序:如图2.5所示,主机写入0时,将数据线拉成低电平并保持60us再释放数据线,写入1时要先使数据线变低,然后在15us内释放。主机读取每位数据时,都先将数据线拉低至少1us的时间,然后释放等待输出的数据,ds1820的输出数据从下降沿起保持15us供主机采样。图2.5 ds1820的读写时序2.1.3 ds1820的指令系统 1、 rom操作指令 总线主机检测到ds1820的存在,便可发出rom操作指令之一,这些指令如下:(1) 读rom(read rom) 机器码33h 适用于单片,读出64位地址,当有多于一片的dsl820在线时,读出的将是各片地址相与的结果。 (2) 匹配rom(match rom) 机器码55h 适用多片dsl820、紧跟该命令之后要输入64位地址,与该地址对应的ds1820响应以后的读写命令。(3) 跳过rom(skip rom) 机器码cch 用于单片,它忽略64位地址。(4) 搜索rom(search rom) 机器码f0h 该命令可以确认dsl820的个数和对应的64位地址。(5) 报警搜索rom(alarm rom)机器码ech 执行后,只有温度超过设定的高限或低于设定的低限,片子才响应此命令,接卞来的搜寻过程同执行search rom命令后相同。2、ram操作命令总线主机只有在发出rom操作命令之后,才可以对存储器进行操作,相应命令如下:(1) 写暂存存储器(write scratchpad) 机器码4eh 向笔记本的第3和第4字节写上下限数据,紧跟该命令后是传送两字节的数据。(2) 读暂存存储器(read scratchpad) 机器码beh 读内部笔记本中9字节的内容。(3) 内部复制暂存存储器(copy scratchpad) 机器码48h将笔记本的第3和第4字节存入eep_rom。(4) 温度变换(convert temperature) 机器码44h 执行后开始进行温度转换,转换时间最长为500ms,使用寄生电源时,数据线至少保持500ms的高电平。转换后的结果保存在内部9字节的笔记本中。(5) 重新调出eepram(recall eepram) 机器码b8h 将eeprom中内容恢复到笔记本中第3和第4字节,每次上电自动执行一次此命令。(6) 读电源(read supply) 机器码b4h 读ds1820的供电模式,如果采用寄生模式,d51820发送0,如果采用外接电源, ds1820发送1。2.1.4 ds1820精度提高原理1、 ds1820内部暂存寄存器ds1820内部暂存寄存器的分布如表2.4所示,其中第7字节存放的是当温度寄存器停止增值时计数器1的计数剩余值,第8字节存放的是每度所对应的计数值,这样,我们就可以通过下面的方法获得高分辨率的温度测量结果。首先用ds1820提供的读暂存寄存器指令(beh)读出以0.5为分辨率的温度测量结果,然后切去测量结果中的最低有效位(lsb),得到所测实际温度整数部分t整数,然后再用beh指令读取计数器1的计数剩余值m剩余和每度计数值m每度,考虑到ds1820测量温度的整数部分以0.25、0.75为进位界限的关系,实际温度t实际可用下式计算得到: t实际=(t整数0.25)+(m每度m剩余)/m每度 = t整数+0.75 (m剩余/m每度)2、 测量数据比较 表2.5为采用直接读取测温结果方法和采用计算方法得到的测温数据比较,通过比较可以看出,计算方法在ds1820测温中不仅是可行的,也可以大大的提高ds1820的测温分辨率.表2.4 ds1820暂存寄存器分布 表2.5 ds1820直接测温结果与计算测温结果数据比较 寄存器内容字节地址温度低数字位0温度高数字位1高温限值2低温限值3保留位4保留位5计数剩余值6每度计数值7crc校验8次数t(直接)m剩余m每度t(实际)121.000728020.850234.000428234.238349.000308349.388452.000668451.964564.000498564.174679.000568779.106782.500168882.5682.1.5 硬件接法ds1820硬件接法有两种:如图2.6外接电源供电和图2.7寄生电源供电: 图2.6 外接电源供电 图2.7 寄生电源供电 外接电源是多片ds1820同时进行温度转换的最保险的用法,此时gnd不能浮接。采用寄生模式时vdd必须接地,在温度转换期间ds1820通过高电平的数据线供电,传递数据时它由内部从电电路的电容供电。这种用法的最大好处是节省了一根引线。由于每个ds1820在转换期间约耗电1ma,所以当多个ds1820同时转换时,电源可能供电不足,这时应再启动转换后10us以内,到通mosfet,把数据线直接联到电源上。当温度在100度以上时,不能使用寄生电源模式,因为高温时大的漏电流有可能会拉下通讯时的高电平,cpu无法得到正确的数值。2.2 单片机介绍单芯片微电脑简称单片机。它是由中央处理器(cpu)、内存单元及输入输出单元所组成。依靠地址总线、数据总线与控制总线,cpu可与内存单元及i/o单元相连,构成完整的微电脑系统。单芯片微电脑为将cpu、内存及i/o等组合制作于同一芯片内的微控制器,所以仅需要少量的外围电路即可独立工作。单片机具有电路简单及不占空间的优点,主要用于工业控制及民用消费性产品,如汽车遥控器、防盗器、冷气机及工厂自动化。2.2.1 mcs-51系列简介mcs-51系列根据电路结构可分为四种版本,详见表2.6。 表2.6 mcs-51系列单片机版 本组件名称ram(byte)romi/o脚(pin)计时/计数器中断romless803112803225rom80511284k rom3225eprom87511284k eprom3225eeprom89511284k eeprom3225通常在程序开发阶段,常需要修改程序,故一般选用单芯片内含程序内存eprom和eeprom的版本。而eeprom为电可清除的新型产品,其寿命可达1000次,而且清除原有程序和烧录程序都十分方便,已经得到了广泛应用;若程序发展到程序阶段,则可采用rom版本,直接将程序烧录进去,可降低成本。2.2.2 mcs-51内部结构mcs-51芯片的外部引脚和指令系统完全兼容,其内部结构除rom/eprom/ eeprom不同外,其余完全相同。它是由8位cpu、4kbytesrom、128bytesram、8位i/o口和很多工作寄存器及特殊功能寄存器(sfr)组成的。1、cpu是单片机的核心,是计算机的控制和指挥中心,由运算器和控制器组成。运算器包括一个可进行8位算术运算和逻辑运算的单元alu,8位的暂存器1,暂存器2,8位的累加器acc,寄存器b和程序状态寄存器psw等。控制器包括程序计数器pc,指令寄存器ir,指令译码器id,震荡器及定时电路等。2、8951片内有rom(程序存储器,只能读)和ram(数据存储器,可读可写)两类,它们有个自独立的存储地址空间,与一般微机的存储器配置方式很不相同。3、8051/8751/8951片内程序存储器rom容量为4kb,地址从0000h开始,用于存放程序和表格常数。mcs-51片内数据存储器ram均为128bytes,地址为00h-7fh,用于存放运算的中间结果,数据暂存以及数据缓冲等。在这128bytes的ram中,有32个字节单元可指定为工作寄存器,这同一般处理器不同。mcs-51的片内ram和工作寄存器排在一个队里统一编址。另外,8951还有sp,dptr,pcon等特殊寄存器,它们也同128字节的ram和在一个队列里编址,地址为80h-ffh。在这128字节ram单元中有21个特殊寄存器(sfr),这些特殊功能寄存器还包括p0-p3口锁存器。4、mcs-51有四个8位并行接口,即p0-p3。它们都是双向端口,每一个端口各有8条i/o线,均可输入/输出。p0-p3口四个锁存器同ram统一编址,可以把i/o口当作一般特殊功能寄存器来寻址。2.2.3 mcs-51单片机引脚功能图2.8为mcs-51系列单片机的40支dip包装的引脚图。其中图2.8 mcs-51系列单片机引脚图许多引脚是多用途的,信号名称后面括号中的数字为引脚号码,现说明如下:1、 vss(20):接地信号线2、 vcc(40):+5v电源输入引脚3、xtal1(19):反相振荡放大器输入4、xtal1(18):反相振荡放大器输出5、reset(9):复位输入端6、(31):外部存取至能输入信号线。7、p0.0p0.7(3239):端口0,8位输入输出端口。此端口为开汲极结构,当输出端口使用时应外加提升电阻。8、 p1.0p1.7(18脚):端口1,8位输入输出端口。此端口具有内部提升电阻的双向i/o,每支脚可独立做输入输出。 9、 p2.0p2.7(2128脚):端口2,8位输入输出端口。此端口具有内部提升电阻的双向i/o,与p1同。10、p3.0p3.7(1017脚):端口,8位输入输出端口。此端口也具有内部提升电阻的双向i/o。具有双重功能,除当一般i/o外,每支脚的特殊功能如下:p3.0(rxd):串行口输入p3.1(txd):串行口输出p3.2(int0):外部中断0输入p3.3(int1):外部中断1输入p3.4(t0):定时器0的外部输入p3.5(t1):定时器1的外部输入p3.6():片外数据存储器写选通p3.7():片外数据存储器读选通2.2.4 mcs-51的复位动作reset引脚是复位信号的输入端。复位信号是高电平有效,其有效时间持续24个振荡周期(即二个机器周期)以上。当复位发生时,除i/o、堆栈指针及sbuf外,内部电路会将特殊功能缓冲器全部写入0,如表2.7所示。表2.7 一些寄存器的复位状态寄存器复位状态寄存器复位状态pc0000htcon00hacc00htl000hpsw00hth000hsp07htl100hdptr0000hthi00hp0p3ffhscon00hipxx000000bsbuf不定续表寄存器复位状态寄存器复位状态ie0x000000bpcon0xxxxxxx btmod00h复位操作有上电自动复位和按键手动复位两种方式。上电自动复位是通过外部复位电路的电容充电来实现的,其电路图如图2.9(a)所示。这样,只要电源vcc的上电时间不超过1ms,就可以实现自动上电复位,即通过电源就完成了系统的复位初始化。按键手动复位有电平方式和脉冲方式两种。其中,按键电平复位是通过复位端经电阻与vcc电源接通而实现的,其电路图如图2.9(b)所示;而按键脉冲复位则是利用rc微分电路产生的正脉冲来实现的,其电路图如图2.9(c)所示。上述电路图中的电阻,电容参数使用于6mhz晶振,能保证复位信号高电平持续时间大于2个机器周期。 (a) (b) (c)图2.9 复位电路 2.3 本章小结本章介绍了温度传感器ds1820和单片机的一些知识。对本设计与相关的ds1820的知识做了详细介绍。虽然外观很不起眼的ds1820,却有着较复杂的内部结构。作为一个单总线的数字传感器,它有着自己的存储空间和操作指令系统。要想很好的运用ds1820,必须对它的结构和指令系统又有所认识。本章还介绍了单片机的结构、管脚功能及复位动作等。本设计具体用到的单片机的某些功能,在后面硬件设计介绍中也有的介绍,所以在本章就没有具体介绍。通过本章的介绍,就可以理解这个设计的设计方案,也能够对后面的章节有更好的认识。第3章 系统的硬件设计3.1 设计方案的选定本设计要求:1、该温度测控系统测温精度达0.5度;2、单片机实现硬件,与pc串口通信3、温度传感器选用ds1820于是,根据设计要求,温度采集部分我选用了温度传感器ds1820。硬件核心处理部分选用了单片机来实现。单片机我选用了常用的at89c51型号的单片机。用单片机来完成温度数据的采集、存储、数据转换、显示和发送。串口通信部分,我选用了rs232的九孔的串口线和九针的串口座来完成串口数据的传输。考虑到单片机的串口输出电压和rs232的工作电压不匹配的问题,我选用了常用的串口电平转换芯片max232cpe。显示部分的数码管我选用了一块四位一体的共阳的数码管。为了降低硬件成本,我的数码管驱动采用了四个pnp三极管放大电流来实现。3.2 设计的主要思想本设计主要用可组网数字式温度传感器ds1820来采集外界温度,其内部on-board专利技术测量温度,把全部传感器以及各种数字转换电路集成在一起做成形如一只三极管的集成电路,故系统不另需a/d转换电路。它有独特的单线接口方式,在与微处理器连接时仅需要一条口线即可实现微处理器与ds1820的双向通讯。而且在使用中不需要任何外围元件。其测温范围55125,固有测温分辨率0.5,测量结果以9位数字量方式串行传送。中心处理部分用51系列单片机来实现。本设计是基于89c51型号的单片机,来实现硬件部分的温度转换、存储和显示等。由于温度传感器ds1820是单线串行结构,故需要单片机用串行方式对其写入指令使其执行命令,再通过这唯一的数据线向单片机写入数据。而且该传感器所输出的温度是9位数字量方式,故还需要把其温度的数据格式转化成该设计显示部分所需的数据格式,因而单片机还要将其输出的温度进行处理后才将其显示出来。而且该温度传感器内部还有两个存储器里分别存放着温度报警上、下限,用户使用写入存储器命令,设置温度报警值。故单片机还需要对ds1820写入该命令和报警上下限的具体值。总之,除了硬件平台的搭建外,还要编写大量汇编语言的程序来支撑该硬件平台。在单片机与pc机连接时,用串口rs232和电平转换器件max232来实现他们之间的串口通信。通过这个串口把单片机所接收到的温度数据传送给pc机。然后,用vc编辑一个温度显示的界面,在pc机上显示所测得温度值,此为软件部分设计。对于这部分实现的同时,我用数码管作为硬件温度显示。设计的要求测温精度达0.5度。但我实际设计中准备采用提高精度的方法实现测温精度达0.1度。系统的硬件部分大致可分为四部分: ds1820与单片机接口电路部分、复位电路及振荡电路部分、显示电路部分、串口通信部分。总的电路图见附录。下面分别介绍四部分电路的设计思想。3.3 ds1820与单片机接口电路ds1820与单片机的接口电路有两种方式,一种是采用外接电源方式,一种是采用寄生电源方式。本设计中采用外接电源方式,如图3.1所示。图3.1 ds1820与单片机接口电路r为上拉电阻,典型值可取5.1k或4.7k 。本设计中采用的5.1k的上拉电阻。ds1820的i/o线接单片机p1.1口,通过对p1.1的控制来完成对ds1820的读写操作。3.4 复位电路及振荡电路这部分为单片机工作需要的外围电路部分。特别是其振荡部分电路关系到单片机内部的机械周期。3.4.1 复位电路mcs-51的复位输入reset脚为高电位动作,其高电位时间至少需要2个机械周期,故复位电路的rc值不可随意选取。如图3.2所示,为我所采用的开机复位电路。电源on时,电容视为短路,故reset脚为+5v的高电位。然后经历rc=10u8.2k的充电时间后, reset脚降为低电位,此时cpu由地址0开始执行程序。电容器上的开关可达到手动复位的功能,摁下开关,可强迫系统复位。图3.2 复位电路3.4.2 振荡电路89c51芯片内部有一个高增益反向放大器,用于构成振荡器。反向放大器的输入端为xtal1,输出端为xtal2,分别是89c51的19脚和18脚。在xtal1和xtal2两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器,电容c1和c2通常取30pf左右,对振荡器频率有微调作用。振荡频率范围是1.2mhz-12mhz。晶体振荡器的振荡信号从xtal2端输入到片内的时钟发生器上,时钟发生器是一个2分频的触发器电路,它将振荡器的信号频率fosc除以2,向cpu提供了两相时钟信号p1和p2。时钟信号的周期称为机器状态时间s(state),它是振荡周期的2倍。在每个时钟周期(即机器状态时间s)的前半个周期,相位1信号有效,在每个时钟周期的后半个周期,相位2有效。本设计使用的晶振为12m,并使用内部振荡,故仅需 再18,19脚之间接一个石英振荡器,并各接一个电容接地。如图3.3所示。图3.3 振荡电路51单片机的机械周期由s1至s6共6个状态所组成,每个状态又可细分为相1(p1)和相2(p2),故一个机械周期等于12个振荡周期,所以图3.3所示的振荡电路的振荡周期和机械周期为:振荡周期=1/(12mhz)=1/12us 机械周期=6态2相振荡周期=121/12us=1us了解指令执行所花费的机械周期后,即可计算延时时间。3.5 显示电路单片机中通常使用7段led构成字型“8”,另外,还有一个小数点发光二极管以显示数字,符号及小数点。这种显示器有共阳极和共阴极两种,发光二极管的阳极连在一起的称为共阳极显示器,阴极连在一起的称为共阴极显示器。一位显示起由8个发光二极管组成,其中,7个发光二极管构成字型“8”的各个段a-g,另一个小数点为dp发光二极管。当在某段发光二极管上施加一定的正向电压时,该段即亮;不加电压则暗。为了保护各段led不被损坏,需要加限流电阻。3.5.1 数码管的选择及其硬件连接在显示部分,我采用四位数字显示我所要显示的温度。因为ds1820的测温范围是-55+125度,且本设计我把它的测温精度提高到了0.1度,考虑到有百位数的显示,也有小数位的显示,所以我用到了一个四位一体的数码管来显示最后的温度。由于提供的元件限制,我选用了一片共阳的四位一体的数码管,它有12个管脚,4位段选端,具体管脚分配如图3.4所示。图3.4 四位共阳极数码管 本设计我的电流放大部分采用三极管来实现。由于选用的数码管是共阳的型号,故只用把段选端通过pnp三极管与单片机相连。三极管的c极接到5伏电源、e极与数码管片选端相连、b极接上一个1k的限流电阻到单片机的p1口。我用p1口的p1.4p1.7作为数码管段选端。用单片机的p2.0p2.7口作为8个位选端。当然,位选端分别通过八个200欧的限流电阻与p2口相连。具体电流放大电路如图3.5所示。图3.5 电流放大电路3.5.2 动态显示由于所有4位段选线皆由一个i/o口控制,因此,在每一瞬间,4位led会显示相同的字符。这就是动态显示。要想每位显示不同的字符,就必须采用扫描方法轮流点亮各位led,即在每一瞬间只使某一位字符显示。在此瞬间,段选控制i/o口输出相应字符段选码(即字型码),而位选则控制i/o口在该显示位送入选通电平,以保证该位显示相应字符。段选码,位选码每送入一次后延迟1ms,因人眼的视觉暂留时间为0.1s(100ms),所以每位显示的间隔不能超过20ms,并保持延时一段时间,以造成视觉暂留效果,给人看上去每个数码管总在亮。利用视觉暂留原理,p1.4p1.7导通频率每秒必须在16秒以上,频率太快会闪烁,太慢数字会模糊。这部分是通过延时程序来实现的,具体的延时时间也是先大概估算下需要多少时间,再通过与实际效果比较,定下来的延时时间。具体程序将在软件介绍部分给出。3.5.3 显示位数的分配显示部分四位数码管的分配依次如下:百位(也为符号位)、十位、个位(个位始终带有小数点显示)、小数位。 具体介绍如下:对于百位的显示,它又具有符号显示的功能。本次设计对第一位数码管的安排是:1、 当温度低于100度高于0度时,百位显示数字0;2、 当温度超过100度时,百位显示数字1;3、 当温度为负温度时,百位显示“”即负号。 其他三位的显示,考虑到了有小数显示,故把个位数始终带上小数点来显示。十位和小数位,就始终不显示小数点,这样就达到了比较容易识别的温度显示了。具体的实现这些功能在后面会介绍,主要是通过汇编语言编程来实现。3.6 串口通信本设计采用串行方式发送数据。在单片机方面主要用到了它的串行端口信号输入输出端:rxd,txd。然后,通过串口的电平转换芯片max232把5v电平转换成正负12v电平,再送到九针串口rs232,通过串口线把数据送到pc机上,最后用计算机上的温度显示界面显示出来。以下介绍怎样用这些器件来实现串口通信的:3.6.1 单片机串行端口mcs-51内部有一个可规划的串行端口,为一个全双工的通讯端口,故可以同时发送和接收数据。串行端口的优点就是使用较少的传输线即可完成数据的传输。同时,mcs-51的通讯端口也是一个接收缓冲式的串行端口,在sfr中有一个sbuf的寄存器,专门供存放发送和接收的数据,所以欲发送或接收,仅需对sbuf的寄存器进行存取即可。实际上,发送和接收各有一个sbuf寄存器,且占用同一地址(99h),依照读取或写入sbuf寄存器的动作来决定到底使用哪一个寄存器。当将指令写入sbuf时,及时将数据写入串行数据发送缓冲器sbuf中发送出去;反之亦然。串行端口接收到一个字节的数据后,产生串行端口中断,通知cpu至sbuf读取数据,此时串行端口可继续接受第二个数据,当第二个数据接收完成时,存于sbuf中的第一个数据若还没被读取,则第一个数据会丢失。同理,将一个字节数据写入发送sbuf中,便会通过串行端口发送出去,发送完毕后便产生中断,通知cpu已经发送完成,可继续发下一个数据。串行端口一共有四种工作模式,由sfr中的98h可位寻址的scon寄存器来选择。本设计采用的是串行端口处于模式1的情况。此时,串行端口经由txd引脚负责发送及通过rxd引脚负责接受10位数据,其中包括一个起始位、8个数据位和1个停止位。由于接收和发送是由不同的引脚负责的,故可同时接收和发送。但本设计只用到了发送数据部分,所以接收部分基本没用,但在连接电路时,还是接上了接收部分的电路。串行通信这部分的硬件很简单,单片机上只用到了txd和rxd两个管脚。3.6.2 max232的应用 max232产品是由德州仪器公司(ti)推出的一款兼容rs232标准的芯片。该器件包含2驱动器、2接收器和一个电压发生器电路提供tia/eia-232-f电平。该器件符合tia/eia-232-f标准,每一个接收器将tia/eia-232-f电平转换成5-v ttl/cmos电平。每一个发送器将ttl/cmos电平转换成tia/eia-232-f电平。它的封装形式如图3.6,它的外围电路连接如图3.7。图3.6 max232的封装图3.7 max232的外围电路接法3.6.3 rs232的应用1、rs-232功能介绍rs-232被定义为一种在低速率串行通讯中增加通讯距离的单端标准。rs-232采取不平衡传输方式,即所谓单端通讯。收、发端的数据信号是相对于信号地,如从dte设备发出的数据在使用db25连接器时是2脚相对7脚(信号地)的电平,db25各个引脚定义参见图3.8。典型的rs-232信号在正负电平之间摆动,在发送数据时,发送端驱动器输出正电平在+5+15v,负电平在-5-15v电平。当无数据传输时,线上为ttl,从开始传送数据到结束,线上电平从ttl电平到rs-232电平再返回ttl电平。接收器典型的工作电平在+3+12v与-3-12v。由于发送电平与接收电平的差仅为2v至3v左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传送距离最大为约15米,最高速率为20kb/s。rs-232是为点对点(即只用一对收、发设备)通讯而设计的,其驱动器负载为37k。所以rs-232适合本地设备之间的通信。2、rs-232的电气特性eia-rs-232c对电器特性、逻辑电平和各种信号线的功能都作了规定。在txd和rxd上:逻辑1(mark)=-3v-15v、逻辑0(space)=+315v。在rts、cts、dsr、dtr和dcd等控制线上。信号有效(接通,on状态,正电压)+3v+15v、信号无效(断开,off状态,负电压)=-3v-15v。即它的输入电压的准位为正负12v,逻辑1为-12v,对应单片机逻辑1为5v;逻辑0为+12v,对应单片机逻辑1为0v。由于电位的准位不同,所以用到icl232、max232等来实现电压转换。d型连接器的引脚名称、功能如下:图3.8 d型连接器的引脚图表3.1 d型连接器的各引脚功能引脚名称db9引脚db25引脚引 脚 功 能数据方向/cd18接收线信号检测to pcrxd23接收数据线to pctxd32发送数据线from pc/dtr420数据终端机就绪,预备好将modem连接到线上from pcgnd57信号地线/dsr66数据设定就绪,表示modem在线上to pc/rts74要求送出,在半双工时,切换modem的发送器from pc/cts85清除以便送出,表示modem已准备好发送to pcri922to pc本设计采用的9针的rs232和max232,不需外加正负12v的电源,只需5v即可,非常方便。由于考虑到电路板的焊接方法,我选用了9pin的rs232的串口座焊接在电路板上,再用一根串口线把电路板上的串口座和计算机的串口相连。这部分具体的电路连接图见图3.9。 图3.9 max232与rs232的连接图3.7 本章小结 本章主要介绍了本次设计硬件部分的设计思路和各部分具体的硬件连接。首先从整体上介绍了本次设计的主要思路和方案,然后分别介绍了ds1820与单片机接口电路部分、复位电路及振荡电路部分、显示电路部分、串口通信部分,这四大部分的具体实现方案。由于单片机和温度传感器ds1820都在前面有具体的介绍,故在这里只提到它们的应用。对于串口通信部分用到了芯片:max232和rs232,在前面没有介绍过,故在本章中对它们作了简单的介绍。第4章 软件设计原理4.1 软件设计的总思想软件部分设计思路也是根据总的设计流程来设计的。该设计也主要分为五大部分。按照程序流程分为:读取ds1820内部数据、设置ds1820、数据处理和精度提高、数码管显示、串口通信。由于我所要做的是温度采集系统,故每次采集并显示和发送完成后,还需要继续返回到一开始的采集,循环的进行采集、处理、显示。具体的流程图如图4.1:图4.1 总的程序流程图下面的各小结根据硬件设计的四大部分来分别介绍他们的软件设计,即传感器部分、单片机的温度数据处理部分及精度提高部分、数码管显示部分和串口通信部分。4.2 传感器程序设计根据前面第二章中关于温度传感器ds1820的复位和读写时序可以看出,ds1820对时序要求很严格。因此在对它进行编程时,对每一个脉冲都要进行严格计算。在这部分的程序中用到了许多不同的延时。对于传感器这部分的程序设计主要可以分为三部分:初始化、传感器读操作、传感器写操作。因为ds1820为单总线的数字传感器,必须要人为的对它串行方式地写入我们想要进行的操作所对应的指令。然而,每次对rom进行操作前,必须先对其进行初始化操作。最终我们是要读取ds1820内部笔记本的值,用来转换成温度,对于这部分也是通过串行方式读取数据的。传感器部分的程序流程图如图4.2:图4.2 ds1820部分流程图在ds1820中,任何命令的发送必须先由主机对其进行初始化,初始化成功后才能发送命令和数据,故初始化这部分十分重要。其初始化部分的程序流程图见图4.3:图4.3 ds1820初始化部分流程图4.3 温度转换和精度提高这部分的程序实现了正负温度情况下的温度转换和精度提高。并最终转换成了bcd码存放在了70h73h中。具体流程图见图4.4。以下各小结详细说明这部分程序的原理。图4.4 数据转换及精度提高部分流程图4.3.1 温度转换根据第二章中的介绍可以知道,ds1820内部寄存器中的第0和第1字节表示温度的高字节和低字节。并且ds1820中给出的这两个字节温度是用16位补码的形式给出,16位的数据不仅不利于存储和传送,也不能够显示。而为了计算的方便,需要将其转换为8位的二进制代码。所以,在这部分的温度转换上要考虑温度的正负。但是ds1820的高8位为温度的符号位,即这16位数据中就只有低8位和高字节中的最低位,共九位为有用的。于是,我先得判断温度高字节的最低位是0还是1,来判断温度为正还是负。对于负数的情况下,就把低字节取反,正数情况下不变。4.3.2 精度提高 1、精度提高的原理ds1820内部暂存寄存器的分布如表4.1所示, 表4.1 ds1820内部9字节笔记本内容0位1位2位3位4位5位6位7位8位lsbmsbthtlffhffhcount-rmncount-per-ccrc其中第7字节存放的是当温度寄存器停止增值时计数器1的计数剩余值,第8字节存放的是每度所对应的计数值,这样,我们就可以通过下面的方法获得高分辨率的温度测量结果。首先用ds1820提供的读暂存寄存器指令(beh)读出以0.5为分辨率的温度测量结果,然后切去测量结果中的最低有效位(lsb),得到所测实际温度整数部分t整数,然后再用beh指令读取计数器1的计数剩余值m剩余和每度计数值m每度,考虑到ds1820测量温度的整数部分以0.25、0.75为进位界限的关系,实际温度t实际可用下式计算得到:t实际=(t整数0.25)+(m每度m剩余)/m每度 = t整数+0.75 (m剩余/m每度) = t整数+0.75(count-rmn/ count-per-c)因此,在读取ds1820内部数据时,我把这就字节内容都读了出来,从低到高依次放到了35h3dh中。在转换时要用到那个字节的温度就直接在这九个存储单元取数即可。2、实现方法从上面的公式可以看出,出现了小数0.75、还有除法。我想把精度提高到0.1度,就必须使得这部分的除法产生的小数部分保留。然而,单片机汇编语言中只有一条除法指令:div ab。这条指令无法除得小数,只能得到余数。于是,我采用了先把整个公式中所要用到的数,都扩大100倍,这样,即我做除法后,得到的商也扩大了100倍。然后,再把最终的结果除以10,舍去余数后再除10就可得到精确到0.1度的小数位,对于整数部分在转化成bcd码,最后把小数位到百位分别存放在70h73h中。但是,当我把所有的数据都放大了100倍后,又出现了新的问题。一个字节所能存的最大数是255,而所测的温度超过放大100倍后,自然就会发生溢出。当然,除法也是,放大了100倍后再进行除法,很可能使得最后的商超过255而发生溢出。于是,我采取了把单字节扩展成双字节,进行双字节的加、减、乘、除和求补运算。所以必须用到双字节的加、减、乘、除和求补运算的子程序。对于除法,我还用到了双字节除单字节的子程序,这是在最后温度除10得到小数位是用到的。因为这时它的商就是实际温度,不可能发生溢出。在整个数据处理过程中,我基本上在进行无符号数的运算。对于负数我都是对它进行求补,然后在后面的运算过程中,在对它有加减运算时采取反运算。反正就是始终记得那些数是负数,在运算过程中对它作相应的处理。4.4 数码管显示数码管显示部分具体原理在前面硬件介绍时已经有详细说明了

温馨提示

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

评论

0/150

提交评论