已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录内容摘要1关键词1Abstract1Key words11 概述22数据采集系统的硬件设计32.1 DS18B20数字式温度传感器模块的硬件电路设计32.2 数码管显示模块的设计82.3 RS-485总线及其与单片机的接口电路的设计93 远程数据采集系统的软件设计143.1 单片机的数据采集模块的程序设计143.2 数据采集的串口通信协议193.3 人机界面的设计244系统调试与分析294.1 单片机中测温显示模块的调试294.2 串口通信调试294.3 结果分析315 结束语32参考文献33致 谢35内容摘要:本论文提出一种利用DS18B20数字式温度传感器作为温度采集的工具,利用单片机AT89C52对它进行控制,并且通过RS-485总线做远程传送将采集到的数据通过RS-232接口送入PC机测温系统的设计方法。设计采用了模块化的思想,条理清楚,主要有硬件设计与软件程序设计两部分。本系统接口简单、使用方便、可靠性好,在温度检测中有较广泛的应用前景,具有较强的使用价值。就其采样频率和分辨率来说属于中速类型,适合对数据采样频率要求不是特别高的应用场合。关键词:单片机AT89C52 温度传感器DS18B20 RS-232 总线串行通信RS-485 VB6.0 Abstract: A designing method which uses DS18B20 digital sensor as temperature-collecting tool, and single chip computer as Micro-controller unit is introduced. It makes a long-range conveyance by using RS-485 Bus to send the collected data to PC temperature-measuring system by RS-232 interface. This design has its clear order and mainly has hardware design and software process design two parts for its Modular thoughts. This system has widely perspective in temperature measurement and good use value for its simple and convenient interfaces. As far as sampling frequency and resolution ratio, it belongs to middle-speed type. It is proper to be used in application occasion without high requirement to data sampling frequency.Key words: Single Chip Computer AT89C52;Temperature Sensor DS18B20;RS-232;Bus Serial Communication RS-485;VB6.01 概述数据采集广泛应用于各个测试和控制系统,数据采集系统的设计和实现包括很多方面的内容,涉及面也很广。在日常生活及工农业生产中经常要用到温度的检测及控制,能独立工作的温度检测系统已广泛应用于诸多的领域。传统的温度检测大多以热敏电阻或热电偶为传感器,它们测出的一般都是电压,再通过相应的A/D转换,转换成对应的温度,这种结构需要比较多的外部硬件支持,硬件电路复杂,软件调试复杂,制作成本高。在一些测量与控制系统的应用场合中,数据采集点与控制点通常有一定的距离,因此需要将采集的数据从采集现场进行远程传输,而传统的串口通信传输的最大的距离只有15m,因此相要完成远距离的传输,就应对系统的数据传输问题采取新的方法。为了简化电路,降低成本,提高性价比,增强抗干拢能力和扩大传输距离和使用的灵活性,研究一种新的温度数据远程采集系统也就很有必要。本设计提出一种利用DS18B20数字式温度传感器作为温度采集的工具,利用单片机对它进行控制,并且通过RS-485总线做远程传送将采集到的数据通过RS-232接口送入PC机测温系统的设计方法。 系统上位机由一台微机构成,软件采用Visual Basic编程,做出十分直观的人机界面,由单片机构成的测温模块检测到的温度数据分别显示在单片机的显示模块和通过串口通信显示在PC机上。本系统设计完成了对温度数据的采集、数码管显示以及PC机对温度变化的曲线图绘制。设计采用了模块化的思想,条理清楚,主要有硬件设计与软件程序设计两部分。本设计接口简单、使用方便、可靠性好,在温度检测中有较广泛的应用前景,具有较强的使用价值。就其采样频率和分辨率来说属于中速类型,适合对数据采样频率要求不是特别高的应用场合。2数据采集系统的硬件设计系统主要由DS18B20数字式温度传感器模块、单片机控制模块、数码管显示模块、RS-485传输总线模块、RS-485/RS-232转换接口模块、上位PC机显示和控制模块五个部分组成,其框图如图1所示,本系统的整体硬件电路图见附录1。图1 远程温度数据采集系统框图2.1 DS18B20数字式温度传感器模块的硬件电路设计12为了降低温度采集的硬件复杂性与提高整个设计电路的抗干拢能力,降低成本,数据采集模块中,采用美国达拉斯(DALLAS)公司推出的一种改进型智能温度传感器DS18B20作为检测元件。它具有微型化、低功耗、高性能、抗干扰能力强、易配微处理器等优点,特别适合于多点温度测控系统。2.1.1 数字式温度传感器DS18B20DS18B20数字式温度传感器与传统的热敏电阻不同,可直接将温度转化成数字信号进行处理,每片DS18B20都具有惟一的产品号并可存入其ROM中,便于构成大型温度测控系统时在单线上挂接多个DS18B20芯片,CPU可用简单的协议就可识别。从DS18B20读出或写入DS18B20信息仅需要一根端口线,其读写及温度变换功率来源于数据总路线,该总路线本身也可以向所挂接的DS18B20供电,而无需额外电源,从而节省大量的引线和逻辑电路。根据实际需要通过简单的编程实现912位的数字值读数方式,分辨率最大可达0.0625,测量范围为-55125。它采用8脚SO封装或3脚PR-35封装,分别如图2、图3所示。 图2 DS18B20的8脚SO封装 图3 DS18B20的3脚PR-35封装 8脚封装的NC为空引脚;VDD为电源引脚,接3.05.5V;GND接地;DQ为数据的输入和输出引脚(单线总线),常态下呈高电平。DS18B20的内部结构如图4所示:图4 DS18B20的内部结构2.1.2 DS18B20的测温原理DS18B20的内部框图如图5所示,主要包括寄生电源、温度传感器、64位激光ROM单线接口、存放中间数据的高速暂存器、用于存储用户设定的温度上下限值、触发器存储与控制逻辑、8位循环冗余校验发生器等7部分。图5 DS18B20的内部框图低温度系数振荡器是一个振荡频率随温度变化很小的振荡器,为计数器1提供一个频率稳定的计数脉冲。高温度系数振荡器是一个振荡频率对温度很敏感的振荡器,为计数器2提供一个频率随温度变化的计数脉冲。初始时,温度寄存器被预置成-55,每当计数器1从预置数开始减计数到0时,温度寄存器中寄存的温度值就增加1,这个过程重复进行直到计数器2计数到0为止。初始时,计数器1的预置值是和-55相对应的一个初始值。以后计数器1每一个循环的预置数都由斜率累加器提供。为了补偿振荡器温度特性的非线性,斜率累加器提供的预置值也随温度作相应的变化。计数器1的预置数也就是在给定温度处使温度寄存器值加1所需的计数值。DS18B20测量温度时使用特有的温度测量技术。DS18B20内部的低温度系数振荡器能产生稳定的频率信号;高温度系数振荡器则将被测温度转换成频率信号。当计数门打开时,DS18B20进行计数,计数门开通时间由高温度系数振荡器决定。芯片内部有斜率累加器,可对频率的非线性度加以补偿。测量结果以16位带符号扩展的二进制补码形式存入温度寄存器中。单片机可以通过单线接口读出数据,读数据时低位在前,高位在后,数据格式以0.0625/LSB形式表示。温度值格式的低、高字节如表1、表2所示。表1 LS字节232221202-12-22-32-4表2 MS字节SSSSS262524当符号位S=0时,表示温度值为正,可以直接将二进制数转换成十进制数;当符号位S=1时,表示温度值为负,要先将补码变成原码,再计算其对应的十进制数。表3是部分温度对应的二进制温度数据。表3 DS18B20温度与测得值对应表温度/二进制表示十六进制表示+1250000 0111 1101 000007D0H+850000 0101 0101 00000550H+25.06250000 0001 1001 00010191H+10.1250000 0000 1010 001000A2H+0.50000 0000 0000 10000008H00000 0000 0000 00000000H-0.51111 1111 1111 1000FFF8H-10.1251111 1111 0101 1110FF5EH-25.06251111 1110 0110 1111FE6FH-551111 1100 1001 0000FC90H2.1.3 DS18B20中的单总线技术DALLAS公司推出的1-wire Bus技术采用单根信号线,既可传输时钟,又能传输数据,而且数据传输是双向的。系统中的数据交换、控制都由这根线完成。主机或从机通过一个漏极开路或态端口连到该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线。单总线通常要求外接一个4.7k的上拉电阻,当总线闲置时,其状态为高电平。主机和从机之间的通信通过三个步骤完成:初始化1-wire器件、识别1-wire器件和交换数据。由于是主从结构,只有主机呼叫时,从机才能应答,主机访问1-wire器件必须严格遵循总线命令时序,即初始化、读ROM、命令功能命令。如出现混乱,1-wire器件不会响应主机。1-wire协议定义了复位脉冲、应答脉冲、写0、读0、和读1时序等几种信号类型。在这些信号中除应答信号外,其它的都是由主机发出同步信号,且发送的所有命令和数据都是低字节在前面。基本的通信过程为:主机通过拉低单总线至少480us产生Tx脉冲;然后由主机释放总线,进入Rx模式。主机释放总线时,会产生一由低电平跳变为高电平的上升沿;单总线器件检测到该上升沿后,延时1560us;单总线器件通过拉低总线60240us来产生应答脉冲;主机接收到从机的应答信号脉冲后,说明有单总线器件在线,然后主机就可以开始对从机进行ROM命令和功能命令操作。所有的读写时序至少需要60us,且每两个独立的时序至少需要1us的恢复时间。在写时序中,主机将在拉低总线15us之内释放总线,并向单总线器件写1;若主机拉低总线后能保持至少60us的低电平,则向单总线写0。单总线器件仅在主机发出读时序时才向主机传输数据,当主机向单总线器件发出读数据命令后,必须马上产生读时序,以单总线器件能传输数据。2.1.4 温度数据采集的硬件电路图DS18B20有两种供电方式:直接由VDD供电、利用DQ线采用寄生电源供电。当采用DQ线寄生电源供电方式时,在对DS18B20的一些命令操作上会有一些较特殊的要求。本系统是以DS18B20采用直接VDD供电的方式,即采用图6所示的供电方式,电源电压和单片机电源相同,采用5V供电即可。图6 直接由VDD供电其中DS18B20采集到的数据从它的DQ引脚输出经过一根数据线传输到单片机的P2.7脚,同时,单片机对DS18B20进行读/写操作也是通过该引脚实现的。2.2 数码管显示模块的设计3LED数码管显示电路采用动态扫描显示方法,将各个数码管的8个笔画段(a、b、c、d、e、f、g、h)同名端并联在一起,由一个8位I/O口控制,形成段选线合用;而每一位数码管的公共端(位选线)是各自独立地受I/O口控制,实现各位的分时选通。单片机向字段输出字形码时,所有显示器都接收到相同的字表码,但究竟是哪个数码管亮,则取决于公共端,可通过控制公共端来决定哪一位数码管发亮显示。动态扫描是采用分时的方法,轮流控制各位数码管的公共端,使各个数码轮流点亮。在轮流点亮的过程中,每位显示器的点亮时间极为短暂(约1ms),由于人类眼睛的视觉暂留及发光二极管的余辉效应,只要轮流点亮各位二极管是,扫描的频率合适时不会有闪烁感。本设计采用的4位LED数码管动态显示的电路原理图如图7。其中段选线占用一个8位I/O口,可用单片机的P1口作为段选线控制的I/O;位选线占用4位I/O口,可用单片机的P2.0P2.3,由于采用的是共阳极LED为使亮度足够,每位都采用了一个PNP管进行驱动。R15-R22是限流电阻,以防止LED被烧坏。图7 数码管显示电路原理图2.3 RS-485总线及其与单片机的接口电路的设计45RS-485是一个电气接口规范,属于7层开放系统互连(Open System Interconnection,OSI) 模型物理层的协议标准。它只规定了平衡驱动器和接受器的电特性,没有规定接插件、传输电缆和通信协议。支持半双工或全双工模式,网络拓扑通常采用终端匹配的总线型结构,不支持环型或星型网络。由于RS-485是从RS-422基础上发站而来的,RS-485 采用平衡传输方式,需要在传输线上接匹配电阻。RS-485 可以采用二线与四线方式,二线制,可实现真正的多点双向半双工通信。采用四线连接时,只能实现点对多点的全双工通信,即只能有一个主(Master) 设备,其余为从设备。无论是四线还是二线连接方式总线上最多只能接32个设备。RS-485的共模输出电压在-7+12V之间,RS-485接收器最小输入阻抗为12k。RS-485的最大传输距离约为1219m,最大传输速率为10Mb/s 。平衡双绞线的长度与传输速率成反比,在100Kb/s速率以下,才可能使用规定最长的电缆长度。只有在很短的距离下才能获得最高速率传输。一般100m长双绞线最大传输速率仅为1Mb/s。RS-485需要2个匹配电阻,其阻值要求等于传输电缆的特性阻抗。在短距离传输时可不需要匹配电阻,一般情况下在300m以下不需匹配电阻,匹配电阻接在传输总线的两端(一般接120的匹配电阻即可)。RS-485常采用平衡发送和差分接收方式来实现通信。两条传输线采用通常使用双绞线,故具有较强的抗共模干扰能力。接受灵敏度也相当高,能检测低达200mV的电压,某些芯片已经能检测到低达50mV 的电压(如MAX3080等),同时,最大传输速率和最大传输距离也大大提高。RS-485总线以双绞线为物理介质,通常工作在半双工通信状态,即在同一时刻总线上只能有1个节点为主节点且处于发送状态,其它所有节点必须处于接收状态。如果同一时刻有2个以上的节点处于发送状态将导致所有发送方的数据发送失败,即所谓总线冲突。为了避免总线冲突,RS-485总线一般工作在主从模式下。整个通信总线系统由1个主节点、若干个从节点组成,按照轮循的方式,主节点依次和从节点通信,这样就解决了RS485总线的冲突。本系统中的主机,即上位PC机和从机,即下位单片机之间的通信也工作在主从模式下的。在本系统中,除了一个PC机作为主机外,只有一个单片机作为从机。2.3.1 MAX485简介6为了构建满足本系统远程数据传输的RS-485总线,本设计采用了一款专门的电平转换芯片,即MAX485接口芯片。它是Maxim公司的一种RS485芯片。采用单一电源+5V工作,额定电流为300A,采用半双工通讯方式。它完成将TTL电平转换为RS485电平的功能。其引脚结构图如图8所示。图8 MAX485的内部结构图从MAX485的内部结构图中可以看出,MAX485芯片的结构和引脚都非常简单,内部含有一个驱动器和接收器。RO和DI端分别为接收器的输出和驱动器的输入端,与单片机连接时只需分别与单片机的RXD和TXD相连即可;/RE和DE端分别为接收和发送的使能端,当/RE为逻辑0时,器件处于接收状态;当DE为逻辑1时,器件处于发送状态,因为MAX485工作在半双工状态,只需用单片机的一个管脚控制这两个引脚即可;A端和B端分别为接收和发送的差分信号端,当A引脚的电平高于B时,代表发送的数据为1;当A的电平低于B端时,代表发送的数据为0。在与单片机连接时接线非常简单。只需要一个信号控制MAX485的接收和发送即可。同时将A和B端之间加匹配电阻,一般可选120的电阻。2.3.2 PC机和单片机之间远程通信的RS-485原理方案7PC机的串行接口为RS-232或USB总线,然而RS-232标准的传送距离最大约为15米,最高速率为20kb/s,并且RS-232是为点对点(即只用一对收、发设备)通讯而设计的,可见RS232只适合于本地通讯使用。而使用USB总线的话,系统的成本和设计难度将大增加。为了降低成本和设计难度,本系统采用的是将RS-232接口转换成RS-485接口,再在单片机和PC机之间加入RS-485总线,采用RS-485进行长距离、高速的串行异步通信。单片机采用RS-485进行串行通信,只需要将TTL电平的串行接口通过芯片转换为RS-485串行接口。这种转换比较简单,本系统采用MAX485芯片来完成这种转换。对于PC机现有的RS-232 接口,系统中利用一片MAX485芯片和MAX232芯片组成的转换电路来实现RS-485电平与RS-232之间的转换。此转换电路一边与RS-232 标准9针接口相连,另一边与RS-485总线相连。PC机和单片机之间远程通信的RS-485原理方案,如图9所示。 图9 单片机和上位PC机间的RS-485通信方案2.3.3 RS-485总线和单片机接口硬件的设计8 在图9中可以看到,数据通信在硬件上采用3线制,将单片机和PC机串口(RS-232C)的3个引脚(TXD、RXD、GND)分别连在一起,即将PC机和单片机的发送数据线TXC和接收数据线RXD交叉连接,两者的地线相连,而其它信号线如握手信号线均不用,采用软件握手的方式。只不过为了达到数据能远程传输,在下位单片机和上位PC机之间加入了485总线,在单片机系统中使用MAX485芯片,完成单片机TTL电平到RS-485电平之间的转换,在总线末端接一个匹配电阻,吸收总线上的反射信号,使得正常传输信号无毛刺。匹配电阻的取值应该与总线的特性阻抗相当。转换电路见图10。由于MAX485工作在半双工状态,可只用单片机的一个引脚控制它的接收使能端/RE和发送使能端DE,以决定MAX485是工作在接收还是发送状态。在图11中可以看到,/RE和DE两个引脚连在一起,单片机通过P1.7,即单片机的第9个引脚对它们进行控制,当P1.7输出逻辑0时,MAX485处于接收状态,当P1.7输出逻辑1时,MAX485处于发送状态。单片机的第11脚是串口接收引脚RXD,和MAX485的接收器输出端RO相连接,从上位机发过来的控制信号将从这个端输入到单片机内,使单片机进行相应的控制操作;单片机的第12脚为串口发送引脚TXD,和MAX485的驱动器输入端DI相连,单片机的温度数据将通过这个引脚传输到MAX485总线,经过长距离传输后最终送到远程上位PC机上进行显示和处理。图10 MAX485构成的RS-485总线及其和单片机的接口电路在PC机端用MAX485和MAX232组成的电平转换电路完成TTL电平到PC机的RS-232串口电平的转换。相应的电路如图11所示。在总线上没有信号传输时,总线处于悬浮状态,容易受干扰信号的影响。将总线上的差分信号的正端A+和负端B-之间接一个10k的电阻;负端B-和地间接一个10k的电阻,形成一个电阻网路。当总线上没有信号传输时,正端A+的电平大约为3.2V,负端B-的电平大约为1.6V,即使有干扰信号,也很难产生串行通信的起始信号0,从而增加了总线抗干扰的能力。图11 单片机和上位PC机之间的RS-485通信原理图MAX485采用的串行通信波特率选为4800bit/s,AT89C52的晶振相选用12 MHz),可满足系统对波特率误差的要求。3 远程数据采集系统的软件设计3.1 单片机的数据采集模块的程序设计此系统数据采集模块包含两个方面的内容,一方面是利用单片机控制DS18B20工作,进行温度数据的采集;另一方面是利用单片机将DS18B20温度传感器采集到的数据传输到显示模组进行显示。下面将讨论这两方面的内容。3.1.1 单片机的数据采集部分的主要程序910DS18B20操作流程DS18B20的一线制总线要求的操作流程:(1) 初始化;(2) ROM操作命令;(3) 存储器和控制操作命令; (4) 处理/数据。 主控MCU对DS18B20的每一次完整的操作都应遵循上述的流程进行操作。初始化一线制总线上的所有处理都从初始化开始,初始化包括主控MCU发出的总线复位信号(Reset Plus),以及从器件(本文指DS18B20)发出存在应答信号(Presence Plus)。 存在应答信号让主控MCU知道总线上存在DS18B20器件,并且从器件已准备好接受主控MCU的操作。ROM操作指令及流程一旦完成初始化后,主控MCU便可以发出对DS18B20的6个ROM 操作命令之一,所有ROM 操作命令均为8 位长。ROM操作命令的操作流程请参考前面的图 2.4,这些命令的描述如下:Read ROM(读ROM)33h 此命令允许总线的主控MCU读DS18B20 的8 位产品系列编码、唯一的48 位序列号以及8 位的CRC;此命令只能在总线上仅有一个DS18B20 的情况下可以使用,如果总线上存在多于一个的从属器件,那么当所有从片企图同时发送时将发生数据冲突的现象,漏极开路会产生线与的结果。 Match ROM(匹配ROM)55h匹配ROM 命令,即以64 位的ROM 数据序列与总线上的多个DS18B20器件进行匹配(当然只可能有一个器件与主控MCU发出的匹配ROM数据相匹配),相当于总线主控MCU对多点总线上特定的DS18B20寻址,只有与64 位ROM 序列严格相符的DS18B20 才能对后继的存储器操作命令做出响应,所有与64位ROM 序列不符的从片将等待复位脉冲。此命令在总线上有单个或多个器件的情况下均可使用。Skip ROM(跳过ROM)CCh在单点总线系统中,通过此命令允许总线上的主控MCU不提供64 位ROM 编码而访问存储器操作,以此来节省时间;如果在总线上存在多于一个的从属器件,而且在Skip ROM 命令之后发出读命令,那么由于多个从片同时发送数据会在总线上发生数据冲突,漏极开路下拉会产生线与的效果。Search ROM(搜索ROM)F0h 当系统开始工作时总线上的主控MCU可能不知道总线上的从器件个数或者不知道其64 位ROM 编码,搜索ROM 命令允许总线主机使用一种排除查询的方法来识别总线上所有从片的64 位ROM 编码;有关搜索ROM的具体操作流程,可以参考DS18B20器件的数据手册,从该手册可以获取详细的操作说明。 Alarm Search(告警搜索)ECh 此命令的流程与搜索ROM 命令相同,但是仅在最近一次温度测量出现告警的情况下DS18B20才对此命令做出响应。告警的条件定义为温度高于TH 或低于TL,只要DS18B20 一上电,告警条件就保持在设置状态,直到另一次温度测量显示出非告警值或者改变TH 或TL 的设置,使得测量值再一次位于允许的范围之内,贮存在EEPROM 内的触发器值用于告警。 在总线上的主控MCU完成ROM操作命令后,主控MCU便可以对总线上的DS18B20进行存储器操作了(存储器操作包括存储器操作命令和控制操作命令);存储器操作命令有6个,描述如下:写缓冲存储器Write Scratchpad 4Eh 此命令将后面跟着的数据写至DS18B20 的缓冲存储器,从地址2开始接着写的3个字节数据将被保存在缓冲存储器地址2到4之中;发出一个复位(Reset Plus)便可在任何时刻终止写操作。读缓冲存储器Read Scratchpad BEh 此命令读缓冲存储器的内容,读开始于字节0 并继续经过缓冲存储器,直至第9个字节(Byte 8)CRC 被读出为止。主控MCU可以在任何时候发出总线复位信号以中止读操作。复制缓冲存储器Copy Scratchpad 48h 此命令把缓冲存储器中的Byte2、Byte3和Byte4中的数据复制入DS18B20 的EEPROM存储器,即把温度触发器字节(高温告警温度值TH和低温告警温度值TL)载入EEPROM,另外也会将缓冲存储器中的Configuration Register的映射字节(Byte4)载入EEPROM当中;这样,设置才会真正的生效。如果总线主机在此命令之后,只要DS18B20 正忙于把缓冲存储器复制入EEPROM,它就会在总线上输出0; 当复制过程完成之后它将返回1。如果由从器件采用寄生电源供电,总线主控MCU在发出此命令之后必须能立即强制上拉10mS以上。启动温度转换Convert T 44h此命令开始温度转换,不需要另外的数据。温度变换被执行后,DS18B20便保持在空闲状态,如果总线主控MCU在此命令之后发出读操作,那么只要DS18B20 正忙于进行温度变换它将在总线上输出0,当温度变换完成时它便返回1。重新调出EEPROM Recall E2 B8h 此命令把贮存在EEPROM中温度触发器的值以及配置寄存器的值重新调至缓冲存储器,这种重新调出的操作在对DS18B20上电时也自动发生,因此只要器件一接电缓冲存储器内就应该有有效的数据可供使用。在此命令发出之后,对于总线上主控MCU所发出的第一个读数据时间片,从器件都将输出其忙的标志:0 =忙、1 =准备就绪。 读供电状态Read Power Supply B4h 对于在此命令送至DS1820 之后所发出的第一读出数据的操作,从器件都会给出其电源方式的信号:0 =寄生电源供电、1 =外部电源供电。主函数的功能是初始化并负责温度的读出、处理计算、显示及传输。温度测量每2秒进行一次,程序流程图如图12所示。在测得温度后,将温度数据转换为十进制数的温度表示,然后再通过查表(在c语言中是一个数组),数据处理类似于由二进制转换为十进制,再由十进制转换为ASCII码。温度数据处理程序将12位的温度值进行BCD码转换运算,并进行温度值正负的判断,其程序流程图如图13所示,源程序见附录2。 图12 DS18B20数字测温主函数流程图 图13 温度计算转换函数程序流程图3.1.2 温度数据的处理方法前面提到了DS18B20的转换精度为912位,为了提高精度采用12位的话,温度寄存器里的值是0.0625为步进的,即温度寄存器里的二进制值乘以0.0625,是实际的十进制温度值。从前面的图2-4的温度数据值格式知道,小数部分是四位二进制数,其范围为0F,则转换成十进制小数值就是0.0625的倍数。这样需要4位数码管才能完全显示小数部分,实际应用中精确到如此的温度值在一般情况下是没有必要的,故设计1位数码管来显示小数,精确到0.1度,如表4列出了小数部分二进制和十进制的对应关系,在编程时,温度小数部分可以用查表法来实现, 表4 小数部分二进制和十进制的对应关系二进制值0123456759ABCDEF十进制值01123344566788993.2 数据采集的串口通信协议通信的基本方式可分为并行通信和串行通信两种。并行通信是指数据的各位同时进行传送。其优点是传送速度快,缺点是数据有多少位,就需要多少根传输线,适合于近距离传输;串行通信是数据的各位按顺序一位一位传送。其优点是只需要一对传输线,占用硬件资源少,从而降低了传输成本,特别适合于远程通信,缺点是传送速度较慢。本系统的下位单片机和上位PC机之间数据的传送采用串行通信方式。所谓通信协议是指通信双方的一种约定。在约定中对数据格式、同步方式、传送速度、传送步骤、检错方式以及控制字符定义等作出统一规定,通信双方必须共同遵守,也叫做通信控制规程,或称传输控制规程,它属于ISOOSI(国际标准化组织提出的开放系统互连参考模型)7层参考模型中的数据链路层。串行通信协议有两类:异步通信和同步通信。本系统采用的异步通信方式,故介绍异步通信协议。3.2.1 异步通信协议11异步传输格式亦称为起止式异步协议,其特点是通信双方以一个字符(包括特定的附加位)作为数据传输格式,且发送方传送字符的间隔时间是不定的。一个字符又称为一帧信息,每个字符由4个部分组成:起始位、数据位、奇偶检验位和停止位。这样一组信息就称为一帧数据或简称一帧,一帧信息在传输时,总是以起始位开始,以停止位结束。异步传送的字符格式如图14所示。图14导步传送字符格式起始位为0信号,占用1位,用来表示一帧信息的开始;其后是数据位,它可以是5位、6位、7位或8位,传送时低位在前,高位在后;再后面的是奇偶校验位(即可编程位),只占一位;最后是停止位,它用逻辑1来表示一帧信息的结束,可以是1位、1位半或2位。异步通信的特点是数据在线路上的传送不连续,传送时,字符间隔不固定,各个字符可以是连续传送,也可以是间断传送,这完全取决于协议或约定。间断传送时,在停止位后,线路上自动保持为1。在异步通信时,通信双方必须约定:(1)字符格式。双方事先约定字符的形式,奇偶校验形式及起始位和停止位的规定。(2)波特率。波特率就是传送速率,即每秒传送的二进制位数,单位为波特或bit/s。要求发送端与接收端的波特率一致。异步串行通信的波特率一般为504800bit/s。在本系统中,波特率设为4800bit/s,无奇偶校验位,8位数据位,1位起始位,1位停止位,一帧有10位二进制数据。3.2.2 单片机串行口的控制1213串行口的工作主要受串行口控制寄存器SCON的控制,另外也和电源控制寄存器PCON有关。(1) 串行口控制寄存器SCON用以设定串行口的工作模式、接收/发送控制及状态标志,字节地址98H,可位寻址,其格式如表5所示。表5串行口控制寄存器SCON的格式D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRISM0、SM1:串行口工作模式选择位,可选择4种工作模式,见表6所示:表6 串行口工作模式SM0 SM1工作模式功能说明波特率0 0模式0同步移位寄存器方式fosc/120 1模式110位异步接收发送可变(由定时器控制)1 0模式211位异步接收发送fosc/32或fosc/641 1模式311位异步接收发送可变(由定时器控制)SM2:多机通信控制位。主要用于模式2和模式3。若SM2=1,则允许多机通信。本系统只有一个从机,故此位置0。在模式1时,若SM1=1,则只有接收到有效停止位时,RI才置1,以便接收下一帧数据;在模式0时,此位必须为0。REN:允许接收控制位。只有当REN=1时,允许招收数据;否则,禁止招收数据。该位相当于串行口的开头,由软件置1或清零。TB8:在模式2和模式3中,TB8是发送数据的第9位,根据发送数据的需要由软件置位或复位。它可作为奇偶校验位(单机通信),也可以多机通信中作为发送地址帧或数据帧的标志位。多机通信时,一般约定:发送地址帧时,设置TB8=1;发送数据帧时,设置TB8=0。在模式0或模式1,该位不用。RB8:在模式2或模式3中,RB8为接收数据的第9位,它即可以是约定的奇偶校验位,也可以是约定的地址/数据标志位,可根据RB8被置位的情况对接收数据进行某种判断。在模式1时,若SM2=0(即不是多机通信时),则RB8是已接收到的停止位。模式0中该位不用。TI:发送中断标志,在一帧数据发送结束时由硬件置位。在模式0中,串行发送完8位数据后,或其他模式发送到停止位的开始时由硬件置位。TI=1表示“发送缓冲器已空”,通知CPU可以发送下一帧数据。TI位可作为查询,也可作为中断申请标志位,TI不会自动复位,必须由软件清零。RI:接收中断标志,在接收到一帧有效数据后由硬件置位。在模式0中,接收完8位数据后,或其他模式中接收到停止位时由硬件置位。RI=1表示一帧数据接收完毕,并已装入接收缓冲器中,即表示“接收缓冲已满”,通知CPU可取走数据。该位可作为查询,也可作为中断申请标志位,同样RI=1不会自动复位,必须由软件清零,以准备接收下一帧数据。(2)电源控制寄存器PCON,字节地址为87H,不可位寻址,PCON的内容如表7所示。表7 PCON按制字格式D7D6D5D4D3D2D1D0SMODGF1GF0PDIDLSMOD为波特率倍增位。在模式1、模式2、模式3时,若SMOD=1,则波特率提高1倍;若其值为0,则波特率不加倍。复位时,PCON=00H。3.2.3 单片机波特率设置在本系统中,波特率设为4800bit/s,一帧包含10位数据,故可以使串行口工作在模式1中,即SM0=0,SM1=1。在模式1中,波特率由定时器T1的溢出率与SMOD共同确定,即 (1)当T1做波特率发生器时,使T1工作在模式2(初值自动重载)定时方式,若计初值为X,则每过“256-X”个机器周期,定时器就会产生一次溢出。为了避免因溢出引起的中断,此时应禁止中断。溢出率为 (2)因此 (3)定时器T1工作在模式2时自动重载初始值为 (4)当晶振选为12MHz为减少计数误差,波特率选为4800bit/s时,设置SMOD=1,X=F3H。3.2.4 单片机串行通信程序设计进行串口数据通信,它包括串口初始化,波特率及数据格式设置,在此系统中波特率设为4800bit/s传输数据位设为8,奇偶校验设为N(无奇偶检验)即可;单片机通过检测串口控制寄存器SCON中的接收中断标志位RI的状态来决定是否要进行通信,其串口通信的程序流程图如图15所示,源程序见附录3。 图15单片机串口通信流程图相应的串口设置程序如下:TMOD=0x20; /定时器1工作在模式2(自动重载初值)。TL1=0xF3; TH1=0xF3; /在12M晶振下,设置波特率为/4800bit/s时,定时器T1的计数初值。SCON=0x50;PCON=0x00; /设置串行口工作在方式1,/REN=1,波特率倍增系数SMOD=1。TR=1; IE=0x90; /启动定时器1,允许串口中断3.3 人机界面的设计Microsoft Communications Control(简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法,在Visual Basic、VC、Delphi等语言中均可使用。3.3.1 PC机编程软件的选用1314PC机采用Visual Basic (简称VB)编程。VB已成为WINDOWS系统开发的主要语言,以其高效、简单易学及功能强大的特点越来越为广大程序设计人员及用户所青睐。VB支持面向对象的程序设计,具有结构化的事件驱动编程模式并可以使用无限扩增的控件,而且可以十分简便地做出良好的人机界面。在标准串口通信方面,VB提供了具有强大功能的通信控件MSCOMM,文件名为MSCOMM.VBX。该控件可设置串行通信的数据发送和接收,对串口状态及串口通信的信息格式和协议进行设置。这是一个标准的十位串口通信,包括8位标准数据和数据的起始位和停止位。在发送或接收数据过程中触发OnComm事件,通过编程访问CommEvent属性了解通信事件的类型,分别进行各自的处理。每个通信控件对应一个串口,可以设计多个通信控件来访问多个通信口。3.3.2 MSComm控件的属性Commport:设置或返回通信连接端口代号(116)。语法 object.CommPortvalue (value 一整型值,说明端口号)。在设计时,value 可以设置成从1到16的任何数(缺省值为 1)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm控件会产生错误68(设备无效)。必须在打开端口之前设置CommPort属性。Settings:设置初始化参数。语法:object.Settings= value。当端口打开时,如 value 非法,则MSComm控件产生错误380(非法属性值)。其格式为“BBBB,P,D,S”其中BBBB为波特率,P为字符校验方式,D为数据位,S为停止位。例如:“4800,N,8,1”。Portopen:设置或返回通信连接端口的状态。Input:从输入寄存器返回并删除字符。inputlen:设置并返回Input属性从接收缓冲区读取的字符数。语法 object.InputLen = value。InputLen属性语法包括下列部分:value 整型表达式,说明Input属性从接收缓冲区中读取的字符数。InputLen属性的缺省值是0。设置InputLen为0时,使用Input将使MSComm控件读取接收缓冲区中全部的内容。若接收缓冲区中InputLen字符无效,Input属性返回一个零长度字符串 ()。在使用Input前,用户可以选择检查InBufferCount属性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。InputMode常数语法:常数值描述:comInputModeText0(缺省)通过Input属性以文本方式取回数据;comInputModeBinary1通过Input属性以二进制方式检取回数据。OnComm常数。常数值描述如下:comEvSend: 发送事件;comEvReceive: 接收事件;comEvCTS: clear-to-send 线变化;comEvDSR: data-set ready 线变化;comEvCD: carrier detect 线变化;comEvRing: 振铃检测;comEvEOF: 文件结束。 3.3.3 PC人机界面设计PC机采用Visual Basic(简称VB)编程,在标准串口通信方面应用通信控件MSComm。MSComm控件的使用方法如下:(1) MSComm控件的加入。图16在VB6.0常规设计器中加入MSComm控件在VB6.0默认的控件工具栏中没有MSComm控件,因此首先要把它加入到工具栏中。在VB运行后选择“工程/部件”选项卡或在常用工具栏中点右键选择“部件”,然后在弹出的部件中把“Microsoft Comm Control 6.0”复选框选中,如图16。(2) 在VB6.0的Form.Load()函数中对MSComm作如下设置,以初始化串口。MSComm1.CommPort=cboCom.text MSComm1.Settings=”cboBode.text, cboJyw.text, cboData.text, cboTzw.text”MSComm1.InBufferSize=256MSComm1.OutBufferSize=256MSComm1.InPutMode= ComInputModeBinaryMSComm1.InPutLen=1MSComm1.RThreshold=1MSComm1.RTSEnable=TrueMSComm1.DTREnable=TrueMSComm1.PortOpen=True(3) 利用VB6.0做出的通信界面如图18所示。图18 利用VB6.0做出的通信界面该界面由两个frame(框架)构成,在VB6.0中,它们的Caption(标题)属性分别设置成“串口配置”和“温度测量”,在“串口配置”框图中可以分别对串口、波特率、奇偶检验位、数据位和停止位分别进行设置。在设置好这些属性后,就可以在“温度测量”框图中点击相应的命令按钮来操作。显然,从上图可以看出,利用VB6.0做出来的测温系统的人机界面显得十分直观和简单。在程序开始运行时要进行初始化,这里主要是对串口的初始化,如对波特率、校验位、数据位和停止位进行设置,当然,还要指定打开的是哪个串口等等。如界面示出的那样,要想在界面上显示PC机接收到温度数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年荆门辅警协警招聘考试真题含答案详解(新)
- 2023年黑龙江辅警协警招聘考试真题及1套参考答案详解
- 2023年甘南州辅警协警招聘考试备考题库完整参考答案详解
- 2024年临夏州辅警招聘考试题库及答案详解(有一套)
- 2023年珠海辅警协警招聘考试真题含答案详解(基础题)
- 2024年南充辅警协警招聘考试备考题库及答案详解(易错题)
- 2024年城口县辅警招聘考试真题有完整答案详解
- 2024年丰都县辅警协警招聘考试备考题库附答案详解(培优a卷)
- 2023年眉山辅警协警招聘考试备考题库附答案详解
- 2023年邵阳辅警招聘考试题库及答案详解(真题汇编)
- 软件框架互操作研究-洞察阐释
- 体育俱乐部公司策划方案
- 上下级沟通技巧
- 国资委面试题及答案
- 2025年中国功能食品市场现状分析及前景预测报告
- 吸入麻醉临床实践中国专家共识(2024版)
- 幼儿园示范公开课:大班语言绘本《跑跑镇》教案
- 科技部直属事业单位招聘笔试真题2024
- GB/T 12643-2025机器人词汇
- 2025重庆租房合同8篇
- 上海市农村房地一体宅基地确权登记工作实施方案
评论
0/150
提交评论