• 800.24 KB
  • 2022-04-22 11:24:49 发布

基于嵌入式系统的无线温度测量系统设计

  • 77页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'基于嵌入式系统的无线温度测量系统设计摘要针对目前我国一些粮食,煤炭等储备产业检测系统存在的不足,提出了一种无线传感器网络的设计方案,详细介绍了无线温度传感器的硬件结构和软件设计。传统的温度测量,都是从传感器引出线缆到达显示面板或主机才能测量温度的变化。对于一些腐蚀性强或密封性高,温度测量与主机距离远的环境,有线温度测量实现起来就比较困难。虽然随着技术的发展,温度变送器的出现解决了短距离温度的测量,但其仍然依赖于线缆。而且随着距离的增加.信号衰减很快。无法适用于远距离温度测量。温度指标在许多工程程项目中是不可或缺的重要参数,针对这一要求提出的无线温度测量系统.采用数字式温度传感器DSl8B20作为测温节点。89C52单片机作为下位机微处理器来控制温度值的采集,并通过无线收发模块NRF905进行传输,最后通过串口将数据传送到上位机显示芯片。实验证明,该系统解决了在复杂环境下温度采集和获取的问题,具有较高的精度和很好的推广应用前景。关键词:温度测量,无线通信,DS18B20 WirelesstemperaturemeasurementsystemdesignAbstractAimingatsomeofChina"sgrainandcoalreservesoftheshortcomingsofindustrialinspectionsystem,Awirelesssensornetworkdesign,detailsofthewirelesstemperaturesensornodehardwarearchitectureandsoftwaredesign.fromthesensorcabletothedisplaypanelorthehostcanmeasurethetemperaturechanges.Forsomecorrosionorsealingofhightemperaturemeasurementandthehostenvironmentfordistance,cabletemperaturemeasurementismoredifficulttoachievetogether.Althoughwiththetechnology,theemergenceofsolutiontemperaturetransmittertemperaturemeasurementofshortdistances,butstillrelyoncable.Andasthedistanceincreases.Signalsareattenuated.Cannotbeappliedtoremotetemperaturemeasurements.Temperatureindicatorprocessinmanyengineeringprojectsisanindispensableparameterforthisrequestwirelesstemperaturemeasurementsystem.WithdigitaltemperaturesensorDSl8B20astemperaturenode.89C52microcontrollerasaslavemicroprocessortocontrolunderthemulti-temperaturevalueofthecollection,andthroughthewirelesstransceivermoduleNRF905fortransmission,andfinallythroughtheserialporttotransferdatatoPCgraphicschips.Experimentsshowthatthesystemsolvesthetemperatureinacomplexenvironment,collectionandaccessproblems,highaccuracyandgoodapplicationprospects.Keywords:temperaturemeasurement,wirelesscommunication,DS18B20 请留出一个汉字的空间,下同1绪论1.1研究意义、背景温度是表征物体冷热程度的物理量。温度是生活和工业生产中常见的工艺参数之一,由于它直接影响燃烧、化学反应、发酵、烘烤、煅烧、蒸馏、浓度、挤压成形、结晶以及空气流动等物理和化学过程,因此在许多的工程项目中温度指标也是不可或缺的重要参数。所以如何准确、方便地获取温度就显得尤为重要。由于温度的测量和控制在激光器、光纤光栅的使用及其它的工农业生产和科学研究中应用广泛,所以温度测量和控制的失误就可能引起生产安全、产品质量、产品产量等一系列问题。因此,对温度的检测的意义就越来越大。在工业生产过程中,很多时候都需要对温度进行严格的监控,以使得生产能够顺利的进行,产品的质量才能够得到充分的保证。使用自动温度控制系统可以对生产环境的温度进行自动控制,保证生产的自动化、智能化能够顺利、安全进行,从而提高企业的生产效率。可以看出,如何做出快速,准确的温度测量系统具有重要的研究价值。传统的温度测量,都是从传感器引出线缆到达显示面板或主机才能测量温度的变化。对于一些腐蚀性强或密封性高,温度测量与主机距离远的环境,有线温度测量实现起来就比较困难。虽然随着技术的发展,温度测量器的出现解决了短距离温度的测量,但其仍然依赖于线缆。而且随着距离的增加,信号衰减很快。无法适用于远距离温度测量。当今在我们的生活中处处都能见到无线通信,短距离通信的有红外线、蓝牙,远距离通信的有手机,GPS等。可以说,二十一世纪将会是无线应用飞速发展的时代。无线数据传输广泛地运用在车辆监控、遥控、遥测、小型无线网络、无线抄表、门禁系统、小区传呼、工业数据采集系统、无线标签、身份识别、非接触RF智能卡、小型无线数据终端、安全防火系统、无线遥控系统、生物信号采集、水文气象监控、机器人控制、无线232数据通信、无线485/422数据通信、数字音频、数字图像传输等领域中。相对于蓝牙,手机等无线通信的应用,无线温度测量由于受被测量温度太高或太低的影响,直接导致电子元器件无法工作的原因 而使得其发展相对缓慢。随着嵌入式单片机技术的迅速兴起与蓬勃发展,其稳定、安全、高效、经济等优点十分突出,所以其应用也十分广泛。单片机已经无处不在、与我们生活息息相关,并且渗透到生活的方方面面。而单片机的特点是体积较小,也就是其集成特性,其内部结构是普通计算机系统的简化,增加一些外围电路,就能够组成一个完整的小系统,单片机具有很强的可扩展性。它具有和普通计算机类似的、强大的数据处理功能,通过使用一些科学的算法,可以获得很强的数据处理能力。所以单片机在工业中应用中,可以极大地提高工业设备的智能化、数据处理能力和处理效率,而且单片机无需占用很大的空间。嵌入式单片机这些优势都为无线测温系统的实现创造了良好的先决条件。而对于无线温度测量而言,只需在所需要温度测量的地方放置无线温度测量模块作为无线节点,在主机上就能显示被测位置的温度。当温度测量出现故障时,只需对无线测量节点进行故障排查,这样一来,也就能弥补了有线线路容易损坏,腐蚀,出现故障时又难以查找等缺陷,既增加了工作效率又降低了维护成本。1.2国内外发展状况温度测量系统是在嵌入式系统设计的基础上发展起来的。嵌入式系统虽然起源于微型计算机时代,但是微型计算机的体积、价位、可靠性,都无法满足广大对象对嵌入式系统的要求,因此,嵌入式系统必须走独立发展道路。这条道路就是芯片化道路。将计算机做在一个芯片上,从而开创了嵌入式系统独立发展的单片机时代。单片机诞生于二十世纪七十年代末,经历了SCM、MCU和SOC三大阶段。在现代化的工业生产中,电流、电压、温度、压力、流量、流速和开关量都是常用的主要被控参数。例如:在冶金工业、化工生产、电力工程、造纸行业、机械制造和食品加工等诸多领域中,人们都需要对各类加热炉、热处理炉、反应炉和锅炉中的温度进行检测和控制。采用MCS-51以及其改进的各种单片机来对温度进行控制,不仅具有控制方便、组态简单和灵活性大等优点,而且可以大幅度提高被控温度的技术指标,从而能够大大提高产品的质量和数量。因此,单片机对温度的控制问题是一个工业生产中经常会遇到的问题。同时温度也是生活中最常见的一个物理量,也是人们很关心的一个物理量,它与我们的生活息息相关,有 着十分重要的意义,在工业生产中,温度过高或过低会直接影响到产品的质量、对机械设备和控制系统中的各种元器件造成一定的损坏,严重的会影响到生产安全。在日常生活中,温度过高或过低同样会造成一些不良影响。在实际生产、生活等各个领域中,温度是环境因素的不可或缺的一部分,对温度及时精确的控制和检测显得尤为重要。比如,农业上土壤各个层面上的温度将会影响植物的生长;在医院的监护中也用到温度的测量。在工业中,料桶里外上限温度要求不一,以及热处理中工件各个部位的温度对工件形成后的性能至关重要等等。现代电子工业的飞速发展对自动测试的要求越来越高。采用单片机对温度进行控制,不仅具有控制方便和组态简单的优点,而且可以提高被控温度的技术指标。随着人们生活水平的不断提高,单片机控制无疑是人们追求的目标之一,它所给人带来的方便也是不可否定的,其中数字温度计就是一个典型的例子,但人们对它的要求越来越高,要为现代人工作、科研、生活、提供更好的更方便的设施就需要从数单片机技术入手,一切向着数字化控制,智能化控制方向发展。2系统硬件设计2.1系统总体方案设计本系统采用点对多点的形式,由多个无线节点和1个基站组成。由发射系统(节点)、接受系统(基站)组成。发射系统(节点)由数字温度传感器DS18B20和89C52单片机、射频收发芯片nRF905以及LED显示器组成。多个节点的传感器DS18B20采集数据,经单片机处理后,通过nRF905发送给接受系统(基站)。发射系统(节点)安装在需测温度的地方测量温度,通过无线方式把采集的数据传送到接受系统(基站)。无线节点工作在各个测温地点,进行温度数据采集和无线发送。基站和多个节点进行无线通信,nRF905接受发射的数据,处理后送LED显示器进行显示,同时能通过RS-232串口将数据发送给PC。系统总体方案设计原理如图2-1所示,图2-2,图2-3为发射/接受系统图。 图2-1系统总体方案设计原理图图2-2发射系统框图图2-3接受系统框图2.2单片机的选择通过比较,89C52单片机在价格和性能方面比较合适,因此,选择了89C52作为本设计的数据处理器。2.2.189C52单片机简介89C52是INTEL公司MCS-51系列单片机中基本的产品,它采用INTEL公司可靠的CHMOS工艺技术制造的高性能8位单片机,属于标准的MCS-51的HCMOS产品。它结合了HMOS的高速和高密度技术及CHMOS的低功耗特征,它基于标准的MCS-51单片机体系结构和指令系统,属于80C51增强型单片机版本,集成了时钟输出和向上或向下计数器等更多的功能,适合于类似马达控制等应用场合。89C52内置8位中央处理单元、256字节内部数据存储器RAM、8k片内程序存储 器(ROM)32个双向输入/输出(I/O)口、3个16位定时/计数器和5个两级中断结构,一个全双工串行通信口,片内时钟振荡电路。此外,89C52还可工作于低功耗模式,可通过两种软件选择空闲和掉电模式。在空闲模式下冻结CPU而RAM定时器、串行口和中断系统维持其功能。掉电模式下,保存RAM数据,时钟振荡停止,同时停止芯片内其它功能。89C52有PDIP(40pin)和PLCC(44pin)两种封装形式。2.2.2主要功能特性1)标准MCS-51内核和指令系统2)32个双向I/O口3)3个16位可编程定时/计数器4)向上或向下定时计数器5)全双工串行通信口6)空闲和掉电节省模式7)片内8KROM(可扩充64KB外部存储器)8)5.0V工作电压9)布尔处理器10)4层优先级中断结构11)兼容TTL和CMOS逻辑电平12)改进型快速编程脉冲算法2.3数字式温度传感器DS18B20芯片2.3.1DS18B20芯片简介DS18B20是美国DALLAS公司推出的智能化数字式温度传感器,全部传感元件及转换电路集成在形如一个三极管的集成电路内。如图2-4所示。DS18B20引脚定义:(1)GND为电源地;(2)DQ为数字信号输入/输出端;(3)VDD为外接供电电源输入端(在寄生电源接线方式时接地)。 图2-4DS18B20引脚图与其它温度传感器相比,DS18B20具有以下技术特性:(1)具有独特的单总线接口方式,DS18B20在与微处理器连接时仅需要一条I/O口线即可实现微处理器与DS18B20的双向通讯。(2)测温范围-55℃~+125℃,固有测温分辨率0.5℃。(3)支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定,实现多点测温。(4)工作电源:3-5V/DC。(5)在使用中不需要任何外围元件。(6)测量结果以9-12位数字量方式串行传送。(7)适用于DN15-25,DN40-DN250各种介质工业管道和狭小空间设备测温。(8)标准安装螺纹M10X1,M12X1.5,G1/2任选。(9)PVC电缆直接出线或德式球型接线盒出线,便于与其它电器设备连接。(10)用户可自行设定非易失温度报警上下限TH和TL,DS18B20在完成温度转换后,所测得的温度值将自动与贮存在TH和TL内的触发值相比较,如果测温结果高于TH或低于TL,DS18B20内部的警告标志就会被置位,表示温度值超出了测量范围,同时还有警报搜索命令可以识别出温度超限的DS18B20。因为它是数字输出,而且只占用一个I/O端口,所以它特别适合于微处理器控制的各种温度测控系统,避免了模拟温度传感器与微处理器接口时需要的A/D转换和较复杂的外围电路。缩小了系统的体积,提高了系统的可靠性。2.3.2DS18B20的内部结构DS18B20内部结构主要有四部分组成:64位光刻ROM,温度传感器,非挥 发的温度报警触发器TH和TL,配置寄存器。内部结构如图2-5所示。图2-5内部结构框图DS18B20温度传感器的存储器:DS18B20温度传感器的内部存储器包括一个高速暂存RAM和一个非易失性的可电擦除的E2RAM,后者存放高温度和低温度触发器TH、TL和结构寄存器。暂存存储器包含了8个连续字节,前两个字节是测得的温度信息,第一个字节的内容是温度的低八位,第二个字节是温度的高八位。第三个和第四个字节是TH、TL的易失性拷贝,第五个字节是结构寄存器的易失性拷贝,这三个字节的内容在每一次上电复位时被刷新。第六、七、八个字节用于内部计算。第九个字节是冗余检验字节。低五位一直都是1,TM是测试模式位,用于设置DS18B20在工作模式还是在测试模式。在DS18B20出厂时该位被设置为0。R1和R0用来设置分辨率,如下表2-1所示:(DS18B20出厂时被设置为12位)表2-1分辨率设置R1RO分辨率温度最大转换时间009位96.75ms0110位187.5ms1011位375ms1112位750ms根据DS18B20的通讯协议,主机控制DS18B20完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位,复位成功后发送一条ROM指令,最后发送RAM指令,这样才能对DS18B20进行预定的操作。复位要求主CPU 将数据线下拉500微秒,然后释放,DS18B20收到信号后等待16~60微秒左右,后发出60~240微秒的存在低脉冲,主CPU收到此信号表示复位成功。在硬件上,DS18B20与单片机的连接有两种方法,一种是Vcc接外部电源,GND接地,I/O与单片机的I/O线相连;另一种是用寄生电源供电,此时UDD、GND接地,I/O接单片机I/O。无论是内部寄生电源还是外部供电,I/O口线要接5KΩ左右的上拉电阻。DS18B20有六条控制命令,如表2-2所示:表2-2DS18B20有六条控制命令指   令约定代码操     作   说     明温度转换44H启动DS18B20进行温度转换读暂存器BEH读暂存器9个字节内容写暂存器4EH将数据写入暂存器的TH、TL字节复制暂存器48H把暂存器的TH、TL字节写到E2RAM中重新调E2RAMB8H把E2RAM中的TH、TL字节写到暂存器TH、TL字节读电源供电方式B4H启动DS18B20发送电源供电方式的信号给主CPU2.3.3DS18B20测温原理DS18B20的读写时序和测温原理与DS1820相同,只是得到的温度值的位数因分辨率不同而不同,且温度转换时的延时时间由2s减为750ms。DS18B20测温原理如图2-6所示。图中低温度系数晶振的振荡频率受温度影响很小,用于产生固定频率的脉冲信号送给计数器1。高温度系数晶振随温度变化其振荡率明显改变,所产生的信号作为计数器2的脉冲输入。计数器1和温度寄存器被预置在-55℃所对应的一个基数值。计数器1对低温度系数晶振产生的脉冲信号进行减法计数,当计数器1的预置值减到0时,温度寄存器的值将加1,计数器1的预置将重新被装入,计数器1重新开始对低温度系数晶振产生的脉冲信号进行计数,如此循环直到计数器2计数到0时,停止温度寄存器值的累加,此时温度寄存器中的数值即为所测温度。图中的斜率累加器用于补偿和修正测温过程中的非线性,其输出用于修正计数器1的预置值。 图2-6DS18B20测温原理DS18B20有4个主要的数据部件:(1)光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列码。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身的序列号,最后8位是前面56位的循环冗余校验码(CRC=X8+X5+X4+1)。光刻ROM的作用是使每一个DS18B20都各不相同,这样就可以实现一根总线上挂接多个DS18B20的目的。(2)DS18B20中的温度传感器可完成对温度的测量,以12位转化为例:用16位符号扩展的二进制补码读数形式提供,以0.0625℃/LSB形式表达,其中S为符号位。2.3.4DS18B20的封闭和供电方式DS18B20是DS1820的升级产品,一般封装为TO-92,比DS1820的PR-35封装更小。DS18B20只有三根外部引线:单线数据传输口DQ,共用地线GND,外供电源线VDD。DS18B20有两种供电方式:一种为数据线供电方式(即寄生电源供电方式),此时VDD接地,它是通过内部电容在空闲时从数据线获取能量,来完成温度转换,完成温度转换的时间较长。为了保证在有效的时钟周期内,提供足够的电流,这种情况下,用一个MOSFET管和单片机的一个I/O口来完成对DS18B20总线的上拉。另一种是外部供电方式(VDD接+5V),完成温度测量的时间较短。当使用数据总线寄生供电时,供电端必须接地,同时总线口在空闲的时候必须保持高电平,以便对传感器充电。但当所测温度超过100℃时,DS18B20的漏电流增大, 传感器从I/O线上获取的电流不足以维持DS18B20通讯所需的电流,此时只能选用外部供电方式。比较而言,寄生电源方式少用一根导线,但它完成温度测量所需的时间较长,而外部电源方式测量速度则要快些。寄生电源方式下,DS18B20的VDD端和GND端都接地,只用一根单总线和主机通信及获取电源。单总线上接4.7K的上拉电阻,和DS18B20芯片的寄生电容形成充放电电路;外接电源方式下,DS18B20的VDD端外接一个+3V-+5V电源,GND端接地。可见寄生电源方式可以省掉一根电源线,大大降低了布线的成本,但是当总线上节点较多且同时进行温度转换时容易造成供电不足且所需的转换时间较长。外接电源方式稳定可靠,测量速度较快。所以本系统采用外接电源供电方式。2.4无线收发模块nRF905nRF905可以自动完成处理字头和CRC(循环冗余码校验)的工作,可由片内硬件自动完成曼切斯特编码/解码,使用SPI接口与微控制器通信,配置非常方便,其功耗非常低,因此本系统采用nRF905作为无线收发器件。2.4.1nRF905芯片简介nRF905单片无线收发器是挪威Nordic公司推出的单片射频发射器芯片,工作电压为1.9-3.6V,32引脚QFN封装(5mm×5mm),工作于433/868/915MHz3个ISM频道。nRF905单片无线收发器工作由一个完全集成的频率调制器,一个带解调器的接收器,一个功率放大器,一个晶体震荡器和一个调节器组成。Shockburst工作模式的特点是自动产生前导码和CRC,可以很容易通过SPI接口进行编程配置。如图2-7为nRF905的内部结构。特点:真正的单片低功耗ShockBurst工作模式  工作电源电压范围1.9—3.6V  多通道工作—ETSI/FCC兼容  通道切换时间  <650us极少的材料消耗  无需外部SAW滤波器输出功率可调至10dBm  传输前监听的载波检测协议   当正确的数据包被接收或发送时有数据准备就绪信号输出  侦测接收的数据包当地址正确输出地址匹配信号应用: 无线数据通讯家庭自动化无线遥控报警及安全系统监测等领域图2-7NRF905内部结构图2.4.2工作模式nRF905采用Nordic公司的VLSIShockBurst技术。ShockBurst技术使nRF905能够提供高速的数据传输,而不需要昂贵的高速MCU来进行数据处理/时钟覆盖。通过将与RF协议有关的高速信号处理放到芯片内,nRF905提供给应用的微控制器一个SPI接口,速率由微控制器自己设定的接口速度决定。nRF905通过ShockBurst工作模式在RF以最大速率进行连接时降低数字应用部分的速度来降低在应用中的平均电流消耗。在ShockBurstRX模式中,地址匹配(AM)和数据准备就绪(DR)信号通知MCU一个有效的地址和数据包已经各自接收完成。在ShockBurstTX模式中,nRF905自动产生前导码和CRC校验码,数据准备就绪(DR)信号通知MCU数据传输已经完成。总之,这意味着降低MCU的存储器需求也就是说降低MCU成本,又同时缩短软件开发时间。nRF905有两种工作模式和两种节能模式。两种工作模式是ShockBurstTX模 式和ShockBurstRX模式,两种节能模式分别是掉电模式和STANDBY模式。nRF905的工作模式由TRX-CE、TX-EN、和PWR-UP三个引脚决定,见表2-3。表2-3nRF905工作模式PWR_UPTRX_CETX_EN工作模式0XX掉电和SPI编程10XStandby和SPI编程110ShockBurstRX111ShockBurstTX1)典型ShockBurstTX模式:①当应用MCU有遥控数据节点时,接收节点的地址TX-address和有效数据TX-payload通过SPI接口传送给nRF905应用协议或MCU设置接口速度;②MCU设置TRX_CE、TX_EN为高来激活nRF905ShockBurst传输;③nRF905ShockBurst:无线系统自动上电  数据包完成(加前导码和CRC校验码)  数据包发送(100kbps,GFSK,曼切斯特编码)④如果AUTO_RETRAN被设置为高nRF905将连续地发送数据包直到TRX_CE被设置为低;⑤当TRX_CE被设置为低时,nRF905结束数据传输并自动进入standby模式。ShockBurst工作模式确保一个传输包发送开始后,总是能够完成,不管在发送过程中TRX-CE,TX-EN如何被设置。当发送结束后,新的模式被激活。2)典型ShockBurstRX模式①通过设置TRX_CE高,TX_EN低来选择ShockBurstRX模式;②650us以后,nRF905监测空中的信息;③当nRF905发现和接收频率相同的载波时,载波检测CD被置高;④当nRF905接收到有效的地址时,地址匹配AM被置高; ⑤当nRF905接收到有效的数据包(CRC校验正确)时,nRF905去掉前导码、地址和CRC位,数据准备就绪(DR)被置高;⑥MCU设置TRX_CE低,进入standby模式低电流模式;⑦MCU可以以合适的速率通过SPI接口读出有效数据;⑧当所有的有效数据被读出后,nRF905将AM和DR置低;⑨nRF905将准备进入ShockBurstRX、ShockBurstTX或Powerdown模式。如果在引入数据当中TRX-CE或TX-EN的状态改变,nRF905将立刻改变模式,并且数据包丢失。尽管如此,如果MCU已经感觉到AM信号,MCU就知道nRF905正在接收数据,然后决定是等待DR信号还是改变模式。3)掉电模式在掉电模式中,nRF905被禁止,电流消耗最小,典型值低于2.5uA。当进入这种模式时,nRF905是不活动的状态。这时候平均电流消耗最小,电池使用寿命最长。在掉电模式中,配置字的内容保持不变。4)STANDBY模式Standby模式在保持电流消耗最小的同时保证最短的ShockBurstRX、ShockBurstTX的启动时间。当进入这种模式时,一部分晶体振荡器是活动的。电流消耗取决于晶体振荡器频率,如:当频率为4MHZ时,IDD=12uA;当频率为20MHZ时,IDD=46uA。如果uPCLK(Pin3)被使能,电流消耗将增加。并且取决于负载电容和频率。在此模式中,配置字的内容保持不变。2.4.3器件配置nRF905的所有配置都通过SPI接口进行。SPI接口由5个寄存器组成,一条SPI指令用来决定进行什么操作。SPI接口只有在掉电模式和Standby模式是激活的。1)状态寄存器(Status-Register)寄存器包含数据就绪DR和地址匹配AM状态。2)RF配置寄存器(RF-ConfigurationRegister)寄存器包含收发器的频率、输出功率等配置信息。3)发送地址(TX-Address)寄存器包含目标器件地址,字节长度由配置寄存器设置。4)发送有效数据(TX-Payload)寄存器包含发送的有效ShockBurst数据包数据,字节长度由配置寄存器设置。 5)接收有效数据(RX-Payload)寄存器包含接收到的有效ShockBurst数据包数据,字节长度由配置寄存器设置。在寄存器中的有效数据由数据准备就绪DR指示。2.4.4接口1)模式控制接口:该接口由PWR_UP、TRX_CE、TX_EN组成控制由nRF905组成的高频头的四种工作模式:掉电和SPI编程模式;待机和SPI编程模式;发射模式;接收模式。2)SPI接口:SPI接口由CSN、SCK、MOSI以及MISO组成。在配置模式下单片机通过SPI接口配置高频头的工作参数;在发射/接收模式下单片机SPI接口发送和接收数据。3)状态输出接口:提供载波检测输出CD,地址匹配输出AM,数据就绪输出DR。2.4.5NRF905与单片机的连接系统硬件电路是以单片机和nRF905为核心元件,由单片机的I/O端口分别控制nRF905的状态接口,模式接口和SPI接口。如图2-8所示图2-8nRF905与单片机连接图根据89C52的特点和nRF905的接口设计要求,89C52的P2.4、P2.5、P2.6分别和nRF905的PWR-UP、TRX-CE、TX-EN连接实现对nRF905的工作模式控制。 P3.5接nRF905的CD,由此判断nRF905是否检测到载波;P3.2接nRF905的AM口,由此判断发送方的发送目的地址是否与本机地址相同;外部中断1接nRF905的DR口,由此判断收发数据是否完成;nRF905的SPI端口接单片机的SPI对应端口,实现对nRF905的工作配置和数据传输。nRF905的所有配置是通过SPI接口完成的。SPI对外由SCK、MISO、MOSI、CSN4个引脚组成的,对应5个内置寄存器和1个SPI指令集。5个内置寄存器分别是状态寄存、RF配置寄存器、发送地址寄存器、发送有效数据寄存器、接受有效数据寄存器。某个SPI指令的设置决定了相应的功能。只有当nRF905处于待机或掉电状态,SPI接口才工作。任何一条指令均从CSN的由高到低的转换开始。寄存器操作时,每次只能读写一个字节,或者先给出读写的开始字节地址,然后再进行读写操作。2.5LED数码显示器2.5.1LED显示器的结构与原理LED数码管显示器是由发光二极管按一定的结构组合起来的显示器件。在单片机应用系统中通常使用的是8段式LED数码管显示器,它有共阴极和共阳极两种,本系统用的是4位共阴数码管,如图2-9所示。图2-9LED4位共阴极数码管2.5.2LED数码管显示器的译码方式所谓译码方式是指由显示字符转换得到对应的字段码的方式。对于LED数码管显示器,通常译码方式有两种:硬件译码方式和软件译码方式。硬件译码方式硬件译码方式是指利用专门的硬件电路来实现显示字符到字段码的转换,这样的硬件电路有很多,比如Motorla公司生产的MC14495芯片就是其中的一种,MC14495是共阴极一位十六进制数-字段码转换芯片,能够输出用4 位二进制数表示形式的一位十六进制数的7位字段码,不带小数点。硬件译码时,要显示一个数字,只须送出这个数字的4位二进制编码即可,软件开销较小,但硬件线路复杂,需要增加硬件译码芯片,硬件造价相对较高。软件译码方式:软件译码方式就是编写软件译码程序,通过译码程序来得到要显示的字符的字段码。译码程序通常为查表程序,软件开销较大,但是硬件线路简单,在实际系统中经常用到。2.5.3LED数码管的显示方式LED数码管在显示时,通常有两种显示方式:静态显示方式和动态显示方式。本设计LED采用的是动态显示。1)LED静态显示LED静态显示时,其公共端直接接地(共阴极)或接电源(共阳极),各段选线分别与I/O接口线相连。要显示字符,直接在I/O线发送相应的字段码。静态显示结构简单,显示方便,要显示某个字符,直接在I/O线上发送相应的字段码,但一个数码管需要8根I/O线,如果数码管个数少,这时用起来方便,但如果数码管数目较多,这时要占用很多I/O线,所以当数码管数目较多时,往往采用动态显示方式。2)LED动态显示LED动态显示是将所有的数码管的段选线并接在一起,用一个I/O接口控制,公共端不是直接接地(共阴极)或电源(共阳极),而是通过相应的I/O接口线控制。动态显示所用的I/O接口信号线少,线路简单,但是软件开销大,需要CPU周期性地对它刷新,因此会占用CPU大量的时间。2.5.4LED驱动及硬件连接电路1)LED驱动器件ULN2003ULN2003是高耐压、大电流复合晶体管阵列,由七个硅NPN复合晶体管组成。ULN2003是大电流驱动阵列,多用于单片机、智能仪表、PLC、数字量输出卡等控制电路中。可直接驱动继电器等负载。ULN2003是高压大电流达林顿晶体管阵列系列产品,具有电流增益高、工作电压高、温度范围宽、带负载能力强等特点,适应于各类要求高速大功率驱动的系统。ULN2003引脚如图2-10所示。 图2-10ULN2003引脚图2)LED与驱动ULN2003及89C52单片机的连接如图2-11所示。图2-11LED硬件连接图2.6单元电路介绍2.6.1时钟发生器89C52芯片内部有一个高增益反相放大器,用于构成振荡器。反相放大器的输入端为XTAL1,输出端为XTAL2,两端跨接石英晶体及两个电容就可以构成稳定的自激振荡器。电容C3和C4通常取30pF左右,可稳定频率对振荡频率有微调作用。振荡脉冲频率范围为f=0-24MHZ。具体的电路如图2-12所示。 图2-12时钟电路图2.6.2复位电路RST引脚是复位输入端。复位信号是高电平有效,其有效时间应持续24个振荡周期以上。复位操作有上电自动复位和按键手动复位两种方式。系统上电运行后需要复位,复位电路虽然简单,但是它的作用非常重要,一个单片机系统能否正常运行,首先要检查是否复位成功。本系统采用的是上电自动复位。其电路如图2-13所示。图2-13复位电路图2.6.3电源电路本系统单片机的供电电源是由外接USB线供电。如图2-14为电源电路图。图2-14电源电路图2.7串行通信及RS-232总线2.7.1串行通信1)串行通信的概念 串行通信是指使用一条数据线,将数据一位一位地依次传输,每一位数据占据一个固定的时间长度。其只需要少数几条线就可以在系统间交换信息,特别使用于计算机与计算机、计算机与外设之间的远距离通信。2)串行通信的数据传送方式在串行通信中,数据通常是校验、偶校验、和无校验,由用户根据需要选定。在发送端和接收端之间进行传送,根据数据传送的方向,可以分成三种基本的传送形式:单工、全双工和半双工。单工形式的数据传送是单向的,只需要一根数据线。半双工形式的数据的传送是双向的,但任何时刻只能由其中的一方发送数据,另一方接受数据。半双工形式比单工形式灵活,但它的效率较低,由发送方式切换到接收方式所需要的时间大约为数个毫秒,这个时间延迟对时间较为敏感的系统是无法接受的。全双工形式下,采用了信道划分技术,避免了半双工形式的缺点,数据传送是双向的,且可以同时发送和接受数据。本系统采用了效率较高的全双工通信形式。3)串行通信的传送速率在串行通信中,用“波特率”来描述数据的传输速率。所谓波特率,即每秒钟传送的二进制位数,其单位为bps。它是衡量串行数据传输速度快慢的重要指标。接收方的波特率和发送方的波特率可以分别设置,但接收方的接受波特率必须与发送方的发送波特率相同。2.7.2RS-232串口通信典型地,串口用于ASCII码字符的传输。通信使用3根线完成:(1)地线,(2)发送,(3)接受。由于串口通信是异步的,端口能够在一根线上发送数据同时在另一根线上接受数据。其他线用于握手,但是不是必须的。串口通信最重要的参数是波特率、数据位、停止位、和奇偶校验。对于两个进行通信的端口,这些参数必须匹配:1.波特率:这是一个衡量通信速度的参数。它表示每秒钟传送的bit的个数。例如300波特表示每秒钟发送300个bit。当我们提到时钟周期时,我们就是指波特率。例如如果协议需要4800波特率,那么时钟是4800Hz。这意味着串口通信在数据线上的采样率为4800Hz。2.数据位:这是衡量通信中实际数据位的参数。当计算机发送一个信息包,实际的数据不会是8位的,标准的值是5、7和8位。如何设置取决于你想传送 的信息。比如,标准的ASCII码是0-127(7位)。扩展的ASCII码是0-255(8位)。如果数据使用简单的文本,那么每个数据包使用7位数据。每个包指一个字节,包括开始/停止位,数据位和奇偶校验位。由于实际数据位取决于通信协议的选取,术语“包”指任何通信的情况。3.停止位:用于表示单个包的最后一位,典型的值为1,1.5和2位。由于数据是传输线上定时的,并且每一个设备有其自己的时钟,很可能在通信中两台设备间出现了小小的不同步,因此停止位不仅仅是表示传输的结束,而且提供计算机校正时钟同步的机会。4.奇偶校验位:在串口通信中一种简单的检错方式,有四种检错方式:偶、奇、高和低。当然没有校验位也是可以的。对于奇偶校验的情况,串口会设置校验位,用一个值确保传输的数据有偶个或者奇个逻辑高位。例如,如果数据是011,那么对于偶校验校验位为0,保证逻辑高的位数是偶数个。如果是奇校验校验位为1,这样就有3个逻辑高位。高位和地位不真正的检查数据,简单置位逻辑高或者逻辑低校验。这样使得接受设备能够知道一个位的状态,有机会判断是否有噪声干扰了通信或者是否传输和接受数据是否不同步。2.8信号转换电路设计本系统串口部分,采用PL2303控制器作为USB/RS232双向转换器。该器件作为USB/RS232双向转换器,一方面从主机接受USB数据并将其转换为RS232信息流格式发送给外设;另一方面从RS232外设接受数据转换为USB数据格式传送回主机。这些由器件自动完成。2.8.1PL2303(USB转RS232控制器)1.PL2303的简介PL2303是Prolific公司生产的一种高度集成的RS232-USB接口转换器,可以提供一个RS232全双工异步串行通信装置与USB功能接口便利连接的解决方案。其管脚如图2-15所示。该器件内置USB功能控制器、USB收发器、振荡器和带有全部调制解调器控制信号的UART,只需外接几个电容就可以实现USB信号与RS232信号的转换,能够方便的嵌入到各种设备。通过利用USB传输模式,利用庞大的数据缓冲器和自动流量控制,PL2303HX比传统的UART(通用异步收发器)端口能够实现更高的吞吐量,高达115200bps的波特率可用于更高性能的使用。 图2-15PL-2303管脚细节图2.产品特性(1)完全符合USB规范2.0(全速兼容)(2)内拥有USB1.1收发器,5V转3.3V的稳压器,12MHz的晶体振荡器(3)支持RS232这样的串行接口a.全双工发送器和接收器(TxD和RxD)b.六个调制解调器引脚(RTS,CTS,DTR,DSR,DCD和RI)c.内容可以为5,6,7或8个数据位d.支持自动握手各种模式e.一,一个半,或两个停止位f.奇偶错误,帧错误和串行中断检测g.可编程波特率从75bps到6Mbpsh.外部的RS232驱动下降控制i.独立的串行接口电源(4)宽广的流量控制机制a.自动与CTS/RTS流控制b.自动使用的XON/XOFF流量控制c.入站数据缓冲区溢出检测(5)可配置的512个字节双向数据缓冲器a.256字节的输出缓冲区和156字节的输入缓冲区b.128字节的输出缓冲区和384字节的输入缓冲区 (6)支持从远程输入相关调制信号进行唤醒功能(6)两个通用的I/O引脚(7)启动时可以将配置存储于外部的EPROM2.8.2USB接口USB接口部主要由三部分组成,分别是USB接头,USB供电和USB数据收发。1.USB接头提供USB的物理接口,通过USB线可与USB设备链接。2.USB供电整个USB转串口线不需要外接电源,直接使用USB供电即可。3.USB数据收发USB接口与USB转串口主芯片(PL2303)的通讯。2.8.3PL2303芯片与单片机的连接USB转串口主芯片(PL2303)是电路的核心部分,提供USB和串口的桥转换。它主要由三部分组成,分别是USB转串口主芯片PL2303、PL2303工作晶振和PL2303外围电路。如下图2-16为PL2303外围电路及与单片机连接图。图2-16PL2303芯片与单片机链接3系统软件设计3.1系统整体软件框图编程时采用模块化设计思想,系统中各主要功能模块均编成独立的函数在主程序中加以调用,程序主要由以下功能模块组成:上电初始化程序、无线收发程 序、数据包打包拆包程序、数据处理程序。发送端和接收端在上电后首先调用初始化程序,完成无线收发频率、工作模式、发射速率、内部寄存器的初始化配置;无线收发程序负责接受和发送经过打包后的数据;数据打包程序将采集数据根据通信协议加上帧头、地址、CRC校验字节,形成完整的数据包;数据拆包程序根据通信协议将接收到的数据包去掉帧头、地址信息、取出其中的有用数据,并检验数据包中的CRC字节以检验接收到的数据的正确性;数据处理程序对接收到的有效数据进行简单的计算机处理后将其通过串口发送到计算机,作进一步分析和处理。系统整体软件框图如下3-1,图3-2所示。图3-1为发射系统程序框图,图3-2为接受系统程序框图。图3-1发射系统主程序框图 图3-2接受系统主程序框图1、DS18B20温度采集流程DS18B20以单总线协议工作,单片机首先发送复位脉冲,使信号线DS18B20被复位,接着发送ROM操作命令,使DS18B20被激活进入接受内存访问命令状态。内存访问命令完成温度转换、读取等工作。系统以ROM命令和存储器命令的形式对DS18B20操作。ROM操作命令均为8位,命令代码分别为:读ROM(33H)、匹配ROM(55H)、跳过ROM(CCH)、搜索ROM(F0H)和告警搜索(ECH)命令。存储器操作命令为:写暂存存储器(4EH)、读暂存存储器(BEH)、复制暂存存储器(48H)、温度变换(44H)、重新调出EERAM(B8H)和读电源供电方式(B4H)命令。下图3-3为温度采集流程图。 图3-3温度采集流程图2、无线模块数据收发流程下面为典型的nRF905模块数据发送流程:(1)当微控制器要发送数据时,将接收机的地址和发送数据通过SPI接口传输给nRF905模块;(2)微控制器设置TRX_CE和TX_EN管脚同时置为高电平,启动发送端的nRF905模块为发送模式;(3)发送端的nRF905模块发送过程处理:a)射频寄存器开启;b)数据打包(加字头和CRC校验码);c)数据包发送;d)当数据包发送结束,将数据发送完成管脚(DR管脚)置为高电平;(4)如果AUTO_RETRAN被设置为高,nRF905模块将连续地发送数据包,直到TRX_CE被设置为低;(5)TRX_CE被设置为低时,nRF905模块数据包发送过程结束并回到待机模式。 89C52单片机控制nRF905模块数据发送流程图如图3-4所示。图3-4nRF905发送数据流程下面为典型的nRF905模块数据接收流程:(1)微控制器控制TRX_CE为高电平、TX_EN为低电平,nRF905模块进入接收模式;(2)650us后,nRF905模块监测空中的信息,等待接收数据;(3)当nRF905模块检测到与接收频率相同的载波时,设置载波检测管脚(CD管脚)为高电平;(4)当nRF905模块接收到有效的地址时,设置地址匹配管脚(AM管脚)为高电平;(5)当一个正确的数据包接收完毕后,nRF905模块自动去掉数据包的字头、地址和CRC校验码,然后将数据接受完成管脚置为高电平;(6)微控制器将TRX_CE设置为低电平;(7)微控制器通过SPI接口以一定的速率提取数据包中的有效接收数据;(8)当所有的有效数据接收完毕,微控制器控制nRF905模块数据接收完成 管脚(DR管脚)和地址匹配管脚(AM管脚)为低电平;(9)nRF905进入待机模式。89C52单片机控制nRF905模块数据接受流程图如图3-5所示。图3-5nRF905接受数据流程3.2软件调试工具单片机开发中需要有专门的编程软件,我们写的C语言源程序要变为CPU可以执行的机器码。机器汇编是通过汇编软件将源程序变为机器码,用于MCS-51单片机的汇编软件有早期的A51,随着单片机开发技术的不断发展,从普遍使用汇编语言到逐渐使用高级语言开发,单片机的开发软件也在不断发展,Keil软件是目前最流行开发MCS-51系列单片机的软件,这从近年来各仿真机厂商纷纷宣布全面支持Keil即可看出。Keil提供了包括C编译器、宏汇编、连接器、库管理和一个功能强大的仿真调试器等在内的完整开发方案,通过一个集成开发环境(uVision)将这些部份组合在一起。运行Keil软件需要Pentium或以上的CPU,16MB或更多RAM、20M以上空闲的硬盘空间、WIN98、NT、WIN2000、WINXP等操作系统。掌握这一软件的使用对于使用51系列单片机的爱好者来说是十分必要的,对于使用C语言编程的人,Keil几乎就是的唯一的选择。目前在国内你 只能买到Keil软件左设计所用的仿真机也很可能只支持该软件,即使不使用C语言而仅用汇编语言编程,其方便易用的集成环境、强大的软件仿真调试工具也会有事半功倍之效。KeilC51是美国KeilSoftware公司出品的51系列兼容单片机C语言软件开发系统,与汇编相比,C语言在功能上、结构性、可读性、可维护性上有明显的优势,因而易学易用。KeilC51软件提供丰富的库函数和功能强大的集成开发调试工具,全Windows界面。另外重要的一点,只要看一下编译后生成的汇编代码,就能体会到KeilC51生成的目标代码效率非常之高,多数语句生成的汇编代码很紧凑,容易理解。在开发大型软件时更能体现高级语言的优势。3.3程序编写安装完KeiluVision3软件后,启动KeiluVision3程序,就可以看到的KeiluVision3主界面。在KeilC51的操作环境下,创建程序分为以下步骤:1)创建一个项目,为Target1选择合适的CPU的型号,选择ATMEL公司的AT89C52芯片。2)新建并添加源程序文件当项目文件建立好后,就可以给项目文件加入程序文件了,KeiluVision3支持C语言程序,也支持汇编语言程序。创建源程序文件后先保存,且保存为“.C”文件,然后就可以把该文件添加到项目中去。3.4程序调试1.在编译之前选中生成.HEX文件如图3-6所示。 图3-6选择生成.HEX文件2.点编译,生成了HEX文件并且发现没错误,如图3-7所示。图3-7程序编译调试3.5上位机设计3.5.1VB的MSComm控件简介MSComm控件通过串行端口传输和接收的方法:1)事件驱动方式 事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者CarrierDetect(CD)或RequestToSend(RTS)线上一个字符到达或一个变化发生时。在这些情况下,可以利用MSComm控件的OnComm事件捕获并处理这些通讯事件。OnComm事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅CommEvent属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。2)查询方式查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。3.5.2MSComm控件的常用属性及参数设置MSComm控件有很多重要的属性,但首先必须熟悉几个属性:CommPort:设置并返回通讯端口号。Commport设置其打开端口号为1或2,3,4;SettingsSettings=“2400,N,8,1”,以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。2400,N,8,1即波特率为2400,无奇偶校验位,8个数据位,1个停止位;PortOpen:设置并返回通讯端口的状态。也可以打开和关闭端口。Input:从接收缓冲区返回和删除字符。Output:向传输缓冲区写一个字符串。Handshaking:Handshaking=0时无握手协议;InBufferSize:InBufferSize=1024,接收缓冲区中字节数;InputLen:InputLen=1.设置一次接收缓冲字节数;InputMode: InputMode=0表示数据通过Input属性以文本形式取回,为1表示数据通过Input属性以二进制形式取回;OutBufferSize:OutBufferSize=512,设置并返回传输缓冲区的大小;Rhtreshold:Rhtreshold=1,在发生接收时间后并触发OnComm事件之前,设置并返回的要接收的字节数。即接收缓冲区收到每一个字节都会使MSComm控件产生OnComm事件;Sthreshold:Sthreshold=0(缺省值),数据传输事件不会产生OnComm事件。若是、设置Sthreshold属性为1,当传输缓冲区完全空时,MSComm控件产生OnComm事件。3.5.3串口调试上位机与下位机的通信能否正常进行,可以通过PC机系统里的超级终端进行调试。超级终端,即计算机显示终端,是计算机系统的输入、输出设备。将接受系统通过USB连接到计算机,然后运行计算机的超级终端程序,选择正确的连接时使用的COM口,并对相应的COM口属性进行设置,如图3-8所示。图3-8COM口属性设置设置就绪之后,点击“呼叫”,便进行数据的传输显示,如图3-9所示。超级终端显示的数据每3位代表一个温度值,它是发射系统采集到的温度,通过无 线nRF905模块发送到接受系统,然后接受系统通过串口传输到上位机上进行显示的。由此,可以确定串口能够正常通信。图3-9超级终端显示温度数据 4系统总体测试4.1系统硬件调试把编译后的正确的发送/接受系统的程序分别下载到单片机中,然后给整个系统供电,多个发射系统(节点)能够准确的采集温度,并将采集到的数据通过无线模块nRF905发送到接受系统上进行循环显示。4.2上位机调试与显示结果图4-3上位机源程序 图4-4上位机结果显示 5结论本系统就是充分利用了DS18B20、89C52和NRF905。系统采用了DS18B20采集温度并通过89C52单片机控制数据通过LED显示,再经nRF905,实现的无线传输。DS18B20传感器精度高、互换性好;它直接将温度数据进行编码,可以只使用一根电缆传输温度数据,通信方便,传输距离远且抗干扰性好;与传统的温度传感器组成的多点测温系统相比可以节省大量电缆,而且系统得以简化,系统维护十分方便。nRF905通过SPI接口与89C52进行数据传送,通过ShockBurst收发模式进行无线数据发送,收发可靠,使用方便。系统结构采用模块化设计,主要有两大部分构成:第一部分为系统的温度数据采集,以一片nRF905无线收发芯片为核心,与多片单总线温度传感器DS18B20组成温度采集网络,完成多点温度数据采集和无线发送;第二部分为系统接受端,由一片nRF905无线收发芯片通过RS232接口模块,完成温度数据的无线接受和上传功能。实验表明,该系统充分说明了nRF905的性能良好,实用性强。该设计提供了一种行之有效的多路无线温度采集及传输的方法,经过多次使用发现其可移植性好,实用性强。但是,对该系统还存在一些问题需要解决。例如:反应速度慢、温度显示有些滞后、精度无法进一步提高和发射距离比较近等。任何方案都有一个不断改进和完善的过程,结合一些新技术的发展情况可以做一些改进。比如对系统性能进行多方面的测试,以进一步的改进系统性能。通过进一步的改进,我相信无线测温系统将具有更强的实用性。75 6致谢感谢我的导师姚爱琴,她严谨细致、一丝不苟的作风一直是我工作、学习中的榜样;他们循循善诱的教导和不拘一格的思路给予我无尽的启迪。感谢我的室友们,从遥远的家来到这个陌生的城市里,是你们和我共同维系着彼此之间兄弟般的感情,维系着寝室那份家的融洽。四年了,仿佛就在昨天。四年里,我们没有红过脸,没有吵过嘴,没有发生上大学前所担心的任何不开心的事情。只是今后大家就难得再聚在一起吃每年元旦那顿饭了吧,没关系,各奔前程,大家珍重。我们在一起的日子,我会记一辈子的。感谢我的爸爸妈妈,焉得谖草,言树之背,养育之恩,无以回报,你们永远健康快乐是我最大的心愿。在论文即将完成之际,我的心情无法平静,从开始进入课题到论文的顺利完成,有多少可敬的师长、同学、朋友给了我无言的帮助,在这里请接受我诚挚的谢意!75 参考文献[1]何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,2000年12版[2]胡汉才.单片机原理及系统设计[M].北京:清华大学出版社,1996年7月第一版[3]张洪润等编著.单片机应用设计[M].北京:北京航空航天大学出版社,2006年7月第一版[4]郑长征,毛哲,谢兆鸿.多个DSl8B20在粮库测温系统中的应用[J].自动化技术与应用,2006年2月5日[5]潘勇,孟庆斌.基于DSl8820的多点温度测量系统设计[J].电子测量技术,2008(9):91—93[6]谢维成,杨加国.单片机原理与应用及89C52程序设计[M].北京:清华大学出版社,2006:35-38[7]杨光松,基于NRF905的无线温度数据采集系统[J].微计算机信息,2008年22期[8]焦传海,基于nrf9E5和DS18B20的无线测温系统设计[J].今日电子,2007年第8期[9]秦芹,一种基于DS18B20的温度采集新方案[J].电子技术,2010年第10期[10]陈志根,变电站无线测温系统的应用研究[J].电力技术,2010第3期[11]李倩,基于AT89LV52和CC1000的无线测温系统的设计[J].中国科技信息,2010年第10期[12]戴佳,戴卫恒51单片机C语言应用程序设计实例精讲[M].北京:电子工业出版社,2006[13]周明德,微机原理及应用[M].北京:清华大学出版社,199175 附录附录1由于发射系统(节点)的电路图与接受系统(基站)的电路很相似,故在此仅给出发射系统(节点)的电路设计图。75 附录2905发送程序:T905-send.C#include#include#defineucharunsignedchar#defineuintunsignedint#include#defineucharunsignedchar#defineuintunsignedint#defineWC0x00//写配置寄存器命令#defineRC0x10//读配置寄存器命令#defineWTP0x20//写发送有效数据命令#defineRTP0x21//读发送有效数据命令#defineWTA0x22//写发送地址命令#defineRTA0x23//读发送地址命令#defineRRP0x24//读发送有效数据命令unsignedcharcodetab[]={0Xeb,0X88,0Xb3,0Xba,0Xd8,0X7a,0X7b,0Xa8,0Xfb,0Xfa};ucharcodetab1[]={0Xef,0X8c,0Xb7,0Xbe,0Xdc,0X7e,0X7f,0Xac,0Xff,0Xfe};voiddelay2(unsignedcharx){unsignedchara,b;for(a=0;a<25;a++){for(b=x;b>0;b--);}}/****************************************************************************/typedefstructRFConfig{75 ucharn;ucharbuf[10];}RFConfig;codeRFConfigRxTxConf={10,0x01,0x0c,0x44,0x20,0x20,0xcc,0xcc,0xcc,0xcc,0x58};//ThecontentofthisstructisnRF905"sinitializedata.//CH_NO=1;433MHZ;NormalOpration,NoRetrans;RX,TXAddressis4Bytes//RXTXPayloadWidthis32Bytes;DisableExternClock;Fosc=16MHZ//8BitsCRCAndenable/****************************************************************************/uchardataTxBuf[32]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};/****************************************************************************/ucharbdataDATA_BUF;sbitflag=DATA_BUF^7;sbitflag1=DATA_BUF^0;/****************************************************************************/sbitTX_EN=P2^6;sbitTRX_CE=P2^5;sbitPWR_UP=P2^4;sbitMISO=P2^3;sbitMOSI=P2^2;sbitSCK=P2^1;75 sbitCSN=P2^0;sbitAM=P3^2;sbitDR=P3^3;sbitCD=P3^5;/****************************************************************************/voidInitIO(void);//初始化IO口voidInituart(void);//初始化232uartvoidConfig905(void);//配置nRF905模块voidSetTxMode(void);//置nRF905为发送模式voidTxPacket(void);//nRF905发送数据voidSpiWrite(uchar);//向nRF905写数据voidDelay(ucharn);//Delay100usvoidTxData(ucharx);//Sendkey_valuetoCRTdisplay/****************************************************************************/voiddisp(){P1=0X02;P0=tab[TxBuf[2]];delay2(20);P1=0X04;P0=tab1[TxBuf[1]];delay2(20);P1=0X08;P0=tab[TxBuf[0]];delay2(20);75 P1=0X00;P0=0xff;}/****************************************************************************/voidmain(void){InitIO();//初始化IO口Config905();//配置nRF905模块ow_reset();//总线复位delay1(5);write_byte(0xcc);//发命令write_byte(0x44);//发转换命令bufferdatawhile(1){work_temp(read_temp());//处理温度数据TxBuf[0]=display[0];TxBuf[1]=display[1];TxBuf[2]=display[2];SetTxMode();//置发送模式TxPacket();disp();}}/****************************************************************************///functionInitIO();/****************************************************************************/75 voidInitIO(void){P0=0x0f;//ledlightCSN=1;//Spi停止SCK=0;//Spi时钟线初始化高DR=1;//初始化DR输入AM=1;//初始化AM输入PWR_UP=1;//nRF905上电TRX_CE=0;//置nRF905待机模式TX_EN=0;//置接受模式}/*******************************************************************************************///functionInituart();/****************************************************************************///functionConfig905();/****************************************************************************/voidConfig905(void){uchari;CSN=0;//使能SpiSpiWrite(WC);//写配置命令for(i=0;i=650us)}/****************************************************************************/reg52.h/*--------------------------------------------------------------------------REG52.HHeaderfileforgeneric80C52and80C32microcontroller.Copyright(c)1988-2002KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved.--------------------------------------------------------------------------*/75 #ifndef__REG52_H__#define__REG52_H__/*BYTERegisters*/sfrP0=0x80;sfrP1=0x90;sfrP2=0xA0;sfrP3=0xB0;sfrPSW=0xD0;sfrACC=0xE0;sfrB=0xF0;sfrSP=0x81;sfrDPL=0x82;sfrDPH=0x83;sfrPCON=0x87;sfrTCON=0x88;sfrTMOD=0x89;sfrTL0=0x8A;sfrTL1=0x8B;sfrTH0=0x8C;sfrTH1=0x8D;sfrIE=0xA8;sfrIP=0xB8;sfrSCON=0x98;sfrSBUF=0x99;/*8052Extensions*/sfrT2CON=0xC8;sfrRCAP2L=0xCA;sfrRCAP2H=0xCB;75 sfrTL2=0xCC;sfrTH2=0xCD;/*BITRegisters*//*PSW*/sbitCY=PSW^7;sbitAC=PSW^6;sbitF0=PSW^5;sbitRS1=PSW^4;sbitRS0=PSW^3;sbitOV=PSW^2;sbitP=PSW^0;//8052only/*TCON*/sbitTF1=TCON^7;sbitTR1=TCON^6;sbitTF0=TCON^5;sbitTR0=TCON^4;sbitIE1=TCON^3;sbitIT1=TCON^2;sbitIE0=TCON^1;sbitIT0=TCON^0;/*IE*/sbitEA=IE^7;sbitET2=IE^5;//8052onlysbitES=IE^4;sbitET1=IE^3;sbitEX1=IE^2;75 sbitET0=IE^1;sbitEX0=IE^0;/*IP*/sbitPT2=IP^5;sbitPS=IP^4;sbitPT1=IP^3;sbitPX1=IP^2;sbitPT0=IP^1;sbitPX0=IP^0;/*P3*/sbitRD=P3^7;sbitWR=P3^6;sbitT1=P3^5;sbitT0=P3^4;sbitINT1=P3^3;sbitINT0=P3^2;sbitTXD=P3^1;sbitRXD=P3^0;/*SCON*/sbitSM0=SCON^7;sbitSM1=SCON^6;sbitSM2=SCON^5;sbitREN=SCON^4;sbitTB8=SCON^3;sbitRB8=SCON^2;sbitTI=SCON^1;sbitRI=SCON^0;75 /*P1*/sbitT2EX=P1^1;//8052onlysbitT2=P1^0;//8052only/*T2CON*/sbitTF2=T2CON^7;sbitEXF2=T2CON^6;sbitRCLK=T2CON^5;sbitTCLK=T2CON^4;sbitEXEN2=T2CON^3;sbitTR2=T2CON^2;sbitC_T2=T2CON^1;sbitCP_RL2=T2CON^0;#endifIntrins.h/*--------------------------------------------------------------------------INTRINS.HIntrinsicfunctionsforC51.Copyright(c)1988-2004KeilElektronikGmbHandKeilSoftware,Inc.Allrightsreserved.--------------------------------------------------------------------------*/#ifndef__INTRINS_H__#define__INTRINS_H__75 externvoid_nop_(void);externbit_testbit_(bit);externunsignedchar_cror_(unsignedchar,unsignedchar);externunsignedint_iror_(unsignedint,unsignedchar);externunsignedlong_lror_(unsignedlong,unsignedchar);externunsignedchar_crol_(unsignedchar,unsignedchar);externunsignedint_irol_(unsignedint,unsignedchar);externunsignedlong_lrol_(unsignedlong,unsignedchar);externunsignedchar_chkfloat_(float);externvoid_push_(unsignedchar_sfr);externvoid_pop_(unsignedchar_sfr);#endifDS18B20.h#defineuucharunsignedchar#defineuuintunsignedintsbitDQ=P1^7;//温度输入口uuinth;uuinttemp;//**************温度小数部分用查表法***********//uucharcodeditab[16]={0x00,0x01,0x01,0x02,0x03,0x03,0x04,0x04,0x05,0x06,0x06,0x07,0x08,0x08,0x09,0x09};//uucharcodedis_7[12]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff,0xbf};75 //共阳LED段码表"0""1""2""3""4""5""6""7""8""9""不亮""-"uucharcodedis_8[12]={0x40,0x79,0x24,0x30,0x19,0x12,0x02,0x78,0x00,0x10,0xFF,0x3F};//带小数点共阴LED段码表"0""1""2""3""4""5""6""7""8""9""不亮""-"uuchardatatemp_data[2]={0x00,0x00};//读出温度暂放uuchardatadisplay[5]={0x00,0x00,0x00,0x00,0x00};//显示单元数据,共4个数据和一个运算暂用/*****************11us延时函数*************************/voiddelay1(uuintt){for(;t>0;t--);}/****************显示扫描函数***************************/scan(){//4位LED扫描控制P0=dis_7[display[0]];//数据显示P2=0X00;//位选delay1(300);P0=dis_8[display[1]];//小数点显示P2=0X01;delay1(300);P0=dis_7[display[2]];//数据显示P2=0X02;//位选delay1(300);75 P0=dis_7[display[3]];//数据显示P2=0X03;//位选delay1(300);}/****************DS18B20复位函数************************/ow_reset(void){charpresence=1;while(presence){while(presence){DQ=1;_nop_();_nop_();//从高拉倒低DQ=0;delay1(50);//550usDQ=1;delay1(6);//66uspresence=DQ;//presence=0复位成功,继续下一步}delay1(45);//延时500uspresence=~DQ;}DQ=1;//拉高电平}/****************DS18B20写命令函数************************///向1-WIRE总线上写1个字节voidwrite_byte(uucharval){uuchari;for(i=8;i>0;i--)75 {DQ=1;_nop_();_nop_();//从高拉倒低DQ=0;_nop_();_nop_();_nop_();_nop_();//5usDQ=val&0x01;//最低位移出delay1(6);//66usval=val/2;//右移1位}DQ=1;delay1(1);}///****************DS18B20读1字节函数************************///从总线上取1个字节uucharread_byte(void){uuchari;uucharvalue=0;for(i=8;i>0;i--){DQ=1;_nop_();_nop_();value>>=1;DQ=0;_nop_();_nop_();_nop_();_nop_();//4usDQ=1;_nop_();_nop_();_nop_();_nop_();//4usif(DQ)value|=0x80;delay1(6);//66us}DQ=1;return(value);}//75 /****************读出温度函数************************///uuintread_temp(){ow_reset();//总线复位delay1(200);write_byte(0xcc);//发命令write_byte(0x44);//发转换命令ow_reset();delay1(1);write_byte(0xcc);//发命令write_byte(0xbe);temp_data[0]=read_byte();//读温度值的第字节temp_data[1]=read_byte();//读温度值的高字节temp=temp_data[1];temp<<=8;temp=temp|temp_data[0];//两字节合成一个整型变量。returntemp;//返回温度值}///****************温度数据处理函数************************///二进制高字节的低半字节和低字节的高半字节组成一字节,这个//字节的二进制转换为十进制后,就是温度值的百、十、个位值,而剩//下的低字节的低半字节转化成十进制后,就是温度值的小数部分/********************************************************/work_temp(uuinttem){uucharn=0;if(tem>6348)//温度值正负判断75 {tem=65536-tem;n=1;}//负温度求补码,标志位置1display[4]=tem&0x0f;//取小数部分的值display[0]=ditab[display[4]];//存入小数部分显示值display[4]=tem>>4;//取中间八位,即整数部分的值display[3]=display[4]/100;//取百位数据暂存display[2]=display[4]/10%10;//取十位数据暂存DQ=display[4]/10%10;display[1]=display[4]%10;//取个位数据暂存/******************符号位显示判断**************************/if(!display[3]){display[3]=0x0a;//最高位为0时不显示if(!display[2]){display[2]=0x0a;//次高位为0时不显示}}if(n){display[3]=0x0b;}//负温度时最高位显示"-"}//905接受程序T905-recv.C/************************************************************************/#include#include#defineucharunsignedchar#defineuintunsignedint75 #defineWC0x00//写配置寄存器命令#defineRC0x10//读配置寄存器命令#defineWTP0x20//写发送有效数据命令#defineRTP0x21//读发送有效数据命令#defineWTA0x22//写发送地址命令#defineRTA0x23//读发送地址命令#defineRRP0x24//读接受有效数据命令unsignedcharcodetab[]={0Xeb,0X88,0Xb3,0Xba,0Xd8,0X7a,0X7b,0Xa8,0Xfb,0Xfa};ucharcodetab1[]={0Xef,0X8c,0Xb7,0Xbe,0Xdc,0X7e,0X7f,0Xac,0Xff,0Xfe};/************************************************************************/typedefstructRFConfig{ucharn;ucharbuf[10];}RFConfig;codeRFConfigRxTxConf={10,0x01,0x0c,0x44,0x20,0x20,0xcc,0xcc,0xcc,0xcc,0x58};/************************************************************************/uchardataRxBuf[32];/****************************************************************75 ********/ucharbdataDATA_BUF;sbitflag=DATA_BUF^7;sbitflag1=DATA_BUF^0;/************************************************************************/sbitTX_EN=P2^6;sbitTRX_CE=P2^5;sbitPWR_UP=P2^4;sbitMISO=P2^3;sbitMOSI=P2^2;sbitSCK=P2^1;sbitCSN=P2^0;sbitAM=P3^2;sbitDR=P3^3;sbitCD=P3^5;/************************************************************************/voidInitIO(void);//初始化IO口voidInituart(void);//initialize232uartvoidConfig905(void);//配置nRF905模块voidSetRxMode(void);//置nRF905接受模式voidRxPacket(void);//nRF905接收数据voidSpiWrite(uchar);//向nRF905写数据ucharSpiRead(void);//向nRF905读数据voidDelay(ucharn);//Delay100us75 voiddelay1(unsignedcharx){unsignedchara,b;for(a=0;a<50;a++){for(b=x;b>0;b--);}}/************************************************************************/voiddisp(){P1=0X02;P0=tab[RxBuf[2]];delay1(20);P1=0X04;P0=tab1[RxBuf[1]];delay1(20);P1=0X08;P0=tab[RxBuf[0]];delay1(20);P1=0X00;P0=0xff;}/****************************************************************75 ********/voidmain(void){TMOD=0x20;//设置定时器为工作方式2TH1=0xf3;//波特率1200TL1=0xf3;TR1=1;REN=1;SM0=0;SM1=1;PCON=0x00;InitIO();//初始化IOportConfig905();//配置nRF905模块Delay(500);//delayforledlight//ledcloseSetRxMode();//置nRF905接受模式while(1){if(DR)//If接收数据准备..{RxPacket();//...接收数据disp();SBUF=RxBuf[2]+0X30;while(!TI);TI=0;SBUF=RxBuf[1]+0X30;while(!TI);TI=0;SBUF=RxBuf[0]+0X30;while(!TI);75 TI=0;}}}/************************************************************************///functionInitIO();/************************************************************************/voidInitIO(void){CSN=1;//Spi停止SCK=0;//SpiclocklineinithighDR=1;//初始化DR输入AM=1;//初始化AM输入PWR_UP=1;//nRF905上电TRX_CE=0;//置nRF905待机模式TX_EN=0;//置接受模式}/************************************************************************///functionConfig905();/************************************************************************/voidConfig905(void){uchari;CSN=0;//Spi使能75 SpiWrite(WC);//写配置命令for(i=0;i=650us)}75 上位机程序:DimBUFAsStringDimshiAsIntegerDimgeAsIntegerDimdianAsStringDimyiAsDoublePrivateSubForm_Load()MSComm1.CommPort=3MSComm1.Settings="2400,n,8,1"MSComm1.InBufferCount=0"接受数据缓冲区清零MSComm1.InputMode=comInputModeText"文本方式MSComm1.RThreshold=6"接收6位数据则处理数据MSComm1.InputLen=0MSComm1.PortOpen=TrueEndSubPrivateSubMSComm1_OnComm()BUF=MSComm1.Inputshi=Val(Mid(BUF,1,1))ge=Val(Mid(BUF,2,1))dian=Val(Mid(BUF,3,1))yi=(shi*100+ge*10+dian)/10Label1.Caption=yiEndSub75 附录3英文原文StructureandfunctionoftheMCS-51seriesMCS-51isanameofapieceofone-chipcomputerserieswhichIntelCompanyproduces.Thiscompanyintroduced8top-gradeone-chipcomputersofMCS-51seriesin1980afterintroducing8one-chipcomputersofMCS-48seriesin1976.Itbelongtoalotofkindsthislineofone-chipcomputerthechipshave,suchas8051,8031,8751,80C51BH,80C31BH,etc.,theirbasiccomposition,basicperformanceandinstructionsystemareallthesame.8051dailyrepresentatives-51serialone-chipcomputers.Anone-chipcomputersystemismadeupofseveralfollowingparts:(1)Onemicroprocessorof8(CPU).(2)AtslicedatamemoryRAM(128B/256B),itusenotdeposittingnotcanreading/datathatwrite,suchasresultnotmiddleofoperation,finalresultanddatawantedtoshow,etc.(3)ProcedurememoryROM/EPROM(4KB/8KB),isusedtopreservetheprocedure,someinitialdataandforminslice.ButdoesnottakeROM/EPROMwithinsomeone-chipcomputers,suchas8031,8032,80C,etc..(4)Four8runsidebysideI/OinterfaceP0fourP3,eachmouthcanuseasintroduction,mayuseasexportingtoo.(5)Twotimer/counter,eachtimer/countermaysetupandcountintheway,usedtocounttotheexternalincident,cansetupintoatimingwaytoo,andcanaccordingtocountorresultoftimingrealizethecontrolofthecomputer.(6)Fivecutoffcuttingoffthecontrolsystemofthesource.(7)OneallduplexingserialI/OmouthofUART(universalasynchronousreceiver/transmitter(UART)),isitrealizeone-chipcomputerorone-chipcomputerandserialcommunicationofcomputertousefor.(8)Stretchoscillatorandclockproducecircuit,quartzcrystalfinelytuneelectriccapacityneedouter.Allowoscillationfrequencyas12megahertasnowatmost.Everytheabove-mentionedpartwasjoinedthroughtheinsidedatabus.Amongthem,CPUisacoreoftheone-chipcomputer,itisthecontrolofthecomputerandcommandcentre,madeupofsuchpartsasarithmeticunitandcontroller,etc..Thearithmeticunitcancarryon8personsofarithmeticoperationandunitALUoflogicoperationwhileincludingone,the1storingdevicetemporariliesof8,storingdevice2temporarily,8"saccumulation75 deviceACC,registerBandprocedurestateregisterPSW,etc.PersonwhoaccumulateACCcountby2inputendsenteredofcheckingetc.temporarilyasoneoperationoften,comefrompersonwhostore1operationisitisitmakeoperationtogoontocounttemporarily,operationresultandloopbackACCwithanotherone.Inaddition,ACCisoftenregardedasthetransferstationofdatatransmissionon8051inside.Thesameasgeneralmicroprocessor,itisthebusiestregister.HelprememberingthatagreeingwithAexpressesintheorder.Thecontrollerincludestheprocedurecounter,theorderisdepositted,theorderdecipher,theoscillatorandtimingcircuit,etc.Theprocedurecounterismadeupofcounterof8fortwo,amountsto16.Itisabyteaddresscounteroftheprocedureinfact,thecontentisthenextIAthatwillcarriedoutinPC.Thecontentwhichchangesitcanchangethedirectionthattheprocedurecarriesout.Shakethecircuitin8051one-chipcomputers,onlyneedouterquartzcrystalandfrequencytofinelytunetheelectriccapacity,itsfrequencyrangeisits12MHZof1.2MHZ.Thispulsesignal,as8051basicbeatsofworking,namelytheminimumunitoftime.8051isthesameasothercomputers,theworkinharmonyunderthecontrolofthebasicbeat,justlikeanorchestraaccordingtothebeatplaythatiscommanded.ThereareROM(procedurememory,canonlyread)andRAMin8051slices(datamemory,canisitcanwrite)twotoread,theyhaveeachindependentmemoryaddressspace,disposewaytobethesamewithgeneralmemoryofcomputer.Procedure8051memoryand8751sliceprocedurememorycapacity4KB,addressbeginfrom0000H,usedforpreservingtheprocedureandformconstant.Data8051-87518031ofmemorydatamemory128B,addressfalse00FH,useformiddleresulttodepositoperation,thedataarestoredtemporarilyandthedataarebufferedetc..InRAMofthis128B,thereisunitof32bytesesthatcanbeappointedasthejobregister,thisandgeneralmicroprocessorisdifferent,8051sliceRAMandjobregisterrankoneformationthesametoarrangethelocation.ItisnotverythesamethatthememoryofMCS-51seriesone-chipcomputerandgeneralcomputerdisposesthewayinaddition.Generalcomputerforfirstaddressspace,ROMandRAMcanarrangein75 differentspacewithintherangeofthisaddressatwill,namelytheaddressesofROMandRAM,withdistributingdifferentaddressspaceinaformation.Whilevisitingthememory,correspondingandonlyanaddressMemoryunit,canROM,itcanbeRAMtoo,andbyvisitingtheordersimilarly.ThiskindofmemorystructureiscalledthestructureofPrinceton.8051memoriesaredividedintoprocedurememoryspaceanddatamemoryspaceonthephysicsstructure,therearefourmemoryspacesinall:Theprocedurestoresinoneanddatamemoryspaceoutsidedatamemoryandoneinprocedurememoryspaceandoneoutsideone,thestructureformsofthiskindofproceduredeviceanddatamemoryseparatedformdatamemory,calledHarvardstructure.Butusetheanglefromusers,8051memoryaddressspaceisdividedintothreekinds:(1)Intheslice,arrangeblocksofFFFFH,0000Hoflocation,inunisonoutsidetheslice(use16addresses).(2)Thedatamemoryaddressspaceoutsideoneof64KB,theaddressisarrangedfrom0000H64KBFFFFH(with16addresses)tootothelocation.(3)Datamemoryaddressspaceof256B(use8addresses).Threeabove-mentionedmemoryspaceaddressesoverlap,fordistinguishinganddesigningtheordersymbolofdifferentdatatransmissionintheinstructionsystemof8051:CPUvisitslice,ROMorderspendMOVC,visitblockRAMorderusesMOVXoutsidetheslice,RAMorderusesMOVtovisitinslice.8051one-chipcomputerhavefour8walkabreastI/Oport,callP0,P1,P2andP3.Eachportis8accuratetwo-waymouths,accountsfor32pinsaltogether.EveryoneI/Olinecanbeusedasintroductionandexportedindependently.Eachportincludesalatch(namelyspecialfunctionregister),oneexportsthedriverandaintroductionbuffer.Makedatacanlatchwhenoutputting,datacanbufferwhenmakingintroduction,butfourfunctionofpasswaytheseself-same.Expandamongthesystemofmemoryoutsidehavingslice,fourportthesemayserveasaccuratetwo-waymouthofI/Oincommonuse.Expandamongthesystemofmemoryoutsidehavingslice,P2mouthseehigh8addressoff;P0mouthisatwo-waybus,sendtheintroductionof8lowaddressesanddata/exportintimesharingOutputgrade,P3ofmouth,P1ofP1,connectwithinsidehaveloadresistance75 ofdrawing,everyoneoftheycandrive4ModelLSTTLloadtooutput.Aswhileinputtingthemouth,anyTTLorNMOScircuitcandriveP1of8051one-chipcomputersasP3mouthinanormalway.Becausedrawresistanceonoutputgradeofthemhave,canopenawaycollectortooordrain-sourceresistanceisiturgetoopenaway,donotneedtohavetheresistanceofdrawingouterly.Mouthsareallaccuratetwo-waymouthstoo.Whentheconductisinput,mustwritethecorrespondingportlatchwith1first.Asto80C51one-chipcomputer,portcanonlyoffermilliampereofoutputelectriccurrents,isitoutputmouthgowhenurgingoneordinarybasingoftransistortoregardas,shouldcontactaresistanceamongtheportandtransistorbase,inordertotheelectricitywhilerestrainingthehighlevelfromexportingP1~P3Beingrestoredtothethroneistheoperationofinitializingofanone-chipcomputer.ItsmainfunctionistoturnPCinto0000Hinitially,maketheone-chipcomputerbegintoholdtheconductprocedurefromunit0000H.Exceptthattheonesthatenterthesystemareinitializednormally,asbecauseprocedureoperateitmakemistakesoroperatetherearen"tmistake,inordertoextricateoneselffromapredicament,needtobepressedandrestoredtothethronethekeyrestartingtoo.Itisaninputendwhichisrestoredtothethronethesignalin8051ChinaRSTpin.Restoretothethronesignalhighleveleffective,shouldsustain24shakecycle(namely2machinecycles)theaboveitseffectivetimes.If6offrequencyofutilizationbrillianttoshake,restoretothethronesignaldurationshouldexceed4delicatetofinishrestoringtothethroneandoperating.Producethelogicpictureofcircuitwhichisrestoredtothethronethesignal:Restoretothethronethecircuitandincludetwopartsoutsideinthechipentirely.Outsidethatcircuitproducetorestoretothethronesignal(RST)handovertoSchmitt"strigger,restoretothethronecircuitsampletooutput,SchmittoftriggerconstantlyineachS5P2,machineofcycleinhavingonemore,thenjustgotandrestoredtothethroneandoperatedthenecessarysignalinsidly.Restoretothethroneresistanceofcircuitgenerally,electriccapacityparametersuitablefor6brillianttoshake,canisitrestoretothethronesignalhighleveldurationgreaterthan2machinecyclestoguarantee.Beingrestoredtothethroneinthecircuitissimple,itsfunctionis75 veryimportant.Piecesofone-chipcomputersystemcouldnormalrunning,shouldfirstcheckitcanrestoretothethronenotsucceeding.Checkingandcanpopone"sheadandmonitorthepinwiththeoscillographtentatively,pushandisrestoredtothethronethekey,thewaveformthatobservesandhasenoughrangeisexported(instantaneous),canalsothroughisitrestoretothethronecircuitgroupholdingvaluecarryontheexperimenttochange.TheAT89C51isalow-power,high-performanceCMOS8-bitmicrocomputerwith4KbytesofFlashprogrammableanderasablereadonlymemory(PEROM).ThedeviceismanufacturedusingAtmel’shigh-densitynonvolatilememorytechnologyandiscompatiblewiththeindustry-standardMCS-51instructionsetandpinout.Theon-chipFlashallowstheprogrammemorytobereprogrammedin-systemorbyaconventionalnonvolatilememoryprogrammer.Bycombiningaversatile8-bitCPUwithFlashonamonolithicchip,theAtmelAT89C51isapowerfulmicrocomputerwhichprovidesahighly-flexibleandcost-effectivesolutiontomanyembeddedcontrolapplications.TheAT89C51providesthefollowingstandardfeatures:4KbytesofFlash,128bytesofRAM,32I/Olines,two16-bittimer/counters,afivevectortwo-levelinterruptarchitecture,afullduplexserialport,on-chiposcillatorandclockcircuitry.Inaddition,theAT89C51isdesignedwithstaticlogicforoperationdowntozerofrequencyandsupportstwosoftwareselectablepowersavingmodes.TheIdleModestopstheCPUwhileallowingtheRAM,timer/counters,serialportandinterruptsystemtocontinuefunctioning.ThePower-downModesavestheRAMcontentsbutfreezestheoscillatordisablingallotherchipfunctionsuntilthenexthardwarereset.IdleMode:Inidlemode,theCPUputsitselftosleepwhilealltheonchipperipheralsremainactive.Themodeisinvokedbysoftware.Thecontentoftheon-chipRAMandallthespecialfunctionsregistersremainunchangedduringthismode.Theidlemodecanbeterminatedbyanyenabledinterruptorbyahardwarereset.Itshouldbenotedthatwhenidleisterminatedbyahardwarereset,thedevicenormallyresumesprogram75 execution,fromwhereitleftoff,uptotwomachinecyclesbeforetheinternalresetalgorithmtakescontrol.On-chiphardwareinhibitsaccesstointernalRAMinthisevent,butaccesstotheportpinsisnotinhibited.ToeliminatethepossibilityofanunexpectedwritetoaportpinwhenIdleisterminatedbyreset,theinstructionfollowingtheonethatinvokesIdleshouldnotbeonethatwritestoaportpinortoexternalmemory.Power-downMode:Inthepower-downmode,theoscillatorisstopped,andtheinstructionthatinvokespower-downisthelastinstructionexecuted.Theon-chipRAMandSpecialFunctionRegistersretaintheirvaluesuntilthepower-downmodeisterminated.Theonlyexitfrompower-downisahardwarereset.ResetredefinestheSFRsbutdoesnotchangetheon-chipRAM.TheresetshouldnotbeactivatedbeforeVCCisrestoredtoitsnormaloperatinglevelandmustbeheldactivelongenoughtoallowtheoscillatortorestartandstabilize.ProgramMemoryLockBitsOnthechiparethreelockbitswhichcanbeleftunprogrammed(U)orcanbeprogrammed(P)toobtaintheadditionalfeatureslistedinthetablebelow.Whenlockbit1isprogrammed,thelogiclevelattheEApinissampledandlatchedduringreset.Ifthedeviceispoweredupwithoutareset,thelatchinitializestoarandomvalue,andholdsthatvalueuntilresetisactivated.ItisnecessarythatthelatchedvalueofEAbeinagreementwiththecurrentlogiclevelatthatpininorderforthedevicetofunctionproperly.附录4英文译文51系列单片机的功能和结构MCS-51单片机是一种单芯片电脑英特尔公司生产的一系列作品的名称。这家公司于1980年推出后,在1976年8引入单芯片的MCS-48系列电脑8高档的MCS-51系列单芯片电脑。它属于很多种这样的单芯片电脑线的芯片,如8051,8031,8751,80C51BH,80C31BH等,它们的基本组成,基本性能和指令系统都是一样的。每天的代表8051-51系列单芯片电脑。75 一个单芯片的计算机系统是由以下几部分组成:(1)8位(CPU)的微处理器。(2)在片数据存储器RAM(128B/256B),它不使用depositting不是可以读/写数据,如结果,而不是操作,最终结果和数据中要展示,等(3)程序存储器ROM/EPROM的(4KB/8KB),是用来保存的程序,一些初始数据和切片的形式。但是在一些不采取单芯片电脑的ROM/EPROM中,如8031,8032,80C条,等等。(4)4个8并排的I/O接口求解P0P3的运行四个方面,每口可以使用的介绍,也可以用作出口。 (5)2个定时器/计数器,每个定时器/计数器可设置和计数用来计数外部事件,可以设置成定时方式太多的方式,并可以根据计算结果的时间或实现控制计算机。(6)五切断切断源控制系统。(7)1所有双面串行I/O口的UART(通用异步接收器/发送器(UART)),是实现单芯片电脑或单芯片计算机和计算机的串行通信使用。(8)张力振荡器和时钟产生电路,石英晶体微调电能力的需要外。现在允许在12megahertas最多的振荡频率。每当上述部分加入了通过内部数据总线其中。,CPU是在一个芯片计算机的核心,它是计算机和指挥中心组成的算术单元和控制器等部分组成,控制,等等。算术单元可进行8算术运算和逻辑运算单元ALU的人士,而其中一位,18存储设备temporarilies,暂时储存装置28的积累设备ACC和寄存器B和程序状态寄存器PSW内等人谁积累行政协调计数2个输入端进入临时检查等为一体的运作通常情况下,由人来操作储存1谁是它是它使操作去数暂时经营成果和回送与另一个行政协调会。此外,行政协调往往被视为对8051内的数据传输中转站。一样通用的微处理器,它是最繁忙的寄存器。帮助回忆,与一个在该命令表示同意。该控制器包括程序计数器,顺序是depositted,解密的顺序,振荡器和定时电路等程序计数器是由8个柜台二,达16。这是一个字节地址计数器实际上程序,内容是下一个执行机构,将进行个人电脑的时候。从而改变它的内容可以改变方向,程序执行。在8051摇动的单芯片电脑的电路,只需要外部石英晶体频率微调电容,其频率范围为1.2MHz的其12MHz的。此脉冲信号,8051的工作时间,即最小单位的基本时序。8051是为其他计算机,并在8051片的RAM(数据存储器,可以是它可以写)二读,他们各自独立的内存地址空间,处理方式是与一般的电脑记忆体相同。8051和8751的程序存储器的存储容量为4KB的程序切片,地址从0000H开始,为维护过程中使用和形式不变。数据8051-875175 的内存数据存储器128B章8031,地址00FH,中间结果存入操作使用,数据存储和数据是暂时缓冲等。在此128B条内存,有32byteses,可以被任命为工作寄存器,这和通用的微处理器不同的是,8051片RAM和就业登记形成的同一职级一到单位安排的位置。这是不太相同的的MCS-51系列单芯片电脑和一般电脑记忆体中除了处置方式。秘书长的第一个地址空间,ROM和RAM的计算机可以安排在不同的空间内,在这个地址范围会,即ROM和RAM的地址,带分布在不同的地址空间的形成。在访问的内存,只有一个地址对应的内存单元,可以光盘,也可以内存,并通过访问顺序与此类似。这种内存结构是所谓的普林斯顿结构。8051记忆分为程序存储器空间和数据存储空间的物理结构划分,有四个内存空间,在所有:程序和数据存储在一个外部数据存储器的存储空间和一个在程序内存空间和一外一,结构构成本程序和数据存储设备的数据存储形式分离一种被称为哈佛结构。但使用从用户的角度,8051存储器地址空间被分成三种:(1)在片,安排FFFFH的区块,0000H地址以外的片异口同声地(使用16个地址)。(2)外部数据存储器地址空间的64KB的一,地址是从0000H的64KBFFFFH的(含16个地址)的位置安排也。(3)对256B的数据存储器(使用8个地址)的地址空间。上述三个重叠的内存空间地址区分和设计不同的数据传输中的8051指令系统秩序的象征:CPU的访问片,光盘订购花的MOVC,访问RAM块顺序使用片外的MOVX,内存使用MOV的订单访问片。8051芯片的电脑有4个8并行的I/O端口,呼叫为P0,P1,P2和P3的。每个端口是8精确的双向口,共占了32针。每一个I/O线可作为独立的引进和出口。每个端口包括一个锁存器(即特殊功能寄存器),一个出口驱动程序和引进缓冲区。使数据能锁存输出,数据可以缓冲时介绍,四通道,但这些自我相同的功能。扩大它们之间的内存外有片,这四个港口可作为准确的双向口常用的I/O系统。扩大它们之间的内存外有片系,P2口看到高8地址关闭;P0口是一个两路公交车,送8低的地址和数据介绍/分时输出中。输出级别,口小三,小一的P1,就可以与绘画里面有负载电阻,他们每个人能驱动4个LS型TTL负载输出。作为输入口时,所有TTL或NMOS电路可以驱动一个正常的方式8051-P3口的计算机芯片作为P1的。由于利用电阻输出,其中有品位,可以公开的方式收集太或漏源电阻它的冲动开路,不需要有绘画75 outerly阻力。嘴巴都是准确的双向口了。当输入的行为,必须编写相应的端口1的第一个闩锁。至于8051的单芯片计算机,端口只能提供毫安的输出电流,输出口是去当一个普通的晶体管,要求立足视,应联系,以港口之间和晶体管基极电阻,对电力同时,制止小一〜小三出口正在恢复王位的高层次是一个单芯片电脑初始化操作。其主要功能是把电脑最初为0000H,使单芯片计算机开始持有单位为0000H的行为过程。除了那些进入系统初始化正常,因为它因为过程操作失误或操作有没有错,为了自己摆脱困境,必须按下和恢复王位的关键重新启动了。这是一个输入端是恢复王位,在8051中国RST引脚信号。恢复王位的信号高电平有效,应维持24倍以上的有效动摇循环(即2个机器周期)。如果动摇辉煌的利用,恢复王位信号的持续时间应该超过4微妙完成恢复了王位和工作频率6。生产的电路恢复到宝座信号逻辑图还原到宝座,包括两部分电路在芯片完全超出。以外的电路生产恢复到施密特的触发了王位信号(RST)的手,恢复王位的集成电路样品输出,触发施密特不断在每个S5P2时,在有一个以上,则刚和恢复的循环机王位和经营所需的信号insidly。还原到电路宝座的抵抗力,电容参数6辉煌动摇合适,可以是恢复王位信号的高电平持续时间大于2个机器周期来保证。正在恢复到电路中的宝座很简单,它的功能是非常重要的。一个芯片的计算机系统能够正常运转件,应先检查它可以恢复了王位没有成功。检查和可以弹出一个人的头部和监测与示波器针暂定,推动并恢复王位的关键,波形式,观察并有足够的范围是出口(瞬时),也可以通过是恢复王位的电路集团持有价值进行实验改变。AT89C51是一种低功耗,高性能CMOS8位的Flash可编程,可擦除只读存储器(PEROM)4K字节的微型计算机。该设备是采用Atmel的高密度非易失性内存技术,并与行业标准的MCS-51指令集和引脚兼容。片上Flash允许程序存储器在系统或传统的非易失性内存程序员编程。通过结合在一个通用的单芯片闪存的8位CPU,Atmel的AT89C51是一个强大的微机提供了高度灵活和成本效益的解决方案,许多嵌入式控制应用。AT89C51提供以下标准功能:4K字节的闪存,128字节RAM,32I/ O线,两个16位定时器/计数器,一个五向量2级中断结构,一个全双工串行口,片振荡器和时钟电路。此外,AT89C51的设计与操作频率下降到零静态逻辑,支持75 两种软件可选的节电模式。空闲模式时CPU停止工作,同时允许RAM,定时/计数器,串行口和中断系统继续工作。掉电模式保存RAM的内容,但冻结振荡器禁用所有,直到下一个硬件复位其他芯片的功能。空闲模式:在空闲模式下,CPU进入睡眠状态,而所有片上外设保持活跃。该模式是通过软件调用。的片上RAM和特殊功能寄存器的所有内容保持不变,在这种模式下。空闲模式可以终止任何使能的中断或硬件reset.It应当指出,在闲置时是由硬软件复位终止,恢复设备正常程序执行,从那里离开的,最多两个机器周期之前内部复位算法获得控制权。片内硬件禁止访问本次活动的内部RAM,但访问端口引脚是不是抑制。为了消除意外写入端口引脚时被复位终止空闲的可能性,以下是一个调用空闲指令不应该是一个写入到一个端口引脚或外部存储器。掉电模式:在掉电模式下,振荡器停止工作,并指令调用掉电的最后一条指令执行。片上RAM和特殊功能寄存器的值保持不变,直到掉电模式终止。从掉电唯一的出口是一个硬件复位。复位重新定义了SFR但不改变片上RAM。复位不应该被启动才能VCC恢复到正常工作的水平,必须持有足够长的活跃,使振荡器重新启动并稳定下来。程序存储器锁定位:在芯片上有三个锁可以不编程(U),也可以编程(P),以获得下表中列出的附加功能位。当锁定位1编程,在EA引脚的逻辑电平在复位期间被采样并锁存。如果设备的电源没有复位时,锁存器初始化为一个随机值,并认为值,直到复位被激活。这是必要的是,EA锁存值是为了与目前在该引脚的逻辑电平协议的设备正常运行。75'