Featured Post

7.2 重回上海

Read More

回来了,可惜是做火车回来的,之前数次外出都是飞的,也是好久没做过火车了,全当缅怀 另外上海菜确实精致 马兰头豆腐 小黄鱼

用单片机实现电话远程控制家用电器

Posted by 天际的荒草 | Posted in Docs | 文档 | Posted on 19-09-2009

标签:, ,

0

摘 要
本文设计的是一种基于AT89C51单片机的远程电话控制系统。控制系统是以单片机AT89C51为核心、基于电话网络开发的家用智能电话控制电器。利用电话网传输数字和语音信息,远程控制部分接收电话网发送来的DTMF信号,对其进行解码,解码后由中央处理器AT89C51根据解码信息控制家用电器;本系统设计实用,功能灵活多样,可靠性高,操作方便,可以广泛地应用于家庭或者其它场所的智能控制。电话远程控制不需进行专门的布线,不占用无线电频率资源, 还可避免电磁污染。通过基于语音处理技术及DTMF解码技术的远程控制系统, 运用语音识别技术, 以及语音命令通过电话网络来控制家用电器的开与关, 从而实现智能住宅中电器远程可控化。该系统通过嵌入式的智能语音提示, 突出的语音提示功能和密码控制系统, 可使操作者根据各种提示音及时了解受控对象的有关信息。系统可实现通过发出语音命令用电话远程控制多个家电, 用户可以查询家电状态, 提供密码功能, 只有输入正确的密码才能控制家电, 从而提高了安全性。

关键词:单片机,远程电话控制系统,双音解码

Abstract
The article designed the remote telephone control system which based on microcontroller AT89C51. Basing on the telephone net, the system which uses the core controller Single-chip microcomputer AT89C51 realizes long-distance control household appliances . The telephone control system, which uses the telephone net convert and voice information receives DTMF code from the telephone net, and interpret the code, the core controller AT89C51 controls the state of household appliances responded to the interpretation. This system is practical, and the function is flexible, and the operation is convenient with high reliability, which can be used extensive in various kinds of control equipment to home and others field. Long distance control of telephone does not require special wires distribution and does not take up wireless frequency resources. Electro magnetic pollution can thus be avoided. The designing of a system of long-distance control based on sound processing technology and DTMF decoding technology is presented in this paper. By using sound commands of sound recognition technology, this system realizes its control of household electrical appliances through telephone networks and so realizes the intelligently control of them in residence. The embedded and intelligent sound indication, its outstanding sound function of prompt and its code control system enable the operators to timely obtain the relative information of the controlled objects through indicated sounds. The system can use telephone to control many household electrical appliances in long distance through uttering sound commands and provides the code safeguard function. Only through inputting the correct password to control them, the users can control the condition of household electrical equipment, So the system security can be improved.

KEY WORDS: single-chip; telephone remote control system; DTMF

目 录
第一章 绪 论 1
1.1本课题研究的主要内容 1
1.2单片机远程控制 1
1.3系统设计可行性分析 2
1.4本文的研究内容 3
第二章 硬件电路设计 4
2.1 总体设计与单片机的选择 4
2.1.1系统总体设计分析 4
2.1.2 AT89C51单片机 5
2.2 振铃检测电路 6
2.3 模拟摘机电路 7
2.4 双音解码电路 8
2.5 语音提示电路 10
2.6 控制部分电路 12
第三章 软件设计 15
3.1设计思路及流程图 15
3.2软件分析 16
3.2.1语音提示模块 16
3.2.2模拟摘机与密码检测模块 18
3.2.3控制电器模块 20
3.2.4振铃记数 22
第四章 系统应用 23
4.1系统的应用前景 23
4.2.1工商业效益 23
4.2.2未来展望 24
4.2系统功能的扩展 24
结 论 27
参考文献 28
致 谢 29
附 录 30

第一章 绪 论
1.1本课题研究的主要内容

本课题主要研究单片机实现远程电话控制家用电器。系统以单片机AT89C51和双音多频解码集成电路MT8870为核心,通过电话线路遥控的远程电话控制系统。该系统实用、功能灵活多样,可以对被遥控对象的状态进行查询以及控制,可以广泛的应用于家用电器或者其它场所的各种控制设备。
当电话打入时,系统振铃检测电路检测到有振铃并等待系统默认的振铃次数后,通过模拟控制实现自动摘机,通过语音提示电路对外发出信号,并提示用户依次输入用户的操作密码和操作指令。电路将从话机接受到的信号通过解码电路后,将得到的数字信号送入CPU进行分析,若用户密码输入有误,并且输入错误次数超过系统设定,系统将自动挂断电话;当密码正确时,系统将通过语音提示用户依次完成一系列操作。当操作完成时,单片机根据返回的确认信息去控制家用电器,完成用户所需的各项操作。
1.2单片机远程控制

随着通讯领域技术不断的发展,各种智能的自动化技术已成为人们日常生活中必不可少的一部分。尤其是单片机控制技术突飞猛进,让人们越来越认识到它的重要性。随着集成电路的迅速发展,使得单片机的应用小型化,一改从前的那种大型机、中型机为主的机器,使得单片机应用于模块很小的集成电路中,从而让单片机的应用得到更大的发挥。
互联网的技术大多数应用在商业领域的信息传递,但目前也开始越来越多地向工业控制领域发展。单片机以其体积小、功能强、灵活可靠而广泛应用于工业控制和电器产品中,远程控制是其重要的应用之一。现在,单片机也开始向互联网方向发展,以求实现远程控制。传统的实现单片机远程控制的方法一般是采用串行口RS232、RS485和CAN 总线等。如果将单片机串口与调制解调器连接,这样便可以与远程计算机进行通讯联系,形成一种新的远程控制方案。但这必须要考虑布线及通讯传输中的各种困难,同时还要顾及到单片机内部程序的实现等。因而,根据现场实际,开发一种既照顾现场情况又考虑远程通讯的新的单片机控制方案将具有重大的意义。
单片机采用远程电话控制可开拓单片机和互联网以及电话网络应用的新领域。它可以很容易地实现远程的模块控制以及状态监视控制。同时单片机采用浏览器进行监控也将给软件的编程带来极大的便利。其应用于家电行业,实现对家电的智能控制和远方控制,是信息家电要实现的主要目标,也是“三网”(电话网、电视网、互联网)合一的重要组成部分,是当今信息技术研究的热点之一,具有重要的经济效益和社会效益,且具有良好的应用前景,比如可以通过远程更改程序及远程单片机诊断实现新的控制功能,还可以与无线连接,实现单片机的移动控制以及构成信息家电等。
遥控技术是通过一定的手段对被控物体实施一定距离的控制,常用的方式有无线电遥控、有线遥控、红外线和超声波遥控等。无线电遥控即是利用无线电信号对被控物体实施远距离控制。无线电遥控不可避免的需占用一定的无线电频率资源,造成电磁污染。常规的有线遥控需进行专门的布线,增加了投入。而红外线、超声波遥控则受距离所限。现有家庭远程遥控管理系统的设计与实现的遥控方式中,还有载波通信控制手段和基于无线寻呼的遥控方式。载波方式即通过电力线传递信息,该方式只能局限于同一变电所、同一变压器所辖范围内,因此也存在距离问题,应用范围有限。基于无线寻呼的遥控方式利用了现有的寻呼频率资源,不需占用额外的频谱。而且,随着寻呼网的全国联网,其遥控的距离基本不受限制。但该方式的受控方动作滞后于控制方的操作,不具备嵌入式系统的实时性要求,而且不具备很高的可靠性。电话遥控作为一较新的课题与常规的遥控方式相比,显示出一定的优越性,不需进行专门的布线,不占用无线电频率资源,避免了电磁污染。同时,由于电话线路各地联网,可以充分利用现有的电话网,因此遥控距离可跨省市,甚至跨越国家。电话属双工通信手段,因此,这可以大大体现出利用电话进行遥控的更大优越性。操作者可以通过各种提示音即时了解受控对象的有关信息,从而进行进一步的操作[1].
电话遥控这一课题目前已有涉足者,但是还只限于实验室阶段,因而距离实际应用,尤其是对于日常生活尚有一定的差距。目前,市面上出现的电话遥控系统大多是专用型的,典型代表是江苏春兰集团开发的“电话遥控空调”,但它并不能完全体现出电话遥控方式的双工通信特点。本设计计是针对这一点进行了设计,采取单片机智能控制,利用不同的提示音达到对于不同操作的提示及对受控方状态的信息反馈,从而使操作者能够及时了解受控方信息,使产品达到交互式与智能化。本设计的各种电器接口、各项标准都严格遵循国家有关标准,为以后的产品化提供了良好的基础。
1.3系统设计可行性分析

远程遥控可以利用固定电话或者移动电话实现,也可以通过Internet以及电力线以电力载波的形式进行电脑控制家电。
Internet以及电力线以电力载波的形式进行电脑控制家电在部分家庭或者偏远和农村较难以实现,故本文采用了利用固定电话来实现。电话在全国范围内广泛使用,这样以来使用单片机来进行远程家电控制可行性比较大。本文利用固定不同的提示间完成对于不同操作的提示,从而使操作者能够及时了解控制信息,从而使远程控制更加智能化,从成本考虑对于智能网络这类通信量不大,传输速率要求不高的设备,利用电话线或者无线网络、采用DTMF技术是非常经济的,此外,它不需要进行专门的布线,不占用无线率资源,避免了电磁污染,同时,可以充分利用现有的电话网,遥控距离可跨省市,甚至跨越国家。
电话远程控制系统所要完成的功能是对电话双音多频信号解码,并自动驱动被控制电器设备跟据其语音提示进行操作。由于远程电话遥控制一般都是进行智能化(也就是无人)的情况下完成,所以要求系统能识别电话的振铃信号并能自动拾机和挂机。至于电器控制方法,主要通过继电器来实现。
1.4本文的研究内容

第一章主要介绍家用电话控制系统的主要实现功能。单片机远程控制在人们日常生活中所起到的作用以及电话控制的发展境况。还介绍了关于系统的可行生分析。
第二章主要描述系统的总体设计思路和方法,包括系统的硬件和软件两个部分。在这部分主要设计到基本原器件的选择,和软件设计的总体模块进行分析。同时对AT89C51单片机进行一定的分析和介绍,也作为本课题选择AT89C51单片机的原由。
第三单主要对本次设计的主要电路模块进行分析,其中包括各个电路的原理、选择方法、功能以及参数的选择进行分析。本次设计主要分为五大电路模块,分别为振铃检测电路、模拟摘机电路、语音提示电路、DTMF双音解码电路和控制电路。其中以控制电路为核心,以振铃检测为起点,经模拟摘机后再进行电路的工作。
第四章主要对软件设计的部分进行分析。其中包括软件的设计思路以及程序的流程图。在这部分主要分为四个部分,分别为密码检测、模拟摘机、语音提示、控制电器。
第五章主要分析系统应用,系统开发的前景以及系统的各方面的应用以及在各个领域带来的效益等等。还包括了系统功能的扩展等。

第二章 硬件电路设计
2.1 总体设计与单片机的选择

2.1.1系统总体设计分析
(1) 硬件模块
电话远程控制由单片机构成主控部分,进行主要的信息处理,接收外部操作指令形成各种控制信号,并完成对于各种信息的接收到与控制。此系统主要包括用户接口模块,实现电话线接口、用户电器接口以及本次电路设计主模块之间功能的衔接;振铃检测和摘机模块,是实现对单片机进行控制的前提,通过对振铃检测的识别,CPU控制输出;控制模块,主要是通过AT89C51实现对电路的控制;DTMF双音解码是以MT8870为主的解码电路模块,主要实现对用户输入信息的解码并送入CPU;语音提示模块,主要实现让用户可选择操作控制提示使得系统更加人性化。系统原理框图如图1所示。
 
图2.1 系统的结构框架
本系统并联于电话机的两端,不会影响到电话机的正常使用。用户通过异地的电话机拨通本装置所连接外线的电话号码,通过市局交换机向电话机发出振铃信号。系统如果检测到振铃6次,即6次响铃后无人接,自动摘机,进入密码检测,输入正确后选择被控制电器,从而完成对家用电器的控制,完成后返回。系统还有许多可以扩展的功能,具有很广的市场前景。             
(2)软件设计思路
本系统软件实现方案主要划分为三个部分。分别为摘机部分、密码识别部分、控制电器部分,
① 控制摘机流程
本部分主要是为了方便用户直接进入控制状态而设计的,当用户播打电话的时候会有个话音提示告诉用户是否要进入家电控制模式。当用户输入“1”时,系统自动控制摘机,然后进行下一步的提示;当用户输入“0”时,系统自动挂机,意味着用户自动放弃家电控制。
② 密码识别流程
本部分主要是为了保证只有合法用户才能操作系统,电话远程控制系统上线以后,用户必须输入密码,待系统确认后才具有对系统的操作权限。系统首先提示用户输入密码;通过DTMF解码后,输入AT89C51中比对,如果正确,则进入下一步,否则继续提示输入密码。如果错误次数超过三次,系统自动挂机。
③电路控制流程
本部分为主要控制电器部分,也是本次设计的根本所在。在密码识别之后进入电路控制,实现对各家用电器的开关控制,最后发出语音提示用户操作成功。
2.1.2 AT89C51单片机
(1) 结构和特性
为了简化电路、降低成本、提高可靠性,本文单片机采用AT89C51作为主控制器,它是一款与MCS51完全兼容且内部自带4KB的Flash存储器及256KB RAM单元的芯片,因此可以不需另外扩展EEPROM及静态RAM就可以实现所需功能。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Falsh Programmable and Erasable Read Only Memory)的低电压,高性能CMOS8位微处理器,俗称单片机。该器件采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。由于将多功能8位CPU和闪烁存储器组合在单个芯片中,ATMEL的AT89C51是一种高效微控制器,为很多嵌入式控制系统提供了一种灵活性高且价廉的方案。
(2) 其功能特性
与MCS-51 兼容 ;4K字节可编程闪烁存储器 ;寿命:1000写/擦循环;数据保留时间:10年;全静态工作:0Hz-24Hz;三级程序存储器锁定;128*8位内部RAM;32可编程I/O线;两个16位定时器/计数器;5个中断源 ;可编程串行通道;低功耗的闲置和掉电模式;片内振荡器和时钟电路。
(3) 优点
AT89C51是一个低电压,高性能CMOS 8位单片机,片内含4k bytes的可反复擦写的Flash只读程序存储器和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司的高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,内置功能强大的微型计算机的AT89C51提供了高性价比的解决方案。
AT89C51是一个低功耗高性能单片机,40个引脚,32个外部双向输入/输出(I/O)端口,同时内含2个外中断口,2个16位可编程定时计数器,2个全双工串行通信口,AT89C51可以按照常规方法进行编程,也可以在线编程。其将通用的微处理器和Flash存储器结合在一起,特别是可反复擦写的Flash存储器可有效地降低开发成本。
2.2 振铃检测电路

在分析该电路之前,首先介绍一下公用电话网线路上的信号及其检测方法。公用电话网的传输线路为二线模拟线路,采用直流环路信号方式,能向模拟话机提供直流馈电、振铃信号、话音数据、音频数据、双音频数据等。我国规定的标准[3]为,平时挂机时的馈电电压一般为-48V,向用户振铃的铃流电压为75±15V,25Hz 的交流电压,用户话机的摘挂机状态是通过对直流环路上电流的通断来实现的,用户挂机空闲时,直流环路断开,馈电电流为0;反之,用户摘机后,直流环路接通,馈电电流在20mA 以上。
当有振铃信号从TEL0、TEL1 输入时,电话线路上的75±15V,25Hz 的交流电压经过一个桥式整流Q1滤波后,振铃信号进入光电耦合器817 的1、2 引脚。光电耦合器以光电转换原理传输信息,它不仅使信息发出端(一次侧)与信息接收并输出端(二次侧)是绝缘的,从而对地电位差干扰有很强的抑制能力,而且有很强的抑制电磁干扰能力,速度高、价格低、接口简单。经过光耦的隔离转换,从光电耦合器输出的波形是时通时断的正弦波,经过RC回路进行滤波输出标准的方波。方波信号就可以直接输出至单片机的输入口,完成整个振铃音检测和计数的过程。然后从光耦的4脚输出脉冲信号,脉冲输入到74LS123中,其中74LS123的作用是将小脉冲转换成大方波信号并送入到89C51单片机的T0引脚进行计数。
振铃检测电路如图2.2所示:

              图2.2 振铃检测电路
电话振铃信号通过电容C1隔直、D1稳压二极管、R1限流电阻输入至光电耦合器817的输入端1口,C1、D1和R1共同组成振铃信号变换电路,它们使输入电压和电流不会太大,对后面的光电耦合器起保护作用。光电耦合器817起的是隔离作用,光电耦合器是一种电信号的耦合器件,它一般是将发光二极管和光敏三极管的光路耦合在一起,输入和输出之间不可共地,输入电信号加于发光二极管上,输出信号由光敏三极管取出。
光电耦合器以光电转换原理传输信息,它不仅使信息发出端(一次侧)与信息接收并输出端(二次侧)是绝缘的,从而对地电位差干扰有很强的抑制能力,而且有很强的抑制电磁干扰能力。速度高、价格低、接口简单。
振铃信号通过光耦817的4脚输出振铃正弦波,R3后经过74LS123放大后输入到AT89C51的T0/P3.4口,中断方式采用外部中断,计数6次产生T0中断,控制继电器模拟摘机,完成振铃音检测。
原器件选取如下:
1、Q1共同组成整流电路,选取4001;
1、C1隔直电容,因为是过滤直流,滤出低频信号,而且振铃信号的电压还比较高,因此选取10μf
2、D1、D2为稳压二极管,选取36V的稳压二极管;
3、R1是817的限流电阻,取10kΩ;
4、光电耦合器选取型号817;
5、R2保护电阻选取5kΩ;
6、R3、R4、R5、R6选取统一电阻为4.7kΩ;
7、放大电路选取性能比较好的放大芯片74LS123;
8、C2选取1μf作为隔直电容。
2.3 模拟摘机电路

当T0计数达到6 次时,89C51 的T1引脚发出高电平,使三极管PNP8550 导通,从而继电器RELAY吸合,完成模拟摘机动作。由于语音信号和双音频信号电压远低于振铃信号电压,所以该电路不会产生误操作。
根据国家有关标准规定:不论任何电话机,摘机状态的直流电阻应≤300Ω,有“R”键的电子电话机的摘机状态直流电阻应≤350Ω。在挂机状态下,其漏电流≤5μA[2]。
当用户摘机时,电话机通过叉簧接上约300Ω的负载,使整个电话线回路流过约30mA的电流。交换机检测到该电流后便停止铃流发送,并将线路电压变为十几伏的直流,完成摘机。
模拟摘挂机电路设计如图2.3所示:

图2.3 摘/挂机电路

模拟摘挂机电路主要由一个三极管开关电路控制继电器的开关。摘挂机信令由单片机通过使T1/P3.5口变为高低电平实现。T1发出高电平信号通过R15保护电阻,使三极管PNP8850导通,从而开启继电器J1吸合,K1闭合完成模拟摘机动作。由于语音信号和双间信号和双音频信号电压远低于振铃信号电压,所以该电路不会产生误操作。整个电路完成自动模拟摘机过程。
根据设计原理,原器件选取如下:
1、 R6是三极管限流电阻,取2kΩ;
2、 PNP三极管是起模拟开关控制继电器的作用,取8850;
3、 D3二极管是起继电器反向保护的作用,取4001;
4、 J1是继电器控制开关,取JRC 4001F(DC5V);
2.4 双音解码电路

此部分是整个系统的关键,它的工作情况直接决定了系统的可靠性。经过翻阅大量的文献资料,使用电话专用的双音频编解码芯片进行输入双音频信号的解码,是比较常用的一种方法。使用集成电路不但外围电路简单,而且可靠性强。经过专用集成电路的解码,信号转换成为不同的码制信号,可以直接被单片机读取。一般常用的电话双音频编解码集成电路有MT8870, MT8880,MT8888等,经过反复论证比较,
使用双音频解码集成片MT8870来完成此功能模块,更加经济实用。
  远程电话控制系统采用MITEL公司生产的MT8870 DTMF接受器作为DTMF信号的解码核心器件。MT8870主要用于程控交换机、遥控、无线通信等系统,实现DTMF信号的分离滤波和译码功能, MT8870是双直插式封装的集成芯片,可以将DTMF信号译成四位并行二进制BCD代码的译码芯片,16个DTMF信号分别对应0000-1111等 16位二进制代码。MT8870具有拨号音抑制和模拟信号输入可调功能,所以在设计MT8870 DTMF解码电路时,只需外加一些阻容元件即可。
MT8870(管脚图见附录一)是DTMF 信号接收处理的专用芯片,其功能是将接收到的DTMA 信号解码为4 位二制码,由Q1~Q4 直接输出。当接收DTMF 信号时,模拟摘机后从TEL0、TEL1 进入的双音多频信号经过耦合隔离变压器耦合入MT8870 的输入脚IN-。该双音频信号先经MT8870 内部的拨号音滤波器滤除拨号音信号后,再经前置放大器送入双音频滤波器,将双音频信号按高、低频信号分开,又经拨号音滤波器、高频组及低频组分离带通滤波器送到数字算法与编码变换器进行确认,译成相应的4 位二进制码,存入接收数据寄存器,需要时输出至数据总线,送入89C51 的P1 口。其中输入脚IN- 和增益选择端GS 之间所接的反馈电阻R9可以调节运放的增益,STD为中断请求或电话信号音检测输出端,它经过一个反向器与89C51 的INT0引脚相连。为了获取有效的数据,MT8870 的STD 接AT89C51 的INT0。当STD 电平由低变高,通知AT89C51单片机有新的DTMF信号来,MT8870的TOE端接入一个高电平脉冲信号,将与当有输入的双音信号相对应的二进制编码信号读入P1.0-P1.3。经AT89C51检测后通过P1口总线接收有效拨号键值码[4]。当没有新的DTMF信号时,STD保持为1。
当用户在电话机的键盘上输入密码或按下控制按钮后,这些信息均采用双音频方式通过电话线发出。DTMF 解码电路的主要作用是接收从TEL0、TEL1 输入的双音多频信号并将其转换成二进制编码,然后输至单片机进行数据处理,进而实现控制功能。
MT8870的连线如图2.4所示,它的IN-、GS脚接收来自电话机的双音多频脉冲信号该双音多频信号先经其内部的拨号音滤波器,滤除拨号音信号,然后经前置放大后送入双音频滤波器,将双音频信号按高,低音频信号分开,再经高、低群滤波器,幅度检测器送入输出译码电路,经过数字运算后,在其数据输出端(Q4~Q1脚)输出相对应的译码输出。MT8870的数据输出端Q4~Q1连到AT89C51的P1口的P1.0~P1.3,CPU经P1口识别4位代码。其中,A,B,C,D 这4个按键常被当作R/P,REDIAL,HOLD,HANDSFREE等功能使用。为了使单片机AT89C51获取有效数据,MT8870的STD有效端经反相后接CPU的/INT0引脚。当MT8870获取有效双音多频信号后,STD电平由低变高,再反相为低,CPU检测后,指示P1口接收有效二进制代码。而无效的双音频信号(电话线路杂音、人们的语音信号等)是不会引起MT8870的STD端变化的。其中,接在电源处的电容对抗干扰有一定的作用。在实际应用中,存在这样一个问题:MT8870的使能控制端不允许中断时,将使MT8870的STD端中断关闭。其解决办法是,将STD端接与非门的输入,与非门的另一输入端接AT89C51的INT0端。当STD有效(即中断开放)时,INT0 = 1则/INT0中断关闭;INT0 = 0时则/INT0中断允许。

           图2.4 DTMF双音解码电路

此部分电路元器件如下:
1、N1为变压器耦合隔离放大器,选择3656
2、C3 、C4选取0.1μF用于隔直流;
3、R7和R9是输入平衡电阻,R9为可变电容,分别取取100KΩ;
3、X1为外部晶振芯片选择3.579MHz;
4、双音频解码芯片选取MT8870;
5、R8为平衡电阻,选取390KΩ;
6、反向器选取74LS04的一组反向器;
2.5 语音提示电路

本系统语音提示电路主要实现用户在远程控制系统时,让系统智能化,能够根据用户系统设定自动提示用户进行操作,以更快捷的方式方便用户操作。从而提高系统的自动化水平。实现语音化的电路有许多种,本文主要采用其中最简单的一种语音提示系统。本语音提示系统具有录音,放音功能,主要是采用目前常用的美国ISD公司的语音提示芯片ISD2590(内部电路结构见附录二)进行设计,基本实现了本次设计内容的要求。为了更方便地使CPU调用其结构以实现语音提示功能,该系统直接使ISD2590的第P/R管脚置高电平,使系统随时可以调用第一段录音,并且更加快捷地控制提示音的开与关。
电话远程控制系统利用语音提示电路实现用户和系统的交流.语音提示电路预先存储若干段系统提示音,89C51中央处理单元电路判断用户发送的DTMF信号后,对语音提示电路进行寻址,播放相应的提示音,从而向用户反馈信息提示下一步该如何操作.
  本系统之所以选用ISD2590单片语音录放集成电路作为语音提示电路的核心部分,它有许多优点。首先ISD2590采用E2PROM存储器,信息可永久保存,零功能存储;其次它还采用了D/A直接模拟量存储技术,因而能较好地保留语音信息中的有效成分,提高录放音的清晰度.ISD2590可以存储长达90s的语音,能够实现1~600段语音分段,每段录放音均有一个起始端,该起始端地址选择由A0~A9确定.ISD2590的外围电路也非常简单,只需少许阻容元件即可,并且它易与单片机接口,实现分段寻址功能.
系统在接收远端用户发送的DTMF信号以后,根据软件设定,对语音电路进行寻址放音.例如系统收到用户发出的”8888′,用户密码信号时,若密码正确,则寻址播放语音提示”密码正确”,否则,寻址播放语音提示”密码错误”.需要提出的是,ISD2590″.只有A0~A9一共10根地址线,显然不能对480K模拟存储阵列直接寻址,从附录二可以知道,ISD2590的地址线是先经过解码器解码后再对480K模拟存储阵列进行寻址的.
ISD2590有以下特点:
1、ISD2590实质是一个模拟数据采集系统,录放的信息可以直接记录在芯片内部的EEPROM中,因而可以较好地保留语言模拟量中的有效成分,减少音质失真,提高录放质量,获得自然、逼真的音响还原效果。
2、因片内有电可擦除EEPROM,所以可以随录、随放,任意改写或删除,不需专用的语言固化开发系统进行编程和烧录。重复录音次数为1万次以上,录放的信息可以保存l0年以上,断电后信息不会丢失。
3、具有最多可存储600个信息段的能力。
4、可以多片级联以增加存储能力。被录制的信息跨过两个器件的地址边界,从一个器件级联到另一个器件时,输出间断小于2ms。
5、采用双列直插28脚封装,双+5V电源供电。
语音提示电路结构如图2.5所示,主要由ISD2590语音芯片组成,其中有R10、R11,C9、C10组成的电路发,用于专门录音,并可存入芯片供中央CPU调用。AGC电路用于调节系统内部增益平衡和MIC、MIPEF语音内部放大电路而设。VCCD、VCCA、GND、AGND组成芯片电源部分。
ISD2590芯片可以连续录放,也可以通过地址线A1~A9选择分段录放,系统在接收远端用户发送的DTMF信号以后,根据软件设定,对语音电路进行寻址放音。本次设计为了方便,选择地址线A1~A8选择分段录放,可以通过A1~A8分别录音八段,然后跟据CPU进行选择播放录音。这种方式虽然只能录取八段录音,具有一定的局限性,但实现起来比较简单,编程也比较容易。
A1~A8分别与AT89C51的P2.0~P2.7相连组成地址结构,由CPU来调用所需要的语音。CPU的分别与PD与/CE相连分别实现语音播放的开与关。

             图2.5 语音提示电路图
图中/CE为高电平时启动放音,PD为置1时停止放音

此部分元器件选择及参数设定如下:
1、 C6、C7选取0.1μF的电容用于滤除电路中的交流成份;
2、 C5、C10则选取22μF,C9选0.1μF,C8选择1μF,C11选4.7μF电容;
3、 R10设为2KΩ,R11设为10KΩ,R12则为470KΩ;
4、 主芯片选择ISD2590。
2.6 控制部分电路

控制电路如图2.6所示,主要是由译码扩展电路、反向电路、D触发器和继电器控制电路组成。首先,单片机AT89C51从P1口的低四位输出四位控制信号。P1.0、P1.1、P1.2、P1.3加在单片机的输入端,作为解码信号。当输入有效时,在单片机的控制下通过P0.0~P0.7口输出信号,通过八组固态继电器分别控制八路不同的电器,这样就可以完成单片机对多路电器的控制。本设计把P1口用作控制电器,控制语音数据为P2口。

             图2.6 AT89C51控制电路

元器件选取:
1、X2为外部晶振芯片选择6MHz;
2、S1~S8选择八个固态继电器(SSR);
3、C12选取22μF电容;
4、R13选取1KΩ,R14选择10KΩ电容用于分压。

本次关于电话远程控制家用电器设计的总电路图如图3.6所示

图3.6 系统结构总电路图

第三章 软件设计
3.1设计思路及流程图

软件设计思路主要根据此系统实现的功能展开,并以此设计的目的和要求为依据,进行代码编写。本系统的软件设计主要分为系统初始化、振铃检测计数、模拟摘/挂机、DTMF解码处理、信号语音提示、控制电器。
系统流程图如图3.1所示:

     图3.1 软件流程图
3.2软件分析

本系统的软件设计的每个功能模块对于整体设计都是非常重要的,单片机AT89C51通过软件程序才能很好的对外部的信息进行采集、分析和决策。下面就整体设计以及每个单元功能模块分别进行说明。
本程序首先要使用一个延时程序,由于系统用6MHz晶振,51系列单片机,一个机器周期为2us。在每段录音播放后要进行一段延时程序,故要进行延时编程。
延时5s子程序如下:
ORG 2000H
DELAY:PUSH R5
PUSH R6
PUSH R7
DELAY0: MOV R5,50
DELAY1: MOV R6,200
DELAY2: MOV R7,248
DELAY3: DJNZ R7,DELAY3 ;248*2+4
DJNZ R6,DELAY2 ;(248*2+4)*200+4
DJNZ R5,DELAY1 ;[(248*2+4)*200+4]*50+4
POP R7
POP R6
POP R5
RET
3.2.1语音提示模块
 本功能模块主要是对用户操作进行语音提示,方便用户更好地操作,语音段主要通过ISD2590中事先录好的语音进行调用。本设计中主要采用单片机P2口对应语音地址进行调用。
代码如下:
1、是否控制家用电器提示音:
ORG 1000H
RING1:SETB P1.4 ;打开语音提示播放开关
SETB P2.0    ;调用A1对应地址中的语音片段
LJMP:DELAY
SETB P1.5 ;关闭语音提示播放开关
CLR P1.4 ;P1.4口置0
CLR P1.5
CLR P2.0
CPL P3.4 ;延时0.5S
CLR P3.4
RET
2、密码输入提示音:
ORG 1050H
RING2:SETB P1.4
SETB P2.1 ;调用A2对应地址段的语音片段
LJMP:DELAY
SETB P1.5
CLR P1.4
CLR P1.5
CLR P2.0
CPL 3.4
CLR P3.4 ;延时0.5S
RET
3、密码输入错误提示音:
ORG 1100H
RING3:SETB P1.4
SETB P2.2 ;调用A3地址段对应的录音
LJMP:DELAY
SETB P1.5
CLR P1.4
CLR P1.5
CLR P2.2
CPL 3.4
CLR P3.4
RET
4、密码输入正确提示音:
ORG 1150H
RING4:SETB P1.4
SETB P2.3      ;调用A4地址段对应的录音
LJMP:DELAY
SETB P1.5
CLR P1.4
CLR P1.5
CLR P2.3
CPL 3.4
CLR P3.4
RET
5、电器选择提示音:
ORG 1200H
RING5:SETB P1.4
SETB P2.4      ;调用A5地址段录音
LJMP:DELAY
SETB P1.5
CLR P1.4
CLR P1.5
CLR P2.4
CPL 3.4
CLR P3.4
RET
6、电器控制完成提示音
ORG 1200H
RING5:SETB P1.4
SETB P2.5      ;调用A6地址段录音
LJMP:DELAY
SETB P1.5
CLR P1.4
CLR P1.5
CLR P2.5
CPL 3.4
CLR P3.4
RET
3.2.2模拟摘机与密码检测模块
系统的模拟摘机与密码检测原理是:在检测之前有一个简短的摘机程序,当T0遍数达到6次时,系统会自动提示是否要进行家电控制,当输入0时放弃控制,当输入1时开始进行密码检测。在系统初始化的时候把原始密码写入50H储存单元内,密码位数为“6”赋给R6、当系统摘机时,要求输入密码,通过DTMF解码后输入到单片机内的数据储存到60H开始的空间内。然后单片机对进行两个储存地址的内容逐位进行比较,直到完全相等才转到下一进程,如果有任何不同,程序自动跳到出错进程,从而完成了密码检测。
代码如下:
ORG 0800H
TONE:CLR 7DH
SETB P3.5 ;启动摘机电路
LJMP RING1 ;调用第一段录音
MOV R6,#01H ;是否控制电器
CLR 7EH
WAIT1:JBC 7EH,QQQ
LJMP WAIT1 ;等待
QQQ:DJNZ R6,STOP
CLR C
CLR TR0
MOV R3,#3H ;容错三次
LCALL RING2 ;提示输入密码
DDD: CLR 7EH ;清零
DTMF: MOV R6,#6H ;密码为6位数
MOV R7,#60H
WAIT2: JBC 7EH,FFF ;等待INTO
LJMP WAIT2
CPL P3.4 ;延时0.5S
CLR P3.4
FFF: MOV R6,#6H ;六位密码
MOV R7,#50H     ;原始密码
MOV R0,#60H     ;输入解码后密码
EEE:MOV A,@R0 
MOV R2,A 
CLR C  
MOV A,@R0
SUBB A,@R7     ;减1移位检验
INC R7 
INC R0
JZ GGG
LJMP HHH
GGG: DJNZ R6,EEE ; R6-1!=0
LJMP RING4 ;输入密码正确提示音
LJMP CCC ;密码检测通过
HHH: DJNZ R3,JJJ ;R3减1不为零时,跳转
LCALL RING3
LJMP STOP      ;挂机
JJJ: LCALL RING3 ;输入密码错误,请重试
LJMP DDD
3.2.3控制电器模块
本模块功能实现首先通过外围DTMF双音解码信息来选择受控家用电器,然后运行了程序,通过单片机P1口低四位的控制信息来选择不同的家用电器进行控制。首先在单片机内部分别设置好控制端口的地址值。比如在80H内存地址内存放1,81H内存放2,82H内存放3……87H内存放8,分别控制P0口的各个脚
本模块代码如下:
CCC: LCALL RING5
MOV R6,#1H ;输入受控电器号码
CLR 7EH
WAIT3: JBC 7EH,NNN ;等待INT0
LJMP WAIT3
CPL P3.4 ;延时0.5S
CLR P3.4
CLR C
NNN:MOV R5,@80
SUBB R5,R6 ;将输入的控制号与第一个电器控端口比较
JNZ NN1 ;不同刚跳转
SETB P0.0 ;相同则将P0.0置1
LJMP RING6 ;输入语音控制完成提示音
LJMP STOP ;挂机退出
NN1:MOV R5,@81H
SUBB R5,R6
JNZ NN2
SETB P0.1
LJMP RING6
LJMP STOP
NN2:MOV R5,@82H
SUBB R5,R6
JNZ NN3
SETB P0.2
LJMP RING6
LJMP STOP
NN3:MOV R5,@83H
SUBB R5,R6
JNZ NN4
SETB P0.3
LJMP RING6
LJMP STOP
NN4:MOV R5,@84H
SUBB R5,R6
JNZ NN5
SETB P0.4
LJMP RING6
LJMP STOP
NN5:MOV R5,@85H
SUBB R5,R6
JNZ NN6
SETB P0.5
LJMP RING6
LJMP STOP
NN6:MOV R5,@86H
SUBB R5,R6
JNZ NN7
SETB P0.6
LJMP RING6
LJMP STOP
NN7:MOV R5,@87H
SUBB R5,R6
JNZ STOP
SETB P0.7
LJMP RING6
LJMP STOP
STOP:CLR P3.5 ;挂机
END
3.2.4振铃记数
  本模块通过T0外部中断方式来计数,当计数达到6次时自动触发T1高电平,自动拾机开始。
ORG 0090H
CLR A
TT0:SETB 7DH
INC A
SUBB A,#06H ;振铃6次?
JNZ TT0 ;不到6次跳转
JZ TONE ;振铃6次,摘机。
RET

第四章 系统应用
4.1系统的应用前景

随着人们生活水平的不断提高,家居的舒适、安全、方便成了人们生活追求的重要组成部分。
本系统可以扩展用于数据通信量不大,速率要求不高的远程通信场合。另外,本系统也可应用于工农业中,实现对无人值守岗位的远程控制。系统抛弃了一些复杂的,兼容性差的芯片,取而代之的是得到广泛应用并且控制简单的DTMF芯片和单片机,识别率高,并且技术成熟,使得系统可以在复杂环境下稳定工作。此外,可以通过进一步的高级菜单设计与驱动电路设计来完善控制单元,增加控制家电的运作时间等复杂操作,使远程家电控制方式更加智能化。
随着CPU和电子技术的快速发表,使得单片机应用日益广泛。智能家电的产生和发展将对传统家电、计算机和通信业产生深远影响。目前智能家电的实现方案众多,采用专用集成电路只是一种方案[6].将单片机,应用电路和相关软件嵌入到电器中使其智能化,已成为家电产品未来发展的潮流。越来越多的“智能产品”和“智能控制系统”让众多拥有锐利眼光的商人识透,并日益投入到这方面的竞争上来。目前,国际上许多大型公司正在竞相开发功能各异的智能化产品,智能家电将很快进入普通百姓家庭。本次设计便是围绕着如何实现“远程电话控制家用电器”展开设计,用户在任何地方只要拥有电话,便可以远程操控家用电器。
4.2.1工商业效益
信息产业部最新统计显示,截至1月底,全国电话用户超过8.3亿户,其中固定电话用户为3.68亿户,手机用户数为4.67亿户,预计电话用户数量还将再进一步提高。如此庞大的用户群,如果能运用电话实现其它方面的商业效益,必定能推动相关工业迅速发展。比如便利的远程遥控家用电器,必定能推动更多的用户安装家用电话,这一方面能推动电话及相关产业的再度发展,另一方面能推动电信运营商扩大运营。这样能在方便了大部分人的同时,为更多的人提供了就业机会,同时也加速了国家经济的向前发展。随着单片机应用技术迅速发展,集成电路的广泛应用,新的产品又将覆盖一定的层面,比如单片机的远程控制装置,单片机的报警装置等等,新产品会层出不穷。未来智能化的发展必将进一步的深入,远程电话控制系统必将扩展到其它智能控制装置上。
此系统在元件的选取上,采取以性能价格比为主的选取方式,以最低的成本达到完整的设计要求。从而使产品运用于工业生产以及商业运营等领域的成本大大降低,让消费者更容易接受。
4.2.2未来展望
从目前的发展状况来看,电信事业的发展必然要带动与电话相关类产品的发展,而电话遥控装置仅仅是处于起步阶段,未来的发展应该十分可观,经分析,未来应该有以下几个方面的发展趋势:
(1) 小型化、专用化
由于元器件工艺水平的提高,将使得控制芯片的体积更小,功能更强,因而整个系统的体积也将微型化,甚至出现专用的控制芯片,这将在很大程序上方便于将控制器置入受控电器的内部电路,从而使控制电路和电器设备容为一体,使这些电路成为专用电路。
(2) 多功能化。模块化
随着人们的需求不断增加。技术的不断发展,系统的功能将越来越多,如:家电控制,系统监控(用于家庭监控),电话转移功能,以及水电控制系统等等。而且将来的产品进行模块化发展,设计有许多不同的功能模块,当需要什么功能模块时只需将相应的功能模块拼装起来即可。
(3) 网络化
计算机网络的发展将导致家庭自动化的控制核心向家用计算机转移。未来的电话遥控系统将是通信网络+计算机+控制器。成为家庭控制中心的一个重要组成部分,到时候智能家庭必然可以实现。
另外从近来不断从网络上看到的一些智能屋、智能大厦、智能小区的描述,这些都是重点描述了家庭遥控管理系统的优越性。可以相信,本系统将会在未来的家庭自动化的发展中占有一席之地。
4.2系统功能的扩展

本系统的功能还可以进行多方面的扩展,比如在电器控制方面,可以运用3线8线译码器,从而提供更多电器的控制。
在语音提示方面使用ISD2590可以有两种实现方法,本文只介绍了一种,由于时间的局限性,我只选择了一种简单的设计方法。其实选择另一种方法也就是系列选择调用的方法 [5]可以对本系统进行扩展,下文简单介绍一下。
ISD2590 的最高地址位A8(脚9), A9(脚10)置为高电平时, 芯片即进入操作模式状态。操作模式根据引脚A1~A8 的高低电平不同组合总共分为6 种不同的模式, 实现不同的功能。为尽量节省I/O 口线, 采用了M1 和M6 相结合的方法实现对ISD2590 操作, 将所需的语音通过开始/暂停按钮一段一段从话筒录入芯片, 只需记住各段的序号即可。
ISD2590 的信息检索模式的使用方法: 首先将芯片的录放控制P/R 端置高,地址位A4, A0置高,现在芯片即处于信息检索模式的信息读取状态。要播放第N段的语音,先给PD端一高电平脉冲,使地址指针复位为0。因为所有的序号都以存储器起始处为基准,除第一段外,只需要CE端发送N-1个不大于10us 低脉冲,即可使地址指针到达第N段的开始处,然后拉高A0,在CE端加一个低脉冲即可播放第N段的语音信息,直到此段后的EOM标志出现为止。由此可知准确检索的关键在于正确检测到每一段的EOM结束标志。因为在快进状态下, EOM脉冲的宽度只有10us左右,对于速度不高的单片机不易检测到,此时可用外部中断来检测EOM标志位。
在主控模块,本次设计直接通过电源进行复位,在功能增强的过程中可以通过看门狗进行智能复位,由于时间问题,对于看门狗这一器件及其编程只作了解,而没有真正运用到本次设计当中。
看门狗实际上是一个计数器,一般给看门狗一个大数,程序开始运行后看门狗开始倒计数。如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始倒计数。如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。
看门狗(Watchdog)电路是嵌入式系统需要的抗干扰措施之一。本文用X25045(附录三)芯片设计了一种新的看门狗电路,具有体积小、占用I/O口线少和编程方便的特点,可广泛应用于仪器仪表和各种工控系统中。工控系统在运行时,通常都会遇到各种各样的现场干扰,抗干扰能力是衡量工控系统性能的一个重要指标。看门狗(Watchdog)电路是自行监测系统运行的重要保证,几乎所有的工控系统都包含看门狗电路。在8096系列单片机和增强型8051系列单片机中,该系统已经做在芯片内部,用户只要用软件开放它就可以,使用很方便。但目前工控系统仍在使用廉价的普通型8051系列单片机,则看门狗电路必须由用户自己建立。看门狗电路一般有软件看门狗和硬件看门狗两种。软件看门狗不需外接硬件电路,但系统需要出让一个定时器资源,这在许多系统中很难办到,而且若系统软件运行不正常,可能导致看门狗系统也瘫痪。硬件看门狗是真正意义上的“程序运行监视器”,如计数型的看门狗电路通常由555多谐振荡器、计数器以及一些电阻、电容等组成,分立元件组成的系统电路较为复杂,运行不够可靠。
X25045硬件连接图如图4.1所示。X25045芯片内包含有一个看门狗定时器,可通过软件预置系统的监控时间。在看门狗定时器预置的时间内若没有总线活动,则X25045将从RESET输出一个高电平信号,经过微分电路C2、R3输出一个正脉冲,使CPU复位。图4.1电路中,CPU的复位信号共有3个:上电复位(C1、R2),人工复位(K、R1、R2)和Watchdog复位(C2、R3),通过或门综合后加到RESET端。C2、R3的时间常数不必太大,有数百微秒即可,因为这时CPU的振荡器已经在工作。

图4.1 看门狗复位电路图
图中: R1=1KΩ;R2=R3=10KΩ;C1=22μF;C2=0.1μF

结 论
通过这个学期的毕业设计,我不只是学会了怎样将所学的知识运用到实际当中,更主要的是学习了在一个人的情况下,完成所要完成的任务以及学会了运用互联网,图书馆等资源,独立完成任务。
这次的毕业设计为以后做什么项目打下了一定的基础。首先我明白了做一项比较大的项目,并不能急于一时,而是要分好几个阶段。包括收集资料阶段、总体规划阶段、具体设计阶段、检查阶段。以后无论做什么项目或者课题都可以进行多方面规划以实现目标。
毕业设计要求能够实现理论知识与工程实践相结合、应用知识和工程创新相结合、个人学习与集体探讨相结合等等方面提高全面素质。大学时间学习的,尤其是在大三、大四学习的都是理论性的东西,具体运用到实践的项目这还是首次。本次毕业设计不仅让我温习了以前学过的知识,并且懂得了怎样将知识运用到现实环境中。其中运用到模拟电子技术、数字电子技术、电工电子技术、单片机技术、汇编语言、接口技术等。尤其是汇编语言,已经好久没有用过了,本次设计在很大一部分时间都用在了汇编语言的再次学习,以及程序总体设计。从这里让我体会到了所学理论知识的重要性,知识掌握得越多,设计得就更全面、更顺利、更好,设计的阻力也就越小。并且通过这次毕业设计,我接触到了更多平时没有接触到元器件以及电路原理,以及功能结构,发现了自己还有很多不足之处需要进行学习。
同时本次设计的好多东西在课本上是找不到的,从课本上得到的只是部分器件的工作原理等等。并且单片机远程控制家用电器所运用到的都是比较新的一些器件,在课本上很难查得到,因此需要自己积极地查阅当前关于这方面的通信资料,以增长自己的见识,补充最新的专业知识。当然学的东西并不是要面面具到,而是一通百通,书本上的都是些基本的理论。所以在查资料的时候要具有针对性,否则既费时,又费力。
毕业设计不但能培养一个人的科学认真的态度,而且培养了一个人的能吃苦耐劳的精神,以及对工程项目全局的认识。急解决不了问题、乱解决不了问题,只有脚踏实地,只有认真仔细才能完成既定的任务。

参考文献
[1]余水权.嵌入式系统,智能家电及家居网络[M].单片机与嵌入式系统应用,2001: 22-35
[2]肖质红.基于公用电话网络的远程控制家电设备[J].浙江万里学院学报,2006,3
[3] 刘飞飞,葛继,唐宏.基于PSTN的家用电器远程控制系统[J].今日电子,2004,(2): 20-28
[4]李传南.单片机与DTMF信号收发芯片MT8870的直接接口设计[J].电子与自动化.1992,2:30-35
[5]何琳琳,张海军.基于电话网络的家用电器远程控制系统的实现[J].单片机开发与应用,2006,6:74
[6]Bushby S T. A standard communication infrastructure for intelligent
Buildings.Automation in Construction[J].1997,6:529-540
[7]吴炳胜,王桂梅. 80C51单片机原理与应用[M].冶金工业出版社,2001,10: 48-53
[8]武锋. PIC系列单片机的开发应用技术[M].北京航空航天大学出版社,2000,1: 94-101
[9]陈明义.数字电子技术基础[M].中南大学出版社,2004,12:99-130
[10]黄天戌,孙东.智能电话远程控制系统的设计与实现[J].电工技术杂志,2001,6:35-37
[11]刘连吉.ISD单片机语音录/放器件及电路设计[J].青岛海洋大学出版社,1997.27(3):292-296
[12]李朝青.PC机与单片机&DSP数据通信技术选编[M].北京航空航天大学出版社,2003,2:70-94
[13]李广地,朱月秀,王秀山.单片机基础[M].北京航空航天大学出版社,2005,2
[14]杨为理.现代通讯集成电路应用技术手册[M].电子工业出版社,2002,5
[15]曾刚,贺蓉,徐成.DTMF远程通信的软硬件实现技术[M].电子技术应用,2005,5

附 录
一、MT8870管脚图(附图2.1所示)
附图2.1 MT8870管脚图
二、ISD2590内部结构电路(附图2.2)
附图2.2 ISD2590内部电路结构框图
三、看门狗芯片(X25045)简介
X25045是美国Xicor公司的生产的标准化8脚集成电路,它将EEPROM、看门狗定时器、电压监控三种功能组合在单个芯片之内,大大简化了硬件设计,提高了系统的可靠性,减少了对印制电路板的空间要求,降低了成本和系统功耗,是一种理想的单片机外围芯片。X25045引脚如附图2.3所示。

附图2.3 X25045引脚图
其引脚功能如下。
CS:片选择输入;
SO:串行输出,数据由此引脚逐位输出;
SI:串行输入,数据或命令由此引脚逐位写入X25045;
SCK:串行时钟输入,其上升沿将数据或命令写入,下降沿将数据输出;
WP:写保护输入。当它低电平时,写操作被禁止;
Vss:地;
Vcc:电源电压;
RESET:复位输出。
X25045在读写操作之前,需要先向它发出指令,指令名及指令格式如表1所示。表表1  X25045指令及其含义
指令名 指令格式 操作
WREN 00000110 设置写使能锁存器(允许写操作)
WRDI 00000100 复位写使能锁存器(禁止写操作)
RDSR 00000101 读状态寄存器
WRSR 00000001 写状态寄存器
READ 0000A8011 把开始于所选地址的存储器中的数据读出
WRITE 0000a8010 把数据写入开始于所选地址的存储器
WD1=0,WD0=0,预置时间为1.4s。
WD1=0,WD0=1,预置时间为0.6s。
WD1=1,WD0=0,预置时间为0.2s。
WD1=1,WD0=1,禁止看门狗工作。
看门狗电路的定时时间长短可由具体应用程序的循环周期决定,通常比系统正常工作时最大循环周期的时间略长即可。编程时,可在软件的合适地方加一条喂狗指令,使看门狗的定时时间永远达不到预置时间,系统就不会复位而正常工作。当系统跑飞,用软件陷阱等别的方法无法捕捉程序时,则看门狗定时时间很快增长到预置时间,迫使系统复位。

汽车无线语音防盗报警系统的设计

Posted by 天际的荒草 | Posted in Docs | 文档 | Posted on 19-09-2009

标签:, , , ,

0

摘 要
目前,车辆防盗报警系统往往局限于对车辆的自身装置进行改进,人力救援不能及时介入。在无线网络日益普及的今天,利用现有的无线网络,降低系统成本、提高整个防盗系统的监控和管理能力,开发一种无线的、交互式的语音防盗报警系统具有一定的现实意义和较好的发展前景。
本系统体现了软硬件结合的巨大优势,应用PC作为监控计算机,利用上海桑瑞公司的SRWF-501无线模块传输报警信号,利用中青公司的PM50进行语音采集,并通过凌阳61单片机控制语音芯片实时报警。在实现了无线数据实时传输、报警的基础上,编写了可在任意监控机上运行的监控管理软件,实施对整个系统的监控和管理。
系统界面友好,操作简单,是一种完全自动的主动态系统。实现了汽车语音报警信息的无线传输及车主对车况的无线查询。

关键词 报警系统 , 单片机 ,无线传输, 语音采集, 串口通信

ABSTRACT
At present, the vehicles security alarm system always limits to make the improvement to the vehicles own installment.The man power rescue cannot promptly involve.Today,with the development of the wireless network,using the existing wireless network,reducing the cost of the system,improving the monitoring and management capabilities of the whole system and developing a wireless,interactive voice alarm system has some relevance and good prospects for development.
This system has manifested the huge superiority which the software and hardware unifies.By using PC as the monitor of the whole system, using SRWF-501 wireless moduletransmission of Shanghai mulberry auspicious company to transmit the alarm information.,using PM50 of center blue company to gather pronunciation information,we can finish the whole system. And we can use 61 boards of Lingyang company to control the pronunciation chip .On the basis of realizing the wireless data real-time transmission, it also prepared monitoring and management software which can be used one each monitoring machine.
The overall system contact surface is friendly, the operation is simple.It is a kind of system which is full-automatic. It has realized the wireless transmission of information and been inquired the automobile condition by the vehicle owner.

KEY WORDS Alarm system SCM Wireless transmission
Pronunciation gathering Serial Communication

目 录

摘 要 I
ABSTRACT II
第一章 绪论 1
1.1课题背景 1
1.2发展现状 2
1.2.1国内外防盗装置现状 2
1.2.2 全球汽车无线通信系统发展现状 2
1.3无线防盗报警系统设计要求及其意义 3
1.4论文的组织结构 4
第二章 车辆无线语音防盗报警系统的构成 5
2.1车辆无线语音防盗报警系统的总体方案 5
2.2车辆无线语音防盗报警系统的构成 6
2.2.1单片机 6
2.2.2监控计算机 7
2.2.3无线传输芯片 8
2.2.4语音报警芯片 9
第三章 车辆无线防盗语音系统硬件部分设计 12
3.1 串行通讯 12
3.1.1 串行通讯的基本概念 12
3.1.2 串行接口 12
3.2 PM50语音录入 14
3.2.1 PM50语音录入软件使用 14
3.2.2车辆报警语音制作 15
第四章 车辆无线防盗语音系统软件部分设计 17
4.1 VC开发环境 17
4.1.1 MSComm控件使用 17
4.1.2 ODBC数据源 19
4.2 建立系统SQL数据库 20
4.3 车辆报警系统软件部分制作 21
4.2.1 程序主界面 22
4.2.2串口通信模块制作 25
4.2.3 车辆状态查询模块制作 28
4.4 程序运行结果 30
第五章 总结与展望 33
5.1系统的优缺点 33
5.2 设计过程中遇到的问题 33
5.3系统的发展前景 34
致 谢 35
参考文献 36
附 录 37

第一章 绪论

1.1课题背景
如何有效地保护自己的财产不受伤害,一直是人们关心的问题,无论是建筑坚固的保管场所,还是采取各种报警防盗系统,都是想达到这一目的。但是无论多么坚固的场所,人总是可以想办法打开,能实时地对需要防盗的场所进行监控才是有效的防护措施。
20世纪80年代前,在中国还没有汽车防盗的概念,汽车普遍没有专门的防盗装置。当时不管是轿车还是其它车辆,防盗功能通过限制车门锁和点火开关实现。如果偷窃者撬开车窗拧开车门,短路点火开关,就能将汽车开走。随着汽车和私家车越来越多,车辆防盗产品已经成为不可少的装备。购买和使用汽车时,它们都得到充分的重视。因而,已形成了“用户愿意用,厂商积极装”的局面。
从技术种类上划分,车辆防盗产品基本可分为三类:机械防盗装置、电子(机电)防盗报警装、联网的防盗枪报警(定位、跟踪)系统[1]。从制造和安装环节上划分,车辆防盗产品分为“原装”(即车辆在设计、制造过程中已确定并安装)的和“后装”(即车辆出厂后由经销商、保险商或用户另行选定并安装)的两类。
无论车辆防盗产品如何琳琅满目,如今更新换代,万变不离其宗。它的基本作用一是防范车辆未经授权被非法启用;二是及时发现,制止盗窃车辆的行为。与此对应的基本防范手段主要包括。与此对应的基本防范手段主要包括: 增加未经授权非正常开启车辆的难度(如增加各种机械的、电子的锁定环节,提高钥匙和操作的保密性等):增加车辆电路、油路控制或闭锁环节,限制非正常发动车辆对入侵行为进行探测并及时报警。
随着车辆安全防范”道高一尺、魔高一丈”的形势变化,仅仅使用“物防”(对车辆的自身装置进行改进)的方式已经远远不能满足汽车防盗的要求。因此,需要防盗防劫报警(定位、跟踪)系统车辆上除了防盗报警装置,还有通信装置,使随时随地的监控成为可能,人力救援能及时介入,才能极大提升”人防”的作用。在无线技术日益普及的今天,应该能够借助已有的无线技术传输无线报警信号。这是基于这样的一种情形下,提出了车辆无线语音防盗报警系统的方案,能通过语音告知车主汽车的状态,实现汽车语音报警信息的无线传输、车主对车况的无线查询,人对车辆安全的随时随地关注与支援.使车辆不再孤单,是一种实时的、交互的报警系统。
1.2发展现状
1.2.1国内外防盗装置现状
目前国内常用防盗装置的技术特点分析:
1、GPS系统或汽车中心电脑防盗系统。此系统采用较复杂、水平较高的技术,由于采用较多的进口零部件,因此需要较高的生产成本和维护使用成本,其防盗可靠性也较高。但存在技术缺陷主要是:盗车者可以更换或破坏防盗系统而使防盗失效,同时如果用户丢失控制器(或电脑钥匙)后,修复(或更换)防盗系统费用较高。
2、国内目前普遍采用的中档电子防盗系统(电子智能防盗系统)[2]。由于电子密码钥匙只控制电子锁的锁芯,盗车者只要更换锁芯或破坏锁芯就可使防盗系统失效。同时丢失电子钥匙后需要更换锁芯及专配电子钥匙其费用也近千元。装车成本也在千元以上。
3、一般外置式防盗锁及带锁防盗装置。如方向盘锁、轮锁、刹车锁、排档锁等,因其外置方式或采用较普遍的锁芯,使盗车者较易开启或破坏。成本在数百元以上。
4、其它特殊防盗装置。如汽车离合器飞轮防盗装置等,因其安全性及可靠性使汽车制造商及用户较少使用。
分析国内外汽车防盗技术发展方向,发现先进的汽车防盗技术应具有以下技术特征:
1、可靠性。作为一种汽车的防盗技术,其根本目的是汽车防盗,因此其技术上应保证防盗技术、装置(或结构)可靠性,让盗车者不易开启、破坏和更换。
2、低成本。汽车防盗装置应从技术上保证其较低的生产成本、较低的使用和维护成本以及较低的更换成本。
3、安全性。汽车防盗装置不能因为其安全可靠性而影响汽车的行驶安全性,更不能因为防盗装置出现故障而造成汽车行车事故。
1.2.2 全球汽车无线通信系统发展现状
Telematics技术是“汽车无线通信平台技术”的简称。Telematics[3]是通信(Telecommunication)和信息科学(Informatics)的合成词,可定义为通过内置在汽车上的计算机系统、无线通信设备、卫星导航装置、互联网技术,来提供文字、语音、图像等信息传送的服务系统。
基于无线网络的Telematics,可以为机动车驾驶者和乘客提供路况介绍、交通信息、安全与治安服务以及娱乐信息服务。在车辆行驶过程中,通过地面无线通信网络和卫星GPS系统,驾驶员和乘客可以及时获得路况、交通信息、应急对策、远程车辆诊断、网络应用(包括金融、新闻、E-mail等)等各种服务。通过Telematics提供的服务,用户不仅可以了解交通信息、临近停车场的车位状况,确认当前位置,还可以与家中的网络服务器连接,及时了解家中的电器运转情况、安全情况以及客人来访情况。由于拥有良好的应用前景,Telematics被认为是未来的汽车技术之星。一些发达国家已相继推出Telematics服务
目前,全球各区域的主要发达国家都已经推出了Telematics业务。全球Telematics市场主要分布在北美、欧洲及亚太地区。北美地区包括加拿大与美国;欧洲地区主要包括英国、法国、德国与意大利;亚太地区主要为日本、韩国及澳大利亚。北美是全球Telematics市场的领导地区,其市场总值在2005年之前甚至大于全球其它各地区市场总值的总和。据统计,2001年北美地区Telematics的市场总值接近40亿美元,而欧洲仅1.6亿美元,亚太地区仅有0.8亿美元[3]。但近几年来,欧洲与亚太地区的增长态势不容忽视,相比于北美地区年均19%的增长率,欧洲与亚太地区从2001年开始以高达50%的增长率增长,估计至2010年仍可维持30%左右的年增长率[3]。
北美市场的Telematics市场应用主要是以安全及防范服务为主,服务提供商主要有通用汽车公司和福特汽车公司。2003年,克莱斯勒公司的加入加快了Telematics市场的发展。预计2007年,将有500万台左右的汽车配备Telematics系统。由于受到汽车寿命因素的影响,到2015年,装配Telematics系统的汽车将不会超过50%。但是到2025年,美国所有的车辆将会配备Telematics系统。
在欧洲,由于各国的路况以及相关配套设施的差异较大,导致整体的Telematics市场发展有一些障碍。但在英国、法国、德国与意大利等国家,Telematics市场的发展势头很好。现有的Tele-maitcs应用以车辆导航装置和交通信息服务为主,紧急救助及安全业务也在迅速起步。
从1990年下半年开始,日本通过VICS(Vehicle Informaion & Communication System)基金组织向全国提供主要交通信息及导航服务。目前,日本的交通信息服务比紧急救助和安全服务更为成熟,但以紧急救助及安全服务为主的市场也在迅速扩大。
1.3无线防盗报警系统设计要求及其意义
本设计要求设计一种无线语音防盗报警系统,能通过语音告知车主汽车的状态。是一种完全自动的主动态系统,不需要人为干涉,不需要遥控。发生盗情时,车体的无线通知自动工作,解决远距离同步通知车主的问题。本防盗系统将汽车的防盗报警设为两种状态:插入合法点火启动钥匙,撤警,旋转钥匙,点火启动正常运行:未插入钥匙,布警,发生盗情,系统自动工作。无线语音通知车主报警。车辆无线语音防盗报警系统是在防盗系统中,通过凌阳61板控制PC机、无线通信芯片及相应的语音芯片,达到通过无线通信来实现车辆和PC机之间的互连,完成车辆的实时监控。整个系统必须满足以下的要求:
(1) 车辆状态感应功能:防盗报警系统在车辆方面,插入合法点火启动钥匙,撤警,旋转钥匙,点火启动正常运行:未插入钥匙,布警,发生盗情,发出车辆被盗信号,并及时通知车主。
(2) 无线通信功能:车辆在发出报警信号后,应该能通过无线传输芯片(上海桑瑞公司的SRWF-501无线模块)进行发送和接收信号。
(3) 语音报警功能:在接收报警信号后,PC机根据接收信号打开USB接口,控制语音芯片(中青公司的PM50)进行报警。其中,还要实现PM50芯片对语音信号的采集,以达到真人真声的报警效果。
(4) 车辆状态查询功能:对接收到的信号进行识别,判断是哪辆车处于哪种状态,并将其信息写入总数据库及相应的分数据库,通过查询功能,查看车辆报警的日志。
此系统的优势在于:是一种完全自动的主动态系统,不需要人为干涉,不需要遥控。发生盗情时,车体的无线通知自动工作,解决远距离同步通知车主的问题。在这种方案里.汽车防盗报警装置置无线通信芯片与指定的车主实时沟通,通过无所不在的无线通信网络.实现随时随地监控车辆的状况,可以得到车主及时“关注”.得到更及时、更强大的人力救援。
1.4论文的组织结构
论文采用软硬件结合的方式,以PC机作为监控计算机,应用VC、SQL等语言设计监控系统,应用单片机控制语音芯片报警,完成这个汽车防盗报警系统的设计。
论文共分为六章,组织如下:
第一章 绪论,主要说明汽车无线语音防盗报警系统的开发背景,发展现状及设计的方案选择及其意义。
第二章 车辆无线语音防盗报警系统的构成主要介绍系统设计的总体方案以及构成系统的几个主要因素。分别对这几个部分进行简要的介绍。
第三章 车辆无线语音防盗报警系统硬件部分设计主要阐述硬件部分的详细设计,介绍了详细的语音制作过程,并对硬件接口相关知识做了简要的介绍。
第四章 车辆无线语音防盗报警系统软件部分设计主要阐述了软件部分的详细制作过程,对于如何实现数据传输、处理,进行了详尽的介绍,并介绍了VC控件方面的相关知识。
第五章 总结与展望介绍了完成系统的优缺点,设计过程中遇到的问题及系统的发展前景。

第二章 车辆无线语音防盗报警系统的构成
2.1车辆无线语音防盗报警系统的总体方案
本设计利用上海桑锐公司的SRWF-501无线模块实现报警语音信息的无线传输,语音信息利用中青公司的PM50采集,系统的中央处理器利用凌阳61板实现。实现汽车语音报警信息的无线传输、车主对车况的无线查询。
此无线语音传输系统分为四个模块:中央处理器的中断程序模块、PC机的串行通信及数据库操作模块、无线芯片传输模块、中青公司的PM50芯片语音采集模块。
中央处理器的中断程序模块主要负责接收PC串口发送过来的报警信息,通过中断的方式控制中青公司的PM50芯片实现报警。
PC机的串行通信及数据库操作模块负责实现串口通信的操作,将串口接收来的信息加入数据库进行处理,完成报警信息的查询功能。
无线芯片传输模块负责报警信号的发送与接收。
中青公司的PM50芯片语音采集模块主要实现语音信息的录入,并根据接收到的中断指令实现实时报警。整体方案设计框图如下:

图 2.1 车辆报警系统整体方案设计框图
2.2车辆无线语音防盗报警系统的构成
本系统主要由四部分组成,一是用于整体系统控制的单片机,一是用于监控的PC机,一是用于无线传输的上海桑瑞501芯片,一是用于语音采集的中青公司PM50芯片,这四部分相辅相成,构成了整个车辆无线防盗语音报警系统。
2.2.1单片机
单片机是整个系统的控制部分,本系统选择了凌阳大学的凌阳61板作为控制单片机。随着单片机功能集成化的发展,其应用领域也逐渐地由传统的控制,扩展为控制处理、数据处理[6]以及数字信号处理(DSP,Digital Signal Processing)等领域。凌阳的16位单片机就是为适应这种发展而设计的。它的CPU内核采用凌阳最新推出的μ’nSP™(Microcontroller and Signal Processor)16位微处理器芯片(以下简称μ’nSP™)。围绕μ’nSP™所形成的16位μ’nSP™系列单片机(以下简称μ’nSP™家族)采用的是模块式集成结构,它以μ’nSP™内核为中心集成不同规模的ROM、RAM和功能丰富的各种外设接口部件。
μ’nSP™内核是一个通用的核结构。除此之外的其它功能模块均为可选结构,亦即这种结构可大可小或可有可无。借助这种通用结构附加可选结构的积木式的构成,便可形成各种不同系列派生产品,以适合不同的应用场合。这样做无疑会使每一种派生产品具有更强的功能和更低的成本。
μ’nSP™家族有以下特点:
(1)体积小、集成度高、可靠性好且易于扩展
μ’nSP™家族把各功能部件模块化地集成在一个芯片里,内部采用总线结构,因而减少了各功能部件之间的连线,提高了其可靠性和抗干扰能力。另外,模块化的结构易于系统扩展,以适应不同用户的需求。
(2)具有较强的中断处理能力
μ’nSP™家族的中断系统支持10个中断向量及10余个中断源,适合实时应用领域。
(3)高性能价格比
μ’nSP™家族片内带有高寻址能力的ROM、静态RAM和多功能的I/O口。另外,μ’nSP™的指令系统提供具有较高运算速度的16位×16位的乘法运算指令和内积运算指令,为其应用增添了DSP功能,使得μ’nSP™家族运用在复杂的数字信号处理方面既很便利,又比专用的DSP芯片廉价。
(4)功能强、效率高的指令系统
μ’nSP™指令系统的指令格式紧凑,执行迅速,并且其指令结构提供了对高级语言的支持,这可以大大缩短产品的开发时间。
(5)低功耗、低电压
μ’nSP™家族采用CMOS制造工艺,同时增加了软件激发的弱振方式、空闲方式和掉电方式,极大地降低了其功耗。另外,μ’nSP™家族的工作电压范围大,能在低电压供电时正常工作,且能用电池供电[6]。这对于其在野外作业等领域中的应用具有特殊的意义。
SPCE061A的结构如图2. 2所示

图2.2 SPCE061A的结构
2.2.2监控计算机
本套系统中的监控计算机除了配置和管理整套系统外,大部分的时间是处理各前端系统传回的状态信息并将这些信息显示在屏幕上,因此,计算机的信息处理任务不是很重,对可靠性的要求也不是特别严格。而整套系统是一套低成本的可被广泛使用的防盗报警系统,这样也就使任何一台能连入网络的计算机只要安装了防盗报警系统的监控软件后,即可当作防盗报警系统的监控主机,极大地提高了整套系统的使用范围和减少了系统的使用限制,同时也降低了整套系统的成本。
2.2.3无线传输芯片
SRWF-501型微功率无线数传模块[7]是上海桑锐电子科技有限公司采用高效FEC前向纠错技术结合高性能的无线射频IC CC1020, 以及高速微处理器相结合开发出的一款无线通信模块,可与SRWF-505、SRWF-506、SRWF-507、SRWF-508进行无线通信。该无线通信模块具有很强的抗干扰能力, 全透明传输, 体积小,功耗低传输距离远的特点,为确保报警信号的可靠传输提供了良好的环境。
芯片外形如图所示:

图 2.3 501芯片外形图
SRWF-501-50提供两个串口,COM1(CON1的Pin3、Pin4)固定为TLL电平的UART串行口;COM2(CON1的Pin6,Pin7)可通过J1的D位来选择接口方式.
本设计中,无线传输模块与PC机的232串口连接,其接口方式如下:
D=1(插短路器 如图:

图2.4 501芯片与用户接口图
使用的线束只留下4根线,如下:

图2.5 501芯片连PC串口
501芯片连接PC机时,不连接电源部分,电源部分采用外置的电池盒供电,供电电压一般为3――5V。
2.2.4语音报警芯片
PM50系列智能语音芯片是中青世纪科技公司2003年最新开发的智能语音产品,它既是语音播放电路,也是智能单片机。其音质水平、价格都要略优于著名的ISD电路,同时也有21KHZ高保真音质。而其开发设计简单度、智能控制的简单度、整体性价比等指标要远胜过ISD,而如果用量超过1~3万片,可以原样投产掩膜片,价格更低至五~十分之一。可以说,该芯片连同具有USB电脑接口的atvoc-PM50语音编程开发系统一起,开创了数码语音电路的新纪元,是智能语音电路的一场革命。
   该芯片由专用的语音单片机和FLASHRAM存储器集合构成,它既有几秒到200秒的多段语音播放功能,也有单片机可编程的智能特性,大规模复杂电路已经缩微到只有COB28封装(18*36mm)的印板上,可以方便地作为DIP28封装的标准集成电路来使用。
一:特点
(1)、 使用上可以和普通音乐片一样简单方便
(2)、 FLASHRAM结构,可以反复擦写录入,寿命在1万次以上[8]
(3)、 电源电压3~6V,静态电流1uA,工作电流50mA
(4)、 直接驱动8欧姆0.5瓦的喇叭
(5)、 一系列多规格可互换,开发系统共用
(6)、 录制的语音可分1~8段或128段
(7)、 自带八个输入端口,九个输出端口,功能均可由用户自定义
(8)、 开发系统采用最新的USB电脑接口
(9)、 开发用的电脑软件系超智能傻瓜图形设计,外行也能使用
(10)、配合编程软件可以开发出并行、串性、智能型等多种控制模式
(11)、开发系统支持用户对PM50芯片在线编程(ISP)
(12)、音质比著名的ISD产品略好,同时也有21KHZ高保真音质。
(13)、最小系统的外围电路只需一只振荡电阻、一只电源滤波电容。
(14)、有13/20/50/100/250/400秒多个时间档次可选。
(15)、完成开发和试验生产后,直接用源文件投产掩模芯片,电路设计、音质 效果、功能性能不变。
二、PM50系列编号及功能
型号 功能特点 封装 备注
PM5013 FLASH,13秒,1~128段 COB28
PM5020 FLASH,20秒(8KHZ),1~128段 COB28
PM5050 FLASH,50秒,1~128段 COB28
PM50100 FLASH,100秒,1~128段 COB28
PM50250 FLASH,250秒,1~128段 COB28
PM50400 FLASH,400秒,1~128段 COB28
PM5108 MASK,8秒,1~8段 裸片
PM5112/16/20/24 MASK,12/16/20/24秒,1~128段 裸片
PM5132/40/48 MASK,32/40/48秒,1~128段 裸片
PM5164/80/96 MASK,64/80/96秒,1~128段 裸片
表2.1 PM50系列编号及功能
三、PM50外围管脚图和实物照片
PM50SS(COB16)管脚定义表

脚号 名称 用途 脚号 名称 用途
1 GND 电源地端 16 FM 编程端
2 FC 编程端 15 FD 编程端
3 FA 编程端 14 FK 编程端
4 K1 输入 13 RET 复位端
5 K2 输入 12 OUT1 输出1
6 ROSC 振荡电阻 11 LED1 指示灯
7 SP1/DAC 喇叭端 10 K5 输入3
8 SP2 喇叭 9 VDD 正电源端

图2.6 PM50芯片管脚图
附:
1 、电源电压为3~6V,静态电流约1uA 。
2 、振荡电阻上拉到正电源,在正常品质下振荡电阻一般取值240K标准值是255K);在高级品质(HQ)下 振荡电阻一般取值120K 。
3 、任何喇叭端严禁接地或串接喇叭后直接接地或正电源。
4 、 PM50 板上可以焊接两个器件:滤波电容0.1UF,振荡电阻240K,可选贴片器件。装上后,外部不需要再装。另外在PM50编程器内部已装有240K振荡电阻,测试或演示时PM50板上无须再装振荡电阻。

第三章 车辆无线防盗语音系统硬件部分设计
车辆无线防盗语音报警系统的硬件部分主要由单片机(凌阳61板)进行中断控制,通过PM50进行采集语音信息(即通过相应的软件录制语音,再烧录到芯片中),最终完成报警功能。此部分要完成RS232串口与RS485串口的转换工作,因此在本章开始先介绍下有关串口通讯方面的知识,而PC机串口通信部分编程将在下一章软件设计部分介绍。
3.1 串行通讯
3.1.1 串行通讯的基本概念
通讯即为与外界的信息交换。基本的通讯方式有并行通讯和串行通讯两种。
一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位传送,传按位顺序进行,最少只需一根传输线即可完成,成本低但传送速度慢。串行通讯的距离可以从几米到几千米。
一条信息的各位数据被同时传送的通讯方式称为并行通讯。并行通讯的特点是:各数据位同时传送,传送速度快、效率高,但有多少数据位就需多少根数据线,因此传送成本高,且只适用于近距离(相距数米)的通讯。
根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种。信息只能单向传送为单工;信息能双向传送但不能同时双向传送称为半双工;信息能够同时双向传送则称为全双工。
串行通讯又分为异步通讯和同步通讯两种方式。在单片机中,主要使用异步通讯方式。
3.1.2 串行接口
目前较为常用的串口有9针串口(DB9)和25针串口(DB25),通信距离较近时(<12m),可以用电缆线直接连接标准RS232端口(RS422,RS485较远),若距离较远,需附加调制解调器(MODEM)。最为简单且常用的是三线制接法,即地、接收数据和发送数据三脚相连。在本系统中使用的是9针串口,因此这里对其进行简要说明。

1. DB9的常用信号脚说明:

 9针串口(DB9)
针号 功能说明 缩写
1 数据载波检测 DCD
2 接收数据 RXD
3 发送数据 TXD
4 数据终端准备 DTR
5 信号地 GND
6 数据设备准备好 DSR
7 请求发送 RTS
8 清除发送 CTS
9 振铃指示 DELL
表3.1 DB9和DB25的常用信号脚表
2.RS232C串口通信接线方法(三线制):
首先,串口传输数据只要有接收数据针脚和发送针脚就能实现:同一个串口的接收脚和发送脚直接用线相连,两个串口相连或一个串口和多个串口相连
同一个串口的接收脚和发送脚直接用线相连9针串口和25针串口,均是2与3直接相连; 两个不同串口(不论是同一台计算机的两个串口或分别是不同计算机的串口)
9针-9针 25针-25针 9针-25针
2 3 3 2 2 2
3 2 2 3 3 3
5 5 7 7 5 7
表3.2 串口指针表
上面表格是对微机标准串行口而言的,还有许多非标准设备,如接收GPS数据或电子罗盘数据,只要记住一个原则:接收数据针脚(或线)与发送数据针脚(或线)相连,彼些交叉,信号地对应相接,就能百战百胜。
3.串口调试中要注意的几点:
• 不同编码机制不能混接,如RS232C不能直接与RS485接口相连,市面上专门的各种转换器,必须通过转换器才能连接;
• 线路焊接要牢固,不然程序没问题,却因为接线问题误事;
• 串口调试时,准备一个好用的调试工具,如串口调试助手、串口精灵等,有事半功倍之效果;
3.2 PM50语音录入
防盗报警系统的一个重要部分就是语音提示部分,语音报警功能使得整个监控系统变得更加智能化,本节将重点介绍语音报警部分的设计。
3.2.1 PM50语音录入软件使用
PM50开发软件V2.03版[5],主要增加了“智能2代编辑(POWER 2 EDIT)”功能。该设计综合了“标准编辑”、“串行编辑”、“智能编辑”、“HQ标准编辑”、“串行智能编辑”五种编辑模式的功能,将过去版本中一个按键或一个串行放音命令只能播放一个语音文件增强到播放一组(可多达100个)语音文件的功能;另外允许在串行控制模式中也能使用HQ高品质声音;新设计使用户操作更简单快捷。V2.03版本的安装需要重新运行“PM50 SETUP(V2.01)”安装软件,然后再运行“PM50_WRITER_V2.03”烧写软件。软件界面如图4.1所示:

   图 3.1 PM50_WRITER_V2.03软件界面
在智能2代编辑模式下,首先是客户根据设计需要选择是“并行按键模式”(KEY Interface)还是“串行MCU控制模式”(Serial Interface)。后者只能用MCU控制,而且仅用三根I/O线按串行协议控制即可;而前者可以由MCU控制,也可以由手动按键控制。在“并行按键模式”(KEY Interface)下,可以对KEY1~KEY8赋予功能:
(1)选择触发功能,有六个触发状态可以选择(同前);
(2)选择音质功能,有普通(NQ,4.8~12KHZ)和高品质(HQ,8.4~21KHZ)可选;
(3)选择键组(Group),按一个按键,第一次发音的各段语音是一组;再按同一个键 第二次,播放的各段语音是第二组,以此类推,最大可容100组,每组可容120个语音文件;
(4)选择语音文件,从电脑内的任意目录里选择需要的WAV语音文件放入;也可以选择延迟静音文件,延迟时间在0.01~100秒可以选,该功能和”端口输出”设置配合,可以完成很多智能控制;
(5)选择取样率,可以选择每段语音文件的取样率,NQ下可选4.8KHZ、6KHZ、8KHZ、12KHZ;HQ下可选8.4KHZ、10.5KHZ、14KHZ、21KHZ;
(6)选择端口输出,LED1、OUT1~OUT4、OUT5~OUT8可任意设置。
上述设置完成后,软件会根据所有语音文件占用的时间自动选择可烧写的芯片容量和种类,用户存储该烧写文件,开始对芯片烧写即可. 在“串行MCU控制模式”(Serial Interface)下,可以对从80H~FFH的128个地址进行赋予功能:
(1)选择地址,从80H~FFH的128个地址任意选择.
(2)选择放置语音文件,每一个地址上可以顺序播放几个语音文件或延迟静音,最多可达120个.
(3)选择声音品质,有普通(NQ,4.8~12KHZ)和高品质(HQ,8.4~21KHZ)可选;
(4)选择取样率,可以选择每段语音文件的取样率,NQ下可选4.8KHZ、6KHZ、8KHZ、12KHZ;HQ下可选8.4KHZ、10.5KHZ、14KHZ、21KHZ;
(5)选择端口输出,LED1、OUT1~OUT4、OUT5~OUT8可任意设置。
上述设置完成后,软件会根据所有语音文件占用的时间自动选择可烧写的芯片容量和种类,用户存储该烧写文件,开始对芯片烧写即可。
3.2.2车辆报警语音制作
PM50 系列语音芯片有 20 秒、 50 秒、 100 秒、 150 秒、 200 秒等多个系列[8],电源电压 3~6V 均可,做语音组合用途时只需要占用外部单片机 3 根口线,可以最多分 128 段,直接驱动喇叭均使用。 PM5 系列芯片有 FLASHRAM 和 MASKROM 两个版本,在实验和小批量生产阶段可以使用 FLASHRAM 版本的芯片,可以反复修改其中的语音和分段,直到满意为止。当产品的生产、需求和语音内容完全定型后,就可以大批量投产 MASKROM 版本的芯片,编程软件和电路都无须变化,而价格却能降低几倍以上。 ATVOC-PM50 型编程器做产品开发、编辑和烧录的工具。该编程器采用最新的 USB 电脑接口设计,专为语音组合用途做了完善的设计,使语音组合设计变得非常简单、方便。在录入前,首先将PM50芯片连接到PC机上:
PM50芯片使用一条专用的USB连线将ATVOC-PM50语音编程器与电脑连接起来,直接使用电脑的USB接口及电源,无须其它电源。当脱离电脑做语音电路组件的测试、演示等工作时,可以另行加插5V直流稳压电源或6V的电池盒。本系统外接一个4~16欧姆阻抗的无源喇叭或音箱即可使用。
  PM50芯片连上USB线时,编程器的“POWER”指示灯亮起表示电源接通。WINDOWS2000/XP会自动识别硬件,并安装相应驱动程序。此过程结束后,安装系统附带软件光盘中PM50-WRITER,安装完毕后重新启动计算机,系统即可工作了。
   在电脑上打开“ATVOC PM50 USB WRITER”软件,在编程器的左边锁紧器上压上一片语音电路组件,点击软件界面上的“侦测PM50”按钮,显示连接测试成功,并显示该语音电路组件的型号,即可以完全正常工作。
   编程器上有两个锁紧器,可以同时编程两个电路组件。但只有左边一个具有烧录、测试等完整功能,右边的锁紧器只有烧录功能。
注意1:在系统上电时,请不要将语音电路组件放在编程器的锁紧器上,系统在上电过程中会将其上的语音电路组件自动清空,语音电路组件上的原有语音将全部丢失(抹音)。正常情况下,在系统上电后再将语音电路组件加上。
注意2:在装上电路组件时,如果方向插反,锁紧器下面的ERR错误指示灯会点红色亮,代表电路组件插反需调换过来。
在完成了上述安装以后,就可以将车辆报警信息录入到PM50芯片中了,步骤如下:
(一)、录制声音文件,自己对着电脑录音,录入“车辆报警,请注意,车辆报警,请注意”,因为实验中所用的PM50芯片的时间为20秒,因此没有录入过多内容。
(二)、使用 ATVOC-PM50 编程器,使用其中的串行模式菜单,将需要的这个文件放入菜单。声音文件听取无误后,存成一个文件名(如“车辆报警语音. PM5 ”),即可以联机烧写到 PM50S20 芯片中。
(三)、在 ATVOC-PM50 编程器上就可以对烧好的芯片测试,听取声音效果,听取无误后 ,与单片机相连,通过单片机中断控制语音芯片报警。

第四章 车辆无线防盗语音系统软件部分设计
软件设计部分是整个车辆防盗系统一个非常重要的组成部分,它负责连接无线传输芯片,并对接收到的信息进行处理,向单片机发送报警信号,通过单片机控制语音芯片报警。串口通信编程和数据库操作是软件部分的两大重要组成部分,本章将分别就这两方面技术的实现做详细的阐述。
4.1 VC开发环境
Visual C++ 6.0是目前国内最为流行的新一代面向对象的程序开发环境,它是美国微软公司推出的Visual Studio 6.0开发工具套件之一。由于Visual C++ 6.0具有优越的性能和强大的功能,因此它成为该开发工具套件中最为完善的软件开发系统之一。Visual C++ 6.0提供了一个高效的Windows编程环境,将程序和资源的编辑、编译、调试、运行融为一体,并且提供了大量的程序开发工具,如应用向导AppWizard、类向导ClassWizard[12]等。这些工具都高度集成于一个名为Developer Studio的开发平台中,利用该开发平台,用户可以自动生成应用程序框架,编写出各种各样的软件。而且,从最简单的基于对话的程序到复杂的多用户程序,都可以直接设计软件的Windows用户界面。除此之外,微软基础类库MFC使得应用程序框架、类框架及函数框架的自动生成更加快捷方便,大大提高了程序的质量。因此,在本套车辆防盗报警系统中采用VC++作为监控计算机的编程环境。
4.1.1 MSComm控件使用
MSComm 控件通过串行端口传输和接收数据[13],为应用程序提供串行通讯功能。MSComm控件在串口编程时非常方便,而且在VC、VB、Delphi等语言中均可使用。 Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,它为应用程序提供了通过串行接口收发数据的简便方法。具体的来说,它提供了两种处理通信问题的方法:一是事件驱动(Event-driven)方法,一是查询法。
1.MSComm控件两种处理通讯的方式
MSComm控件提供下列两种处理通讯的方式:事件驱动方式和查询方式。
1.1 事件驱动方式
事件驱动通讯是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者 Carrier Detect (CD) 或 Request To Send (RTS) 线上一个字符到达或一个变化发生时。在这些情况下,可以利用 MSComm 控件的 OnComm 事件捕获并处理这些通讯事件。OnComm 事件还可以检查和处理通讯错误。所有通讯事件和通讯错误的列表,参阅 CommEvent 属性。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm 控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个 MSComm 控件。
1.2 查询方式
查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查 CommEvent 属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是调制解调器的“确定”响应。
2.MSComm 控件的常用属性
MSComm 控件有很多重要的属性,但首先必须熟悉几个属性。
CommPort 设置并返回通讯端口号。
Settings 以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位。
PortOpen 设置并返回通讯端口的状态。也可以打开和关闭端口。
Input 从接收缓冲区返回和删除字符。
Output 向传输缓冲区写一个字符串。
下面分别描述:
CommPort属性 设置并返回通讯端口号。
语法 object.CommPort[value ] (value 一整型值,说明端口号。)
注意:必须在打开端口之前设置 CommPort 属性。
RThreshold 属性:在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。
CTSHolding 属性:确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。Clear To Send 是调制解调器发送到相联计算机的信号,指示传输可以进行。该属性在设计时无效,在运行时为只读。
SThreshold 属性: MSComm 控件设置 CommEvent 属性为 comEvSend 并产生OnComm 事件之前,设置并返回传输缓冲区中允许的最小字符数。
OnComm 常数
comEvSend 1 发送事件。
comEvReceive 2 接收事件。
comEvCTS 3 clear-to-send 线变化。
comEvDSR 4 data-set ready 线变化。
comEvCD 5 carrier detect 线变化。
comEvRing 6 振铃检测。
comEvEOF 7 文件结束。
InputMode 常数 常数值描述
comInputModeText 0 (缺省)通过 Input 属性以文本方式取回数据。
comInputModeBinary 1 通过 Input 属性以二进制方式检取回数据。
CDHolding 属性:通过查询 Carrier Detect (CD) 线的状态确定当前是否有传输。Carrier Detect 是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。该属性在设计时无效,在运行时为只读。
DSRHolding 属性:确定 Data Set Ready (DSR) 线的状态。Data Set Ready 信号由调制解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时为只读。
Settings 属性: 设置并返回波特率、奇偶校验、数据位、停止位参数。
InputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。
EOFEnable 属性:确定在输入过程中 MSComm 控件是否寻找文件结尾 (EOF) 字符。
Error 常数
comEventBreak 1001 接收到中断信号
comEventCTSTO 1002 Clear-to-send 超时
comEventDSRTO 1003 Data-set ready 超时
comEventFrame 1004 帧错误
comEventOverrun 1006 端口超速
comEventCDTO 1007 Carrier detect 超时
comEventRxOver 1008 接收缓冲区溢出
comEventRxParity 1009 Parity 错误
comEventTxFull 1010 传输缓冲区满
comEventDCB 1011 检索端口 设备控制块 (DCB) 时的意外错误
4.1.2 ODBC数据源
本系统中使用ODBC连接SQL数据库,本节简要介绍下ODBC数据源。
ODBC(Open Database Connectivity,开放数据库连接)[15]是由Microsoft定义的一种数据库访问标准,它提供了一种标准的数据库访问方法以访问不同数据库提供商的数据库,其本质上是一组数据库访问API。虽然数据库访问有多种方法,但ODBC以其编程相对简单,在实际编程中被广泛使用。
VC++中提供了一组封装了ODBC API的MFC ODBC类,以减少程序代码编写量。在VC++中使用MFC ODBC类访问数据库时,一般都是先配置或选择已有的数据源,再构造CDatabase类对象,打开数据源,用该数据库类对象和SQL(结构化查询语言)可以对库进行访问,再构造CRecordset类或其继承类对象,用数据集类对象和SQL可以实现对库中的表的操作。在VC++中用MFC ODBC类操作SQL Server数据库基本上也是这个思路。
4.2 建立系统SQL数据库
一个数据库中包含一个或多个的表。表是数据的集合,按行和列排列。每个表都有一个特定的主题, “车辆查询日志”数据库中包含有“车辆报警日志”、“车辆一报警日志”、“车辆二报警日志”“车辆三报警日志”。本节先介绍数据库的建立过程,然后介绍整个车辆无线语音防盗报警系统的数据库表的建立过程。
在安装了SQL以后,运行企业管理器[15],看到有服务器组的选项,双击,出现下拉列表,在数据库选项旁单击右健,选择“新建数据库”选项,命名为“车辆查询日志”这样一个新的数据库就建立了。
建立完数据库后,就可以创建数据库表。表属于数据库对象中的一种,是数据存储的基本单位,它包含了所有的数据内容。在SQL Server中,一个数据库中可以创建多个表,而且每一个表内可以包含多达1 024个列。列的数目及表的总大小仅受限于可用的硬盘存储容量。另外,每一个列最多可以有8 092字节[16](不包括image、text或者ntext数据)。

图4.1 SQL企业管理器界面
在【车辆查询日志】目录中右击【表】项,选择【新建表】命令,如图所示:

图4.2 SQL建“车辆查询日志”表
弹出【“车辆查询日志”中的新表】(即表设计器)对话框。在该对话框中,将自己所设计的表结构输入到【列名】文本框中,并设置该列的【数据类型】、【长度】以及【允许空】等信息,如图5-2所示。设置列名分别为“车辆”、“车辆状态”、“时间”,类型分别为“text”、“text”、“datetime”。再向其中添加相应纪录即可。如下图所示:

图5.3 为表中添加记录示意图
依照上述步骤建立数据库的四个表,表明分别为“车辆报警日志”、“车辆一报警日志”、“车辆二报警日志”“车辆三报警日志”。即完成整个车辆无线语音防盗报警系统的整个数据库建表工作,对于数据库表引用的将在下节中详细介绍。
4.3 车辆报警系统软件部分制作
车辆报警系统的软件部分主要由三部分构成,一是程序主界面,一是串口通信模块,二是监控数据库模块,下面将分别对这三个模块进行详细介绍。
4.2.1 程序主界面
程序主界面设计流程图如下:

图4.4 程序主界面设计流程图

程序主界面制作步骤如下:
一 建立项目:打开VC++6.0,建立一个基于对话框的MFC应用程序SCommTest ;
二 建立SmainDlg对话框
插入对话框:点击“插入”――“资源”命令,选择“对话框”,插入一个名为SmainDlg的对话框,设置对话框属性,标题设为“车辆防盗报警系统”,按“Ctrl+W”建建立一个CSmainDlg类。
插入位图:同样点击“插入”――“资源”命令,向工作区中导入一个位图资源设其ID为IDB_BITMAP1,在对话框上添加picture控件,设置属性,在类型下面选择Bitmap,在图像中选择IDB_BITMAP1即将位图插入到对话框中。
插入按钮:向对话框中加入按钮控件,设置按钮属性,标题设为“点击进入”,双击按钮添加消息响应函数,调用登陆对话框。添加“退出”按钮退出车辆报警系统。
对话框建立后结果如图:

图4.5 主对话框图
三 建立登陆对话框
对话框属性等的制作在前面介绍过了这里不再累述,这里主要介绍下登陆控制的制作:
插入静态文本控件:选择静态文本控件插入到对话框中,设标题分别为“用户名”、“密码”。
插入编辑控件:选择Edit控件加入到对话框中,ID使用默认设置,注意密码控件属性中要勾选password选项。按“Ctrl+W”[14]打开类编辑对话框,选择Member Variables选项,设置编辑控件变量名分别为“m_UserName”、“m_Pwd”类型选择Cedit型。
编写登陆按钮代码:双击按钮,添加代码,用strcmp函数进行比较,正确则弹出下一个对话框,不正确则提示错误。这里简要介绍主要应用的函数:
m_UserName.GetWindowText(mUserName,15);//获取编辑框内容
if (!strcmp(mUserName, “”));//判断编辑框内容
UpdateData(FALSE);//更新编辑框内容
CMenudlg dlg;
dlg.DoModal();//打开下一个对话框,这里注意在头文件加入头文件
具体代码见附件“车辆无线防盗语音报警系统VC源码”,这里不全部给出。
登陆对话框运行结果如图所示:

图4.6 登陆话框图
四 建立Menudlg对话框
插入菜单:点击“插入”――“资源”命令,选择“菜单”,单击“新建”命令插入菜单。
添加菜单选项:点击菜单栏中的空白框,设置其属性,本系统中设置了四个菜单项,分别为“串口数据传输”、“车辆状态查询”、“帮助”和“退出”四个选项。其中“串口数据传输”又有下拉项“数据接收”和“数据发送”两项,而“车辆状态查询”又有下拉项“总体查询”、“车辆一日志”、“车辆二日志”和“车辆三日志”四个选项。“帮助”下有“关于”和“用户信息”两个选项。
添加菜单消息处理函数:以“数据接收”为例,按“Ctrl+W”,选择“ID_MENURX”,点选“COMMAND”选择添加函数,即为其添加了一个消息响应函数,双击,可为其添加代码。此中添加的代码为对话框调用,前面介绍登陆对话框时有介绍,这里不再累述。
在对话框中添加菜单:右健单击对话框,弹出属性对话框,在菜单栏中选择“IDR_MENU1”即将菜单关联到对话框中。具体代码见附件“车辆无线防盗语音报警系统VC源码”。
对话框运行结果如图所示:

图4.7 报警系统对话框图
这样,整个程序主界面就设计完成了,下面将对数据传输部分和状态查询部分进行介绍。
4.2.2串口通信模块制作
串口通信设计流程图如下:

图4.8 串口通信设计流程图

数据传输界面制作步骤如下:
一 插入对话框
二 在项目中插入MSComm控件: 选择Project菜单下Add To Project子菜单中的 Components and Controls…选项,在弹出的对话框中双击Registered ActiveX Controls项(稍等一会,这个过程较慢),则所有注册过的ActiveX控件出现在列表框中。 选择Microsoft Communications Control, version 6.0,,单击Insert按钮将它插入到我们的Project中来,接受缺省的选项。
这时在ClassView视窗中就可以看到CMSComm类了(注意:此类在ClassWizard中看不到,重构clw文件也一样),并且在控件工具栏Controls中出现了电话图标(如图1所示),现在要做的是用鼠标将此图标拖到对话框中,程序运行后,这个图标是看不到的。

图4.9 对话框控件
三 利用ClassWizard定义CMSComm类控制对象 打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类,为IDC_MSCOMM1添加控制变量m_ctrlComm这时在对话框头文件中自动加入了//{{AFX_INCLUDES() #include “mscomm.h” //}}AFX_INCLUDES 。
四 添加编辑控件 向主对话框中添加两个编辑框,一个用于接收显示数据ID为IDC_EDIT_RXDATA,另一个用于输入发送数据,ID为IDC_EDIT_TXDATA,再添加一个按钮,功能是按一次就把发送编辑框中的内容发送一次,将其ID设为IDC_BUTTON_MANUALSEND。将接收编辑框的Properties->Styles中Miltiline和Vertical Scrol属性选上。
再打开ClassWizard->Member Viariables选项卡,选择CSCommTestDlg类, 为IDC_EDIT_RXDATA添加CString变量m_strRXData, 为IDC_EDIT_TXDATA添加CString变量m_strTXData。m_strRXData和m_strTXData分别用来放入接收和发送的字符数据。
五 添加Combo Box控件 向主对话框中添加一个Combo框,添加m_combolist变量,使用函数m_combolist.AddString(“车辆一安全”)为其添加下拉选项,共添加六个下拉选项供选择,分别为“车辆一安全”,”车辆二安全”,”车辆三安全”,”车辆一报警”,”车辆二报警”,”车辆三报警”系统根据选定的选项将响应的代码添加到编辑框中,具体语句为m_combolist.GetWindowText();
六 添加串口事件消息处理函数OnComm() 打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_MSCOMM1,双击消息OnComm,为方便记忆,将弹出的对话框中将函数名改为OnComm。这个函数是用来处理串口消息事件的,如每当串口接收到数据,就会产生一个串口接收数据缓冲区中有字符的消息事件,我们刚才添加的函数就会执行。
七 打开串口和设置串口参数 因为要实现报警信息的实时传送,所以设置在程序启动的时候就打开串口,在主对话框的CSCommTestDlg::OnInitDialog()打开串口,主要函数:
m_ctrlComm.SetCommPort(1);//选择串口
m_ctrlComm.SetPortOpen(TRUE);//打开串口
m_ctrlComm.SetSettings(“9600,n,8,1″); //波特率9600,无校验,8个数据位,1个停止位
函数具体代码见附件“车辆无线防盗语音报警系统VC源码”。
八 发送数据 先为发送按钮添加一个单击消息即BN_CLICKED处理函数,打开ClassWizard->Message Maps,选择类CSCommTestDlg,选择IDC_BUTTON_MANUALSEND,双击BN_CLICKED添加OnButtonManualsend()函数,并在函数中添加如下代码:
UpdateData(TRUE); //读取编辑框内容
m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据
九 设置自动发送 在ClassWizard中选上MessageMap卡,然后在Objects IDs选中CSCommTestDlg类,再在Messages框中选上WM_TIMER消息,单击ADD_FUNCTION加入void CSCommTestDlg::OnTimer(UINT nIDEvent) 函数,这个函数是放入“时间到”后要处理的代码:
OnButtonManualsend();//调用发送函数
再在在主对话框中加入一个复选接钮,ID为IDC_CHECK_AUTOSEND Caption: 自动发送(周期1秒),再利用ClassWizard为其添加BN_CLICK消息处理函数void CSCommTestDlg::OnCheckAutosend()主要语句:
SetTimer(1,1000,NULL);//时间为1000毫秒
为了方便运用,程序中设置了以16进制方式进行发送和接收显示的程序,具体代码见附件“车辆无线防盗语音报警系统VC源码”。
十 获取接收数据 发送报警信息 判断接收到的信号是安全信号还是报警信号,如果是安全信号,则弹出提示信息“汽车处于安全状态”,如果是报警信号,则提示“提示汽车被盗”并发出报警声。弹出提示信息的语句为:
AfxMessageBox(“汽车处于安全状态”);
AfxMessageBox(“汽车被盗”);
4.2.3 车辆状态查询模块制作
车辆状态查询模块主要完成对接收信息的管理,方便管理者对当前状态进行查询,主要涉及“总体查询”、“车辆一日志”、“车辆二日志”、“车辆三日志”四个部分,下面主要就以“车辆一日志”查询为例介绍整个连接数据库的详细过程。
在进行数据库连接之前,首先要设置ODBC数据源,做法[16]如下:
首先在控制面板中,打开ODBC数据源,如下图所示:

图4.10 ODBC数据源管理器
点击用户DSN选项,在出现的界面中点击添加,出现如下所示画面:

图4.11 选择SQL数据库
选择SQL选项,点击“完成”进入下一步创建新的数据源

图4.12 创建SQL数据源

点击下一步,选择更改数据库,将建好的数据库添加进去,如下图所示:

图4.13 链接SQL数据源

这样,就可以在VC程序中调用我们建好的数据库程序了。接下来介绍如何在VC程序中调用此数据库,以及把串口接收来的信息添加到数据库中。
一 建立对话框
二 添加控件 在对话框中添加列表框、编辑框、静态文本框、按钮控件,分别对其属性进行设置,并为编辑框、列表框添加变量,分别为“m_edittime1”和“m_car1”。注意在列表框属性重要选则显示格式为报告格式,编辑变量类型为COleDatetime类型。
三 添加数据库连接类 按“Ctrl+W”新建一个名为“CCar11”的类,类型选择CRecordset,点击确定,提示选择数据库,选择“车辆查询日志”数据库,按下一步,在弹出的对话框中选择表“车辆一报警日志”。设置对应数据库表中各变量的值,如下表所示 :

表 5.1:
变量ID 变量类型 变量名
车辆一 CString m_car1
状态 CString m_state1
时间 CTime m_time1
表5.1 “车辆一报警日志”变量表
四 添加头文件 当引用这个新建类的时候,需要在用到它的地方添加头文件#include “Car1.h”,同时还要在类中添加#include ,#include 头文件,以实现和数据库连接。
五 定义类、数据库指针 CCar11 *m_Car1; CDatabase m_database1;
六 列表框初始化 主要代码功能如下:
m_car1.SetBkColor(RGB(0xec,0xf1,0xfd));//设置背景颜色
m_car1.InsertColumn(1,_T(“车辆状态”));//设置列名
m_car1.SetColumnWidth(j, 150);//设置列的宽度
七 为查询按钮添加消息响应函数 函数主要代码功能简介如下:
m_database1.Open(_T(“车辆查询日志”);//打开数据库
m_car1.DeleteAllItems();//清空列表框内容
VariantTimeToSystemTime(m_edittime1, &systime)//获取系统时间
m_car1.SetItemText(i,1,(*m_Car1).m_state1);//向列表框中添加内容
八 将串口接收内容加入数据库 主要代码功能如下:
m_Car12=new CCar11(&m_database11);
m_Car12->Open();//指向连接数据库的类
m_Car12->MoveLast();//指向最后一条数据
m_Car12->AddNew();//添加记录
(*m_Car12).m_state1=strtemp4;//添加状态
编译运行整个程序,整个车辆防盗报警系统的软件部分就制作完成了,它完成了对数据信号的发送和接收以及对状态数据的存储即查询工作,实现了监控计算机所要完成的整体任务。
4.4 程序运行结果
一 启动界面:

图4.14 启动界面

点击进入登陆界面:

图4.15 登陆界面
输入的用户名和密码不正确,提示:

图4.16 出错界面

输入正确,进入主对话框:

图4.17 主对话框界面

点击“串口数据传输”菜单中的“数据接收”,弹出数据通信对话框:

图4.18 数据接收

点击“查询”菜单中的“车辆一日志”,弹出查询对话框

图4.19 报警日志查询

输入日期,即可显示当日的车辆报警日志。

第五章 总结与展望
在前面几章中,介绍了整个汽车无线语音防盗报警系统的研究目的、意义、发展现状及其详细制作过程。这一章中,将阐述完成的汽车无线防盗报警系统的优点和不足、在此次毕业设计中遇到的部分问题及其在今后的汽车报警市场的发展前景。
5.1系统的优缺点
本系统是在分析了当前汽车防盗报警系统市场的不足之后,运用了目前较为发达的无线传输技术,制作出了不需要人为干涉,不需要遥控,能够实现实时报警查询的汽车报警系统。
系统最大的优点即为其实时性,能否在盗情发生时及时通知车主,是每个车主最为关切的问题。本系统通过使用无线传输技术,很好的完成了这一要求。此外,通过应用数据库处理技术,对于报警日志的查询,也使得整个系统变得更加的完善。
尽管如此,由于系统中主要采用PC机作为监控系统,使得监控系统的移动性变差,不能够随时随地得到车辆的具体情况,也就是说,本系统的应用多半是在家中。

5.2 设计过程中遇到的问题
对于将重点放在理论学习方面的我们来说,本次设计遇到的最主要的问题就是理论与实践的具体结合:本次设计中用到了501无线传输芯片、PM50语音报警芯片以及61板单片机,其中涉及到RS232与RS485的转换,如何使各硬件能够在运行过程中很好的结合,是设计中遇到的最大难题。
本次设计过程中另一个主要的问题就是软硬件的结合问题,系统设计过程中用VC及SQL开发语言来制作实现整体系统的监控功能,要对无线芯片发送的数据进行正确的接收及处理,是整个监控系统的关键。判断故障原因是硬件方面还是在软件方面,也是此次面临的重大问题之一。
通过对各硬件说明书的仔细研究,到图书馆查阅有关方面的具体资料,以及应用万用表等设备测试各硬件的正常工作电压,经过不断实践,最终完成了系统的可靠传输报警。
5.3系统的发展前景
如今,汽车报警系统往往只局限于在车体内部添加报警系统,要安装比较精密的报警系统又要付出较高的代价,即便如此,所谓“道高一尺,魔高一丈”,仍然不能有效的减少汽车的被盗率。对于一些惯偷而言,汽车防盗装置仅能起增加盗车难度,延长盗车时间,及时报警及恐吓作用。比较安全的做法是将汽车停放在有专人看管的地方。而车辆报警系统实现了人车一体,在发生盗情的时候能够即使通知车主,弥补了目前很多报警系统的不足之处。
随着无线通信技术的发展,这种实时的无线语音防盗报警系统在市场上应该是有比较广阔的发展前景的,然而随着移动报警需求量的增加,相信将来车主们想要的,应该是更为高端的,移动性更强的汽车无线报警系统,而本文提到的这种家用式的无线报警系统也会朝着提高移动性方向发展。

参考文献
[1] 陆刚. 现代汽车防盗装置开辟汽车防盗新时代[J]. 汽车情报.2005,9:45~49.
[2]张山.汽车防盗有新招[J]. 交通时尚.2001,7:23~26.
[3]魏立勇、吕纪平.汽车防盗经验谈[J]. 交通与运输.2002,2:288~294.
[4]黄智伟. 无线发射与接收电路设计[M]. 北京: 北京航空航天大学出版社,2004. 34~89.
[5]罗亚非. 凌阳16位单片机应用基础[M]. 北京:北京航空航天大学出版社,2005. 56~78.
[6]李群芳、黄建. 单片微型计算机与接口技术[M]. 北京:电子工业出版社 , 2001.23~35.
[7]上海桑锐电子科技有限公司. SRWF-501模块使用说明书, 2005
[8]中青世纪科技PM50系列. 智能语音电路使用说明. 2004
[9]Frank L.Fricdman Elliot B.Koffman著 施平安译 C++精解和程序设计[M].北京:清华大学出版社 2003. 20~45.
[10]求是科技.单片机通信技术与工程实践[M]. 北京: 人民邮电出版社,2005. 78~90.
[11]Rappaport Theodore S .Wireless communications :principles and practice. Beijing :Publishing House of Electronics Industry,1998.
[12]北京博彦科技发展有限责任公司编译. Visual C++ 6.0开发教程[M].北京:清华大学出版社,2000.45~57.
[13]辛长安, 梅林编著.Visual C++编程技术与难点剖析[M]. 北京:精华大学出版社,2002.24~56.
[14]方可燕主编. Visual C++ 6.0实战与精通[M]. 北京:清华大学出版社 2002. 12~38.
[15]余晨,李文炬著,SQL Sever2000培训教程[M].北京:清华大学出版社,2001.77~90.
[16]康博创作室SQL Server 2000数据仓库设计和使用指南[M].北京:清华大学出版社,2001.80~93.

附 录
车辆无线防盗语音报警系统VC源码:

基于无线数传模块的公交车报站系统

Posted by 天际的荒草 | Posted in Docs | 文档 | Posted on 18-09-2009

标签:, , , , , ,

0

摘要 I
ABSTRACT II
第一章 绪论 1
1.1 研制目的和发展现状 1
1.2 报站系统的新发展 3
1.3 论文组织结构 4
第二章 总体方案 5
2.1 工作原理 5
2.2 模块简介 6
2.2.1 接收模块 6
2.2.2 发送模块 6
2.2.3 无线模块的使用 7
第三章 硬件电路设计 9
3.1 硬件总体电路设计 9
3.1.1 PROTELL99 软件简介 9
3.1.2 软件使用中的问题 10
3.2 RX100芯片介绍及其应用 12
3.2 TX100芯片介绍及其应用 14
3.3 单片机控制部分 15
3.3.1 单片机的发展历史 15
3.3.2 单片机的应用 16
3.3.3 单片机的基本结构 16
3.3.4 80C51单片机的引脚功能 17
3.3.5 串行通信 18
3.4 语音报站部分 19
3.4.1 语音芯片简介 19
3.4.2 芯片管脚 20
3.4.3 应用电路 21
3.4.4 智能语音芯片的制作流程 22
3.5 显示报站和手动报站部分 24
3.5.1 LED数码管显示部分 24
3.5.2 按键部分 26
第四章 系统软件实现 29
4.1 软件设计思想 29
4.2 MCS-51指令系统介绍 29
4.3 串行通信口的工作方式及关键代码 31
4.4 程序流程图 32
第五章 结论 35
5.1 总结 35
5.2 前景和展望 35
结束语 38
参考文献 39
附录1 总体设计图 41
附录2 完整程序 43

摘要
公交车已经成为一般工薪族和学生族出门必须的交通工具,目前公交车上采用的公交报站系统具有语音和显示报站的基本功能,但由于报站时采用司机手动切换,一方面增加了司机的劳动强度,另一方面由于司机的误报或漏报,造成乘客误下或漏下,对于公交运营产生了很大负面影响,更会对乘客造成很多不必要的影响。为此,研究公交车自动报站系统是非常必要的。
本文主要研究的是基于无线数传模块的公交车自动报站系统,该系统在公交车到站前10到20米语音报站,并且有LED数码管显示,到总站时公交车可向总站发送到站信息,方便总站安排公交车次;同时,为了防止自动报站系统故障时不能报站,该系统也设置了司机手动报站系统。
本文首先介绍了系统的总体方案和各个模块的具体框架图;然后介绍了控制该系统的MCS80C51单片机,收发报站信息的无线数传模块,用来语音报站的PM50语音芯片和手动报站的键盘和LED数码管等知识;最后对该系统进行了简要总结并提出对未来公交车系统的展望。

关键词 自动报站,80C51,单片机,语音芯片,pm50,无线数传模块,LED

ABSTRACT

Bus have became the most necessary means of transportation of wage-earners and students already, the public bus-stop announce system at present has the pronunciation function and can reveals the serial numbers and names of stops . But on one hand announcing the stops manually by the driver will increase the driver’s labor intensity, and on the other hand because of the driver’s wrong announce or failing to announce, it may cause passengers to leave by mistake or failing to leave . The phenomenon inferred above may run a negative influence on the public transit greatly, and can cause a lot of unnecessary influence on the passengers. For this reason, it is essential to study the bus-stop auto-announce system.
The main content researched in this thesis is the bus-stop auto-announce system based on the wireless transceiver module .This system announces the stop while the bus gets to the station in 10 to 20 meters, and it can reveals the serial number and name of stop with LED , when a bus gets to the master station ,it can send the information of its arrival to the master station which can help the master station to plan a schedule.Meanwhile, in order to prevent the matter that the system fail to run because of breakdown of this system, it also fits driver’s manual stop announce system.
The thesis analyses the overall scheme of the system and concrete frames of each module at first. Then it recommends MCS80C51 single chip microcomputer used to control this system, wireless transceiver module used to receive and send information of announcing , knowledge of PM50 pronunciation chip , the manual keyboard and LED used for announcing etc. In the end , it summarizes this system briefly and put forward the future developments of bus system.

KEY WORDS bus-stop auto-announce, 80C51 single chip microcomputer, pm50, wireless transceiver module, LED

第一章 绪论
1.1 研制目的和发展现状
随着社会的发展,公交车已经成为我们许多人出行必不可少的交通工具,在日常生活中,我们经常会遇到这样的情况:公交车每到一站,都需要人为的按报站器,有时会过站再按,有时甚至不报站,给不少乘客带来不便;即使有售票员报站,也会因其地方口音,使外来乘客产生误解,引起不必要的麻烦,而准确的报站则直接影响到我们的正常日程。
目前公交车上采用的公交报站系统具有语音和显示报站的基本功能,但由于报站时采用司机手动切换,一方面增加了司机的劳动强度,另一方面由于司机的误报或漏报,造成乘客误下或漏下,对于公交运营产生负面影响。全自动公交车语音文字报站系统是针对公共汽车公司需求设计而成,与其他同类产品区别在于:采用全自动的方式进行自动报站,完全不需要驾驶员在进站前操作键盘,防止司机分散注意力,真正实现自动报站功能,将公交报站器提高一个新档次,是传统公交报站器更新换代的产品。同时可以与LED电子显示条屏配套应用,实现语音、文字同时报站功能,为公交车装备现代化,提高服务档次起到本产品应尽的责任。
目前的公交车自动报站系统主要有以下三种:
第一种是GPS(Global positioning system,全球定位系统)自动报站系统,现在已经正式上市,他可通过GPS全球定位技术(误差在4米以内)确定公交车位置,自动报出车辆所在站名,以及服务用语,在特殊情况下还可以把手动报站,车内呼叫等功能一并实现,还可以连接车内LED(Light emitting diode ,发光二极管)大屏显示广告以及站台信息,该系统还可以和GPRS( General Packet Radio Service, 通用分组无线业务)通讯系统连接,实现实时监控公交车运行请况,实现总调度过程。
GPS 系统是由美国国防部开发的高精度卫星导航系统。用户通过用户设备接收GPS 卫星信号,经信号处理而获得用户位置、速度等信息,最终实现利用GPS 进行导航和定位的目的。GPS 语音自动报站系统,采用先进的卫星定位技术彻底改变了传统公交车语音报站器必须由司机操控才能工作的落后方式,进站、出站自动播报站名及服务用语,准确、及时、完全不需要人工介入,是公交车语音报站器的一项技术革命,它将为公交车的管理人员和乘客带来福音,实现了公交车报站器的完全智能化。目前,国内GPS 语音自动报站系统处于试验阶段,仅有北京,广州、青岛等几个城市采用GPS 语音自动报站技术。
基于GPS 的公交车自动报站系统能完全实现预定的功能,能大大降低司乘人员的劳动强度,加大公共交通运营管理力度,增强公交车管理的科学性。对维护运营秩序、提高运营效率、保证运营安全和促进智能公交的发展都具有积极意义。目前的系统还存在一些不足,在有些城市,因为树木、高楼的遮挡,存在有些路段接收不到GPS 信号的问题,这就需要利用陀螺仪等其它辅助定位系统和GPS 定位相结合进行定位。系统下一步发展趋势,是GPS 自动报站系统和GPRS 技术和GIS(Geographic information system,地理信息系统) 相结合,即把GPS 定位、GPRS 无线通信网和城市地理信息系统结合起来,对城市的车辆进行实时的控制与管理,形成城市的智能交通网络,进一步促进城市交通的发展。
第二种是基于电磁波理论的公交车自动报站系统。
可利用公交车上现有的移动电视来接收电磁波,从而显示信息,并在车底部安装线圈并通以微量电流;在距站点数百米处的车道下埋设数匝线圈,其两端连向站牌;并在站牌上安装相关装置。
公交车以一定速度在路上行驶,在到站前会经过路下线圈,路下线圈切割车上通电线圈所产生的磁场而产生感应电流。电流流经站牌,触动内部装置,使站牌发送出电磁波。在车上的乘客就能从荧屏上获取相关报站信息。
该系统的优点是能准确报站,不但给乘客带来方便,而且能让司机更加专心于驾驶,加强了道路安全性。但是铺设价格昂贵,其可靠性也没有实际验证,现在只有部分专家支持,并没有实际使用。
第三种是基于单片机的公交车自动报站系统,而这种系统又大致由两种技术支持。
其中一种的技术关键是对车轮转轴的转角的脉冲进行计数,将计数值与预置值对比,即可确定报站时刻,达到准确自动的目的。以AT89C51为CPU(Central Processing Unit,中央处理器)在中断处理程序中对外来脉冲计数,利用ISD4004输出语音。系统完成后就可以上机调试,使用时可用配套的烧写器将站与站之间的距离写入单片机内,如果不知道距离可以在机上采用手动方式输入,使装置处于输入状态,出站时按下录入键,到站时按下确定键,就可以将站与站之间对应的数据写入单片机。使用中如果出现错报,采用手动调整即可。该方式应用89C51单片机的高速计数器端口进行脉冲计数,以距离来控制报站时刻,首次实现了模糊控制,改变现有设备的不足。做到简单实用自动化程度高。传感器在公交车上的应用极大的提高了设备功能。
但是在改变线路或者增加站台等情况时,修改程序比较复杂,尤其是遇到突发状况时司机的任何解决突发状况的方法都将使该系统不能正常运作,目前该系统在实际中使用较少。
另外一种基于单片机的公交车自动报站系统就是利用无线数传模块来实现的。每个站牌上设一个发送装置(主要是TX100芯片),每辆公交车上设一个接收装置(主要是RX100芯片),发送装置不断发送信号,接收装置即公交车在离站10到20米的时候接收到信号,然后就自动语音报站,同时设有LED数码管显示和手动报站装置。这种就是该论文中设计的报站系统,接下来的论文将详细介绍。
这种报站系统软件编写简单,修改容易,而且芯片价格低廉,大批生产比GPS系统达到更高的性价比,是公交车自动报站系统的较佳选择。
另外,现实生活中,如果调度室能够掌握每辆公交车的到站情况,可以提高公交系统的工作效率。 但公交线路多处于繁华地带。如果采用有线方式来传输数据,不但铺设线路的施工复杂、成本高,而且,如果日后公交线路需要变更(如车站位置更改) ,改变链路会十分麻烦。
在前面提到的GPS系统中这个问题解决的比较好。还有一种便捷的无线数据传输途径是通过移动通信中的发送手机短消息方式,即在每个车站安装手机短消息收发系统,以发送短消息的方式来传输到站信息。 但是公交车站间通信次数比较多,通信费用会比较高。 既便捷又经济的方法是在每个车站安装无线数传模块来传输数据。 但若采用以调度室为基站的主从方式进行通信,需要很大的发射功率来保证覆盖所有的车站,同时车站也要有很大的发射功率来保证基站能收到车站上传的信号。 因此,采用基于令牌传输方式的无线接力数据通信是最理想的选择。
采用基于令牌传输方式的无线接力数据通信比较复杂,在该论文中的自动报站系统对这个问题的处理比较简单,只是在到达总站的时候公交车才会发送信息给总站,方便总站调度。
1.2 报站系统的新发展
目前大多数公交车报站系统设计主要考虑为公交车内的乘客服务,没有考虑到在站台等车乘客的需求。虽然站台有站牌,但对于盲人、识字不多以及对乘座公交车不太熟悉的人来说,还不是很方便;再加之,到达同一站台的公交车较多,也很容易引起乘客的混淆。
有关专家在原公交报站系统的基础上应用射频芯片NRF401设计了一款无线公交车报站系统,在该系统中,公交车内通过半自动报站设计的同时把该车的相关信息通过由NRF401组建的无线电路传送到站台,完成即将到站车辆的预报以及显示该车所经路线基本情况【1】。通过在站台增加语音播报和动态文字显示设计,使原来仅有一个站牌来提供简单静态线路信息的站台成为一个公交信息亭。方便了乘客乘车,有效地提高了公交运营公司的服务质量。
在系统中无线通信电路采用无线射频收发一体型芯片NRF401组建,当公交车快到达站台时,车内自动报站的同时通过无线收发电路把该路车车次、上下行等情况传输到站台,站台接收电路收到信息后送给单片机,由单片机控制完成站台的语音播报和液晶显示。
系统的硬件设计中充分考虑了性价比,用最少的器件设计出满足要求的硬件电路。该系统的总体结构以AT89C52单片机为核心,由ISD1420语音电路、模拟射频电路、LCD(Liquid Crystal Display,液晶显示屏)显示电路等组成。
本系统应用NRF401芯片来实现无线通信降低了系统成本,同时对单片机数据通信的差错采用循环冗余码控制和反馈重传方式,大大提高了数据通信可靠性,误码率很小。语音播报软件设计,使语音自然流畅,完个符合人们的自然习惯,同时为进一步设计功能更多、更人性化的公交报站系统做了技术铺垫。
2006年开始,济南部分地区就已经有这种公交智能预报系统。希望公交车报站系统能够越来越完善,越来越人性化。
1.3 论文组织结构
该课题以单片机为基础,重点研究无线数传模块以及语音芯片和单片机之间的数据收发问题,最后研制出可以实际应用的公交车自动报站系统。
论文共分五章,组织如下:
第一章绪论,主要说明研究课题的目的和研究意义,然后介绍公交车自动报站系统的发展和国内外的研究现状,最后介绍了本文的主要研究内容和论文的结构。
第二章总体方案,介绍了该系统的工作原理和各个模块的工作原理。
第三章硬件设计方案,介绍了总体硬件电路图和硬件设计中使用到的单片机,无线数传模块,语音芯片,键盘和数码管等有关内容。
第四章软件设计方案,介绍了系统各个部分的程序流程。
第五章是结论和展望。

第二章 总体方案
2.1 工作原理
该系统的工作原理如图2.1所示,安装在站牌及其他建筑物上的发射模块每隔3秒钟发射一次该站的地址信号,当汽车行驶到发射模块的作用半径时,检测接收到的地址信号,如果该地址刚好是该车的行驶路线停靠点,自动报站器发出一次报站音,显示一次站点名称,并为下一次报站做准备。

图2.1 工作原理图

该报站器的具体功能如下:
1) 公交车离站台十米到二十米识别并自动报站,通过语音和LED数码管显示报站。
2) 报站器设手动按键,另设站点编号LED显示,方便手动报站,到哪一站只要按下相应编号的键即可。
3) 到达总站时,总站会收到公交车发送的到站信息,方便总站调度。
4) 后台管理软件具有报站信息管理和写入修改功能。具体功能如下:
A、 建立每路车的站点信息(地址),对应的语音和显示报站信息文件,要求在同一文件中,并且一一对应。
B、 信息文件方便修改、保存、打印。
C、 信息文件可以通过串口写入到报站器中。
2.2 模块简介
2.2.1 接收模块
接收模块采用51系列单片机、发送模块 TX100、接收模块RX100以及键盘组成,系统组成框图如图2.2所示。

图2.2 接收模块组成框图

车载无线接收模块由上图所示的六部分组成,单片机是核心部分,通过指令来控制其他各个部分的运作;RX100接收模块用于接收每个车站所发送的信号,以方便自动报站;TX100发送模块只在到达总站时发送信号方便总站调度;语音芯片部分用于语音报站;串口部分接LED数码管,用于显示报站;键盘为手动报站部分,用于司机手动报站。
汽车在离站20米左右将收到信号,当汽车收到某一信号两次或三次时,在没有其它信号的情况下,单片机根据还原的语音信号,通过语音合成芯片播放报站和广告语音。当汽车在拐弯处或相邻两条线路间时,会收到两个或多个无线信号,产生这种情况,单片机会选择暂时不报站,延时一段时间,取收到信号最多的站名来报,或者报汽车行驶在某站到某站之间。
2.2.2 发送模块
车站无线发送模块采用无线发射模块TX100,采用8051单片机控制,控制内容包含发射时间间隔,发送数据内容。系统组成框图见图2.3所示。

图2.3 车站无线发送模块

发射模块的数据更改采用写片器进行,通过修改单片机中的数据,达到将需要发射的数据代码(主要是汉字编码)写入单片机中,从而实现报站语音的修改。发射部分采用太阳能电池加充电电池双电源供电,保证发射部分在无光照情况下能工作。
2.2.3 无线模块的使用
无线模块使用时应注意如下几点:
1. 无线模块电源和用户数字电源(如:单片机系统等数字系统电源)应在系统总电源接入出一点相联;
2. 无线模块电源地应和用户系统的总电源的相联;
3. 发射和接收模块的距离应保持两米以上的距离;
4. 附近尽量避免有同频干扰源;
5. 电源尽量选用经过稳压模块和电容处理后的电源,在带负载的情况下,用示波器观察电压的波动小于1‰,即5mV;
6. 发送数据包格式建议先发射5个以上的字节55H,再发射一个字节FFH,最后发射数据;
7. 建议把RF部分和其它应用电路系统分开供电,以最大限度降低电磁串扰;
8. 工作状态时一定注意不能插拔天线;
上面注意事项中部分注释如下所示:
1. 通信距离指在无遮挡开阔地,使用导线作天线,天线离地1.5 米,4800bps(幅移键控)/9600bps(频移键控)数据率,收发模组均处于静止状态,433.92MHz 频点,BER(位误码率)< 时所测得。
2. 幅移键控模组不适合移动中通信;频移键控模组在高速移动中(相对速>60Km/h)通信时,可靠通信距离大致会减半。
3. 架高天线或使用高增益定向天线会有利于通信的稳定或提高可靠通信距离。同样的,通过在软件中使用编码、交织以及前向纠错技术,会等效提高接收增益,从而达到提高可靠通信距离的目的,一般软件纠错带来的等效增益在2-5dB(FSK)左右,具体值与算法及使用环境的不同而不同。

第三章 硬件电路设计
3.1 硬件总体电路设计
发送部分和接收部分的详细电路图见附录1和附录2。
3.1.1 PROTELL99 软件简介
随着电子技术的飞速发展和新型电子元器件的不断涌现,现代电子电路已经变得越来越复杂。如何快捷,有效,准确的完成电子电路的设计工作,已经成为广大设计人员十分关心的问题。而另一方面,微型计算机技术的迅猛发展,为我们提供了一个进行电路附注设计的完美平台。Protell 99 是Protell Technology公司与1999年推出的运行与Windows系统下的EDA(Enterprise Digital Assistant, 企业数据处理终端)电子辅助设计软件【2】。
在之前,许多软件公司都推出了自己的电子线路辅助设计工具。电路设计者在进行电路设计的时候常常采用不同公司开发的工具,这意味着设计者不仅需要掌握这些数目众多的软件使用方法,而且还要能够熟练地在这些软件之间进行文件交换操作,并适应各种软件的使用风格。随着电子线路辅助设计功能的不断强大,这些工具也变得越来越难以学习和使用,给设计者带来了很多困扰。
而Protell 99 被设计成了一个客户/服务器应用程序,完全消除了上述问题带来的困扰。在Protell 99 提供的集成的客户/服务器环境中,设计者可以运行各种服务器程序组件,如原理图设计服务器,网络表生成服务器,电路仿真服务器,PCB(Printed Circuit Board,印制板)设计服务器和自动布线服务器等。不论是Protell 99 本身的组件还是来自第三方的设计组件,都可以很容易地 嵌入到Protell 99中,以增强其应用功能。
客户程序提供给设计者一些基本的使用资源,如菜单,快捷栏,工具栏,状态栏,工程管理器等等,设计者对这些资源可以自由定义,建立便于自己使用的菜单,快捷键,工具栏等。
Protell 99 虽然包含有数目众多的服务器程序,但基本上可以分为5个组件:
1) 原理图设计组件
2) PCB设计组件
3) 自动布线组件
4) 可编程逻辑器件组件
5) 电路仿真组件
各部分功能分述如下:
原理图设计组件可以进行原理图和层次原理图的设计。设计者可以将整个电路系统分为几个小系统,小系统又可分为几个功能模块,功能模块再分为几个基本的模块,最后,设计者进行基本模块的设计,并依照各层次的关系将基本模块组织起来,完成整个电路系统的设计。相反,设计者也可以从基本模块的设计着手,实现自底向上的设计。
PCB设计组件的主要功能是用于设计出印制电路板图,其设计分辨率可以达到0.000mil(mil为英制毫吋单位,1mil=0.0254mm),能够设计的工作层数达32层,设计的最大版面面积为 ,板上元器件的最小旋转角度可达度。
和原理图设计组件一样,PCB设计组件也提供有强大的编辑功能,如库文件创建,修改功能和报表输出等功能。另外,它与自动布线组件相结合。有助于设计者摆脱沉重的手动布线工作,并且由于其具备在线式的设计规则检查功能,所以在岁大程度上避免了设计者的失误。
自动布线组件是为PCB设计组件服务的,用以实现电路板布线的自动化。它作为一个服务器程序,内嵌于PCB设计组件中。自动布线组件基于人工智能技术,它可对PCB板进行优化设计,所采用的拆线似的多层迷宫式布线等算法,可以同时进行全部信号层的自动布线,并进行优化。
设计者可以采用两种方法进行可编程逻辑器件设计:1)在原理图设计组件中使用专用的PLD(Programmable Logic Device,可编程逻辑器件)库“Symbols.lib”来进行器件的设计。2)采用CUPL语言来编写PLD的功能描述文件。完成可编程逻辑器件的设计后,设计者对器件进行编译操作,生成熔丝文件,用以制作具备特定功能的元器件。
设计者可依据库中提供的仿真元件库“sim.ddb“,在原理图设计组件中进行电路设计,最后使用电路仿真组件对所设计的电路进行仿真,并根据输出信号的状态调整电路的设计。显然,这个组件给设计者的电路设计工作带来了极大的不便,有助于减少设计者工作中的失误。
3.1.2 软件使用中的问题
1,Protel中常用元件的封装:
以下元件在Protel DOS Schematic Libraries.ddb,Miscellaneous Devices.ddb(以上是schlib)Advpcb.ddb,Transistors.ddb,General IC.ddb(以上是PCBlib)等库文件中,可以使用通配符“*”进行查找:(如表3.1所示)
提醒:使用封装时最好少用水平/垂直翻转功能;自己建好的元件库或者PCB,一定要1:1的打印出来,和实际比较,以确保无误;有条件的话,尽量先买好器件,再定封装,可以节省很多时间。

表3.1 常用原件封装表
电阻,小电感 axial0.3/axial0.4 0805/0603等
小电容 RAD0.1/ RAD0.2 0805/0603等
电解电容 (RB.2/.4) 1210/1812/2220等
小功率三极管 TO-92A/B SOT-23
大功率三极管(三端稳压) T0-220
小功率二极管 DIODE-0.4
双列IC DIPxx SO-xx(xx代表引脚数)
有源晶振 DIP14(保留四个顶点,去掉中间10个焊盘)
四方型IC 大部分需要自己用向导画,尺寸参照datasheet
接插件 SIPxx/IDCxx DB9/DB25

2,由SCH生成PCB时提示出错:
sch编辑界面中选择design–>updatepcb,在出现的对话框中按“Preview Change”按钮,选中 Only show Errors会列出所有错误:
1.footprint not found :确保所有的器件都指定了封装;确保指定的封装名与PCB中的封装名一致;确保你的库已经打开或者被添加。
2.node not found :确认没有“footprint not found” 类型的错误;编辑PCBlib,将对应引脚名改成没有找到的那个node。
3.Duplicate sheet number :degisn-options-organization,给每张子电路图编号。
4.二极管的引脚错误:这是Protel99SE的一个经典问题,它的pcb库和sch库的引脚名不同, 一个叫1,2;一个叫A,K。修改办法:新建一个封装,统一用12或者AK。

3,电容,二极管,三极管等器件的极性问题【3】:
直插铝电解:负极附近有黑色的“-”标记,如果没有剪腿的话,长腿为正。
贴片钽电解:有横杠的一头为正。
二极管: 有圈的一头为负。

4, 一些基本概念和术语:
OC(Open Drain):集电极(漏极)开路输出,使用上拉电阻后可以适应不同的接口电平,并具有“线与”的功能(即两个输出端直接相连就可以实现“and”逻辑)。
上拉下拉:即将输出节点通过电阻连接到电源(上拉)或地(下拉)。OC输出器件必须使用上拉电阻以输出高电平,此外为了加大输出引脚的驱动能力也常使用上拉电阻(典型的如单片机)。
阻值的选择原则包括:从节约功耗及芯片的灌电流能力考虑应当足够大;从确保足够的驱动电流考虑应当足够小;对于高速电路,过大的上拉电阻可能边沿变平缓。综合考虑以上三点,通常在1k到10k之间选取。对下拉电阻也有类似道理。
rail-to-rail:即“轨到轨”,指输出(或输入)电压范围与电源电压相等或近似相等,在低电压和单电源系统中很有用。
TBD:To Be Determined,未定参数,常见于Preview版datasheet,通常意味着芯片还没有正式投产。
3.2 RX100芯片介绍及其应用
RX100 ASK无线接收模组功能结构图如图3.1所示【4】。

图3.1 RX100 ASK无线接收模组功能结构图

其典型应用电路为图3.2所示。

图3.2 RX100典型应用电路

使用该芯片的注意事项如下:
用户需把RF部分和其它应用电路系统分开供电,以最大限度降低电路的串扰;如果经过试验验证,在满足用户使用要求的前提下也可以集中供电。
为保证最佳之使用效果,用户应使用标准50欧天线以保证最大辐射效率,如果使用普通导线作天线,导线长度请参考下式计算:
导线长度=7135/TX100中心频率(MHz)cm
常用频点天线长度列表于3.2:

表3.2 常用频点天线长度表
中心频率(MHz) 230 315 433.920 470 867
天线长度 (cm) 31 22.7 16.4 15.2 8.2

由于RX100 ASK无线接收模组没有待机模式,在需要极低功耗的系统设计中,由于RX100的工作电流小,可以使用一个74HC系列的门电路(如74HC14)输出给其供电,并采用1:X接收监听方式侦测发送数据包,这样的处理可以将整个RF接收部分的功耗降低到几十个μA以内。
RX100 ASK无线接收模组工作电源为4.5-7V,对于电池供电的系统(2.7-4.5V),应该使用其他电路进行升压转换。
3.2 TX100芯片介绍及其应用
TX100 ASK无线发送模组功能结构图如图3.3所示【5】。

图3.3 TX100 ASK无线接收模组功能结构图

其典型应用电路为图3.4所示。

图3.4 TX100典型应用电路

使用该芯片的注意事项如下:
用户需把RF部分和其它应用电路系统分开供电,以最大限度降低电路的串扰;如果经过试验验证,在满足用户使用要求的前提下也可以集中供电。
TX100模块在1.8V-5.5V工作电源下均可以可靠工作,但其工作电流及RF辐射功率会有很大差别;不同工作电压下,数据接口部分电平要求于下:
发送使能(TXEN):“1”信号=Vcc±0.3V “0”信号=公共地电平±0.3V
发送数据(DATA): 1.5V< “1”信号<6V “0”信号=公共电平±0.3V
接口驱动电流 : IH >0.5 mA 。
为保证最佳之使用效果,用户应使用标准50欧天线以保证最大辐射效率,如果使用普通导线作天线,导线长度请参考下式计算:
导线长度=7135/TX100中心频率(MHz) cm
常用频点天线长度列表于表3.3:

表3.3 常用频点天线长度表
中心频率(MHz) 230 315 433.920 470 867
天线长度 (cm) 31 22.7 16.4 15.2 8.2

直接使用单片机串口进行无线通信时,为提高接收机灵敏度,并减小因为错位引起的误码,请参考实用手册中的数据帧结构,并在接收端采用帧同步数据接收。
在需要极低功耗或高速率的系统设计中,用户可直接使用I/O口线并采用华荣汇的脉码调制方式来传送数据。如果采用串口来传送,请注意串口的空闲状态为“1”电平(MASK=1),在传送结束后应该把TXEN和DATA端全置低,以进入待机模式。
在从待机状态返回时(TXEN从“0”变为“1”),需要等待大约1-2mS后才可以开始数据传送;否则在数据率超过1200bps时,传送数据的第1位将可能丢失。
3.3 单片机控制部分

3.3.1 单片机的发展历史
第一阶段(1976-1978):单片机的探索阶段。探索计算机的单芯片集成,单片机(Single Chip Microcomputer)的定名即缘于此。产品以Intel公司的MCS-48为代表。
第二阶段(1978-1982):单片机的完善阶段。体现工控特性的位地址空间及位操作方式;增加了许多突出控制功能的指令。产品以Intel公司的MCS-51为代表。
第三阶段(1982-1990):8位单片机的巩固发展及16位单片机的推出阶段,也是单片机向微控制器发展的阶段。
第四阶段(1990-):微控制器全面发展阶段。在各领域广泛应用,出现高速、大寻址范围、强运算能力的通用型单片机及小型廉价的专用单片机。
3.3.2 单片机的应用
单片机在智能仪表中的应用:单片机广泛应用于各种仪器仪表,使仪器仪表智能化,提高测量的自动化程度和精度。
单片机在机电一体化中的应用:机电一体化是机械工业发展的方向。机电一体化产品是指集机械技术、微电子技术、计算机技术于一体,具有智能化特征的机电产品,如数控机车。单片机作为控制器,可提高产品的自动化、智能化程度。
单片机在实时控制中的应用:如工业测控、航空航天、机器人。
单片机在分布式多机系统中的应用。
单片机在人类生活中的应用:如各种家用电器、玩具。
单片机在计算机外围设备、网络产品的应用【6】。
3.3.3 单片机的基本结构
单片机的系统结构框图如图3.5所示。

图3.5 单片机系统框图

各组成部分介绍如下【7】:
1) 中央处理器(CPU):中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
2) 内部数据存储器(RAM(Random-access memory, 随机存取存储器)):8051内部有128字节数据存储器(RAM)和21个专用寄存器单元,它们是统一编址的,专用寄存器有专门的用途,通常用于存放控制指令数据,不能用作用户数据的存放,用户能使用的RAM只有128个字节,可存放读写的数据,运算的中间结果或用户定义的字型表。
3) 内部程序存储器(ROM(Read—Only memory,只读存储器)):8051共有4K字节程序存储器(ROM),用于存放用户程序和数据表格
4) 定时/计数器:8051有两个16位的可编程定时/计数器,以实现定时或计数,当定时/计数器产生溢出时,可用中断方式控制程序转向。
5) 并行输入输出(I/O(INPUT/OUTPUT,输入/输出))口:8051共有4个8位的并行I/O口(P0、 P1、P2、P3),用于对外部数据的传输。
6) 串行口:8051内置一个全双工异步串行通信口,用于与其它设备间的串 行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
7) 中断控制系统:8051具备较完善的中断功能,有五个中断源(两个外中断、两个定时/计数器中断和一个串行中断),可基本满足不同的控制要求,并具有2级的优先级别选择。
8) 时钟电路:8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的时序脉冲,但需外接晶体振荡器和振荡电容。
9) 位处理器:又称为布尔处理器,以状态寄存器中的进位标志位C为累加位,可进行置位、复位、取反、等于0转移等位操作。位处理操作是通过运算器实现的。
10)总线:以上部件都是通过总线连接起来,系统的地址信号、数据信号和控制信号都是通过总线传送的。总线结构减少了单片机的连线和引脚,提高了集成度和可靠性。
3.3.4 80C51单片机的引脚功能
MCS-51是标准的40引脚双列直插式集成电路芯片【8】。
MCS-51单片机芯片40条引脚的定义及简单功能说明如下:
P0.0 ~ P0.7: P0口8位双向口线。
P1.0 ~ P1.7 :P1口8位双向口线。
P2.0 ~ P2.7 :P2口8位双向口线。
P3.0 ~ P3.7 :P3口8位双向口线。
ALE:地址锁存控制信号。在系统扩展时,ALE用于控制把P0口输出的低8位地址锁存起来,以实现低位地址和数据的隔离。此外,由于ALE是以晶振1/6的固定频率输出的正脉冲,因此,可作为外部时钟或外部定时脉冲使用。
PSEN:外部程序存储器读选通信号。在读外部ROM时,PSEN有效(低电平),以实现外部ROM单元的读操作。
EA:访问程序存储控制信号。当信号为低电平时,对ROM的读操作限定在外部程序存储器;当信号为高电平时,对ROM的读操作是从内部程序存储器开始,并可延至外部程序存储器。
RST:复位信号。当输入的复位信号延续两个机器周期以上的高电平时即为有效,用以完成单片机的复位初始化操作。
XTAL1和XTAL2:外接晶体引线端。当使用芯片内部时钟时,此二引线端用于外接石英晶体和微调电容;当使用外部时钟时,用于接外部时钟脉冲信号。
VSS:地线。
VCC:+5 V电源。
P3口线的第二功能。P3的8条口线都定义有第二功能。
3.3.5 串行通信
在计算机系统中,CPU和外部通信有两种通信方式:并行通信和串行通信。并行通信,即数据的各位同时传送;串行通信,即数据一位一位顺序传送。
而在该系统中无线数传模块就是接在单片机的串行通信口【9】。
按照串行数据的时钟控制方式,串行通信可分为同步通信和异步通信两类。
1. 异步通信(Asynchronous Communication)
在异步通信中,数据通常是以字符为单位组成字符帧传送的。字符帧由发送端一帧一帧地发送,每一帧数据均是低位在前,高位在后,通过传输线被接收端一帧一帧地接收。发送端和接收端可以由各自独立的时钟来控制数据的发送和接收,这两个时钟彼此独立,互不同步。
在异步通信中,接收端是依靠字符帧格式来判断发送端是何时开始发送,何时结束发送的。字符帧格式是异步通信的一个重要指标。(字符帧(Character Frame)也叫数据帧,由起始位、数据位、奇偶校验位和停止位等4部分组成。)
异步通信的另一个重要指标为波特率。(波特率(baud rate)为每秒钟传送二进制数码的位数,也叫比特数,单位为b/s,即位/秒。波特率用于表征数据传输的速度,波特率越高,数据传输速度越快。但波特率和字符的实际传输速率不同,字符的实际传输速率是每秒内所传字符帧的帧数,和字符帧格式有关。)
2. 同步通信(Synchronous Communication)
同步通信是一种连续串行传送数据的通信方式,一次通信只传输一帧信息。这里的信息帧和异步通信的字符帧不同,通常有若干个数据字符。但是单同步字符帧和双同步字符帧均由同步字符、数据字符和校验字符CRC三部分组成。在同步通信中,同步字符可以采用统一的标准格式,也可以由用户约定。
3.4 语音报站部分
3.4.1 语音芯片简介
PM50系列智能语音芯片是某公司2003年最新开发的智能语音产品,它既是语音播放电路,也是智能单片机。其音质水平、价格都要略优于著名的ISD电路,同时也有21KHZ高保真音质。而其开发设计简单度、智能控制的简单度、整体性价比等指标要远胜过ISD,而如果用量超过1~3万片,可以原样投产掩膜片,价格更低至五~十分之一。可以说,该芯片连同具有USB(Universal Serial Bus,通用串行总线)电脑接口的atvoc-PM50语音编程开发系统一起,开创了数码语音电路的新纪元,是智能语音电路的一场革命。
该芯片由专用的语音单片机和FLASHRAM存储器集合构成,它既有几秒到200秒的多段语音播放功能,也有单片机可编程的智能特性,大规模复杂电路已经缩微到只有COB28封装(18*36mm)的印板上,可以方便地作为DIP28封装的标准集成电路来使用。
其主要特点为:
(1)使用上可以和普通音乐片一样简单方便
(2)FLASHRAM结构,可以反复擦写录入,寿命在1万次以上
(3)电源电压3~6V,静态电流1uA,工作电流50mA
(4)直接驱动8欧姆0.5瓦的喇叭
(5)一系列多规格可互换,开发系统共用
(6)录制的语音可分1~8段或128段
(7)自带八个输入端口,九个输出端口,功能均可由用户自定义
(8)开发系统采用最新的USB电脑接口
(9)开发用的电脑软件系超智能傻瓜图形设计,外行也能使用
(10)配合编程软件可以开发出并行、串性、智能型等多种控制模式
(11)开发系统支持用户对PM50芯片在线编程(ISP)
(12)音质比著名的ISD产品略好,同时也有21KHZ高保真音质。
(13)最小系统的外围电路只需一只振荡电阻、一只电源滤波电容。
(14)有13/20/50/100/250/400秒多个时间档次可选。
(15)完成开发和试验生产后,直接用源文件投产掩模芯片,电路设计、音质效果、功能性能不变。
3.4.2 芯片管脚
PM50芯片管脚如图3.6所示:

图3.6 PM50芯片管脚图

其各脚定义为表3.3所示:
1 、电源电压为3~6V,静态电流约1uA 。
2 、 振荡电阻上拉到正电源,在正常品质下振荡电阻一般取值240K标准值是255K;在高级品质(HQ(High Quality,高品质))下 振荡电阻一般取值120K 。
3 、任何喇叭端严禁接地或串接喇叭后直接接地或正电源。
4 、PM50 板上可以焊接两个器件:滤波电容0.1UF,振荡电阻240K,可选贴片器件。装上后,外部不需要再装。另外在PM50编程器内部已装有240K振荡电阻,测试或演示时PM50板上无须再装振荡电阻【10】。

表3.3 PM50管脚定义表

脚号 名称 用途 脚号 名称 用途
1 GND 电源地端 28 FM 编程端
2 FC 编程端 27 FD 编程端
3 FA 编程端 26 FK 编程端
4 K1 输入1 25 R 硬件复位
5 K2 输入2 24 O1 输出1
6 K3 输入3 23 O2 输出2
7 K4 输入4 22 O3(LED2) 输出3
8 K5 输入5 21 O4 输出4
9 K6 输入6 20 O5 输出5
10 K7 输入7 19 O6 输出6
11 K8 输入8 18 O7 输出7
12 ROSC 振荡电阻 17 O8 输出8
13 SP1/DAC 喇叭端1 16 LED1 指示灯
14 SP2 喇叭端2 15 VDD 正电源端

3.4.3 应用电路
DAC(Digital Audio Compress,数字音频标准)方式,PM50芯片的13脚(SP1/DAC)作为音频输出,14脚(SP2)悬空。如图3.7所示。
图3.8是89C2051单片机与PM50芯片接口的电路原理图,同时也是测试PM50语音合成效果的发码测试板,能够令用户选择播放PM50中的任意一段或多段的组合。

图3.8 单片机与PM50芯片连接图

图3.7 DAC方式

3.4.4 智能语音芯片的制作流程
1制作音源文件,如果是做正规商业化产品,一般需要到广播电台、电视台、电影制片厂去录制音源,制作方会在正规录音棚、邀请专业播音员、在专业录音编辑设备及录音师的操作下录制,然后提供一盒磁带或一张光盘给你。你用录音磁带卡座或CDROM将声音文件转进电脑,制作成一个或几个WAV文件,即有了音源文件。如果只是做实验,可以自己对着电脑声卡的话筒直接录音,或用电脑播音员软件将需要的文字转换成对应的普通话读音,都是录制成WAV文件。
2编辑音源文件,在电脑中利用音频编辑软件,如GOLDWAVE、COOLEDIT等,将音源文件做相应的处理,如降噪、去掉杂音、淡入淡出、剪辑、混音等等。注意,形成的WAV文件为单声道,22.5KHZ取样,16BIT采样位数文件较为合适。本软件会自动做转换工作把该源文件转成相应格式。
3调入音源文件,在PM50中只要是WAV文件都可以用,软件会自动做格式转换工作。在Wav filename的空栏目里点击,就可以选择调用相应的WAV文件,调入后就可以直接试听这文件的声音,在second栏目会自动给出这段语音的时间长度,如果要删除或重选,就点按中间的X按钮;装完后,在Total Sound Length栏目中自动显示总时间长度。
4编辑烧录文件,在PM50中在Function栏目里选择输入的控制功能;在OUTPUT栏目里选择输出的控制功能。然后,点击“SAVE”按钮,将烧录文件取名字、存盘。软件会将该烧录文件存成*.PM5文件名,这时,点击“WritePM50”按钮就开始烧写语音电路组件了,当进度条显示100%后即烧录完成。
5测试语音电路组件,烧录完文件后,即可以在PM50烧录器上按键听取声音情况,如满意即可拔下语音电路组件使用;如不满意,重复上述操作重新编辑就好了。
另外,还有一些注意事项:
要想录制好的语音芯片放音效果都达到自己理想的要求,这就需要在制作音源时保证声音的效果达到最好,一般录音采用44.1K采样率,立体声16位的录音方式。
制作PM50语音芯片,如果只做一般的语音处理,通常有一种“嘶嘶”的噪声,这就需要用COOLEDIT着重做下面几点处理:
  1,假设音源是44K采样的立体声,首先进行转换采样方式的处理;运行软件”Edit—Convert Sample Type”,将采样率(Sample Rate)设定为22050Hz,然后将Quality的滑动条选到最右High Quality,数值显示是999;然后在同一个对话框内将立体声改变成单声道,具体操作“Channels—Mono”;最后是分辨率Resolution选择16bit确定完成。
2,待转换过程结束后,会得到一个单声道的波形;试听声音,将声音中不需要的杂音(破音、嘶嘶声、啪啪声)去掉,一般的操作步骤如下。观察波形,并试听声音,一般字与字之间,段与段之间的停顿部分会有相对明显的噪声,选中您认为是噪声的部分做静音处理,操作“Effects——Silence”。破音,“啪啪”声一般出现在波形有大的跳变的位置,在停顿的位置也经常回出现“啪啪”,声,这时应该将对应位置的波形幅值做一定的调整,操作“Effects—–Amplitude—–Amplify”,调整对话框中放大常数Constant Amplification。对于语音开始和结束部分、停顿处有“啪啪”声的,一般做“淡入淡出”处理, 操作和上一操作在同一对话框中,选中另一标签Fade(衰减),选择预制的“Fade in , Fade out”即可。
3,消除噪声后,适当的提高声音的幅值,提高信噪比(S/N)。操作“Effects—–Amplitude—–Hard Limiting”,在对话框中Limit Max Amplitude to框中填写15~20dB,这是一般值,应该根据声音不同做适当调整。
3.5 显示报站和手动报站部分
3.5.1 LED数码管显示部分
常用的LED显示器有LED状态显示器(俗称发光二极管)、LED七段显示器(俗称数码管)和LED十六段显示器。发光二极管可显示两种状态,用于系统状态显示;数码管用于数字显示;LED十六段显示器用于字符显示【11】。
1.数码管简介
1) 数码管结构

图3.9 数码管外形及结构图
数码管由8个发光二极管(以下简称字段)构成,通过不同的组合可用来显示数字0 ~9、字符A ~ F、H、L、P、R、U、Y、符号“-”及小数点“.”。数码管的外形结构如图3.9所示。数码管又分为共阴极和共阳极两种结构(如图3.9右)。
2) 数码管工作原理
共阳极数码管的8个发光二极管的阳极(二极管正端)连接在一起。通常,公共阳极接高电平(一般接电源),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为低电平时,则该端所连接的字段导通并点亮。根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能吸收额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
共阴极数码管的8个发光二极管的阴极(二极管负端)连接在一起。通常,公共阴极接低电平(一般接地),其它管脚接段驱动电路输出端。当某段驱动电路的输出端为高电平时,则该端所连接的字段导通并点亮,根据发光字段的不同组合可显示出各种数字或字符。此时,要求段驱动电路能提供额定的段导通电流,还需根据外接电源及额定段导通电流来确定相应的限流电阻。
3) 数码管字形编码
要使数码管显示出相应的数字或字符,必须使段数据口输出相应的字形编码。对照图7.10(a),字型码各位定义为:数据线D0与a字段对应,D1与b字段对应……,依此类推。如使用共阳极数码管,数据为0表示对应字段亮,数据为1表示对应字段暗;如使用共阴极数码管,数据为0表示对应字段暗,数据为1表示对应字段亮。如要显示“0”,共阳极数码管的字型编码应为:11000000B(即C0H);共阴极数码管的字型编码应为:00111111B(即3FH)。依此类推。
2.静态显示接口
静态显示是指数码管显示某一字符时,相应的发光二极管恒定导通或恒定截止。这种显示方式的各位数码管相互独立,公共端恒定接地(共阴极)或接正电源(共阳极)。每个数码管的8个字段分别与一个8位I/O口地址相连,I/O口只要有段码输出,相应字符即显示出来,并保持不变,直到I/O口输出新的段码。采用静态显示方式,较小的电流即可获得较高的亮度,且占用CPU时间少,编程简单,显示便于监测和控制,但其占用的口线多,硬件电路复杂,成本高,只适合于显示位数较少的场合。
3.动态显示接口
动态显示是一位一位地轮流点亮各位数码管,这种逐位点亮显示器的方式称为位扫描。通常,各位数码管的段选线相应并联在一起,由一个8位的I/O口控制;各位的位选线(公共阴极或阳极)由另外的I/O口线控制。动态方式显示时,各数码管分时轮流选通,要使其稳定显示,必须采用扫描方式,即在某一时刻只选通一位数码管,并送出相应的段码,在另一时刻选通另一位数码管,并送出相应的段码。依此规律循环,即可使各位数码管显示将要显示的字符。虽然这些字符是在不同的时刻分别显示,但由于人眼存在视觉暂留效应,只要每位显示间隔足够短就可以给人以同时显示的感觉。
采用动态显示方式比较节省I/O口,硬件电路也较静态显示方式简单,但其亮度不如静态显示方式,而且在显示位数较多时,CPU要依次扫描,占用CPU较多的时间。
4.显示报站电路如图3.10所示:

图3.10 显示报站电路

3.5.2 按键部分
微机键盘通常使用机械触点式按键开关,其主要功能是把机械上的通断转换成为电气上的逻辑关系。也就是说,它能提供标准的TTL(Transistor-Transistor Logic,逻辑门电路)逻辑电平,以便与通用数字系统的逻辑电平相容。
机械式按键再按下或释放时,由于机械弹性作用的影响,通常伴随有一定时间的触点机械抖动,然后其触点才稳定下来。其抖动过程如图3.11所示,抖动时间的长短与开关的机械特性有关,一般为5~10 ms。

图3.11 抖动示意图

在触点抖动期间检测按键的通与断状态,可能导致判断出错,即按键一次按下或释放被错误地认为是多次操作,这种情况是不允许出现的。为了克服按键触点机械抖动所致的检测误判,必须采取去抖动措施。这一点可从硬件、软件两方面予以考虑。在键数较少时,可采用硬件去抖,而当键数较多时,采用软件去抖。
一组按键或键盘都要通过I/O口线查询按键的开关状态。根据键盘结构的不同,采用不同的编码。无论有无编码,以及采用什么编码,最后都要转换成为与累加器中数值相对应的键值,以实现按键功能程序的跳转。
一个完善的键盘控制程序应具备以下功能:
(1) 检测有无按键按下,并采取硬件或软件措施,消除键盘按键机械触点抖动的影响。
(2) 有可靠的逻辑处理办法。每次只处理一个按键,其间对任何按键的操作对系统不产生影响,且无论一次按键时间有多长,系统仅执行一次按键功能程序。
(3) 准确输出按键值(或键号),以满足跳转指令要求。

图3.12 独立式按键典型应用图

单片机控制系统中,往往只需要几个功能键,此时,可采用独立式按键结构。
1.独立式按键结构(也就是本系统采用的结构)
独立式按键是直接用I/O口线构成的单个按键电路,其特点是每个按键单独占用一根I/O口线,每个按键的工作不会影响其它I/O口线的状态。独立式按键的典型应用如图3.12所示。
独立式按键电路配置灵活,软件结构简单,但每个按键必须占用一根I/O口线,因此,在按键较多时,I/O口线浪费较大,不宜采用。
2. 立式按键的软件结构
独立式按键的软件常采用查询式结构。先逐位查询每根I/O口线的输入状态,如某一根I/O口线输入为低电平,则可确认该I/O口线所对应的按键已按下,然后,再转向该键的功能处理程序。

第四章 系统软件实现
4.1 软件设计思想
该系统一般情况下采用自动报站,只有在自动报站系统出现故障的情况下才采用手动报站,所以编写程序的时候应当注意,要优先手动报站部分,只有在没按下键的情况下才自动报站。
车载无线接收模块和车站无线发送模块在编写程序的时候可以借鉴单片机中多机通信中的主从机结构:车站看作主机,各个公交车看作从机。单片机的串行口方式的方式2,3就适合这种主从式的通信结构。
主机向从机发送地址信息(即车站代码),等待从机应答,一旦有从机应答就检测是否是所需停靠从机,若是则发消息让其报站,不是则继续呼叫。
从机在建立与主机通信之前始终处于监听状态,一旦监听到信息就判断是否是该公交车该停靠的车站,是则回馈信息给车站,并报站。
具体程序见附录2。
4.2 MCS-51指令系统介绍
采用助记符表示的汇编语言指令格式如下:
标号:操作码 操作数或者操作数地址;注释
标号是程序员根据编程需要给指令设定的符号地址,可有可无;标号由1~8个字符组成,第一个字符必须是英文字,不能是数字或其它符号;标号后必须用冒号。
操作码表示指令的操作种类,如MOV表示数据传送操作,ADD表示加法操作等。
操作数或操作数地址表示参加运算的数据或数据的有效地址。操作数一般有以下几种形式:没有操作数项,操作数隐含在操作码中,如RET指令;只有一个操作数,如CPL A指令;有两个操作数,如MOV A,#00H指令,操作数之间以逗号相隔;有三个操作数,如CJNE A,#00H,NEXT指令,操作数之间也以逗号相隔。
注释是对指令的解释说明,用以提高程序的可读性;注释前必须加分号。
寻找操作数地址的方式称为寻址方式。MCS-51指令系统有以下几种寻址方式:
1. 寄存器寻址
寄存器寻址是指将操作数存放于寄存器中,寄存器包括工作寄存器R0~R7、累加器A、通用寄存器B、地址寄存器DPTR等。例如,指令MOV R1,A的操作是把累加器A中的数据传送到寄存器R1中,其操作数存放在累加器A中,所以寻址方式为寄存器寻址。
如果程序状态寄存器PSW的RS1RS0=01(选中第二组工作寄存器,对应地址为08H~0FH),设累加器A的内容为20H,则执行MOV R1,A指令后,内部RAM 09H单元的值就变为20H。
2. 直接寻址
直接寻址是指把存放操作数的内存单元的地址直接写在指令中。在MCS-51单片机中,可以直接寻址的存储器主要有内部RAM区和特殊功能寄存器SFR区。
例如,指令MOV A,3AH执行的操作是将内部RAM 中地址为3AH的单元内容传送到累加器A中,其操作数3AH就是存放数据的单元地址,因此该指令是直接寻址。
3. 立即数寻址
立即数寻址是指将操作数直接写在指令中。
例如,指令MOV A,#3AH执行的操作是将立即数3AH送到累加器A中,该指令就是立即数寻址。
4. 寄存器间接寻址
寄存器间接寻址是指将存放操作数的内存单元的地址放在寄存器中,指令中只给出该寄存器。执行指令时,首先根据寄存器的内容,找到所需要的操作数地址,再由该地址找到操作数并完成相应操作。
在MCS-51指令系统中,用于寄存器间接寻址的寄存器有R0、R1和DPTR,称为寄存器间接寻址寄存器。
设R0=3AH,内部RAM 3AH中的值是65H,则指令MOV A,@R0的执行结果是累加器A的值为65H。
5. 变址寻址
变址寻址是指将基址寄存器与变址寄存器的内容相加,结果作为操作数的地址。DPTR或PC是基址寄存器,累加器A是变址寄存器。该类寻址方式主要用于查表操作。
例如,指令MOVC A,@A+DPTR执行的操作是将累加器A和基址寄存器DPTR的内容相加,相加结果作为操作数存放的地址,再将操作数取出来送到累加器A中。设累加器A=02H,DPTR=0300H,外部ROM中,0302H单元的内容是55H,则指令MOVC A,@A+DPTR的执行结果是累加器A的内容为55H。
6. 相对寻址
相对寻址是指程序计数器PC的当前内容与指令中的操作数相加,其结果作为跳转指令的转移地址(也称目的地址)。该类寻址方式主要用于跳转指令。
例如,指令SJMP 54H执行的操作是将PC当前的内容与54H相加,结果再送回PC中,成为下一条将要执行指令的地址。
设指令SJMP 54H的机器码80H 54H存放在2000H处,当执行到该指令时,先从2000H和2001H单元取出指令,PC自动变为2002H;再把PC的内容与操作数54H相加,形成目标地址2056H,再送回PC,使得程序跳转到2056H单元继续执行。
7. 位寻址
位寻址是指按位进行的寻址操作,而上述介绍的指令都是按字节进行的寻址操作。MCS-51单片机中,操作数不仅可以按字节为单位进行操作,也可以按位进行操作。当我们把某一位作为操作数时,这个操作数的地址称为位地址。
位寻址区包括专门安排在内部RAM中的两个区域:一是内部RAM的位寻址区,地址范围是20H~2FH,共16个RAM单元,位地址为00H~7FH;二是特殊功能寄存器SFR中有11个寄存器可以位寻址,参见有关章节中位地址定义。
4.3 串行通信口的工作方式及关键代码
串行口由以下部分构成:
首先是数据缓冲器SBUF,发送SBUF和接收SBUF共用一个地址99H。
1)发送SBUF存放待发送的8位数据,写入SBUF将同时启动发送。
发送指令:MOV SBUF,A
2)接收SBUF存放已接收成功的8位数据,供CPU读取。
读取串行口接收数据指令:MOV A,SBUF
然后是串行口控制/状态寄存器SCON(98H),SCON共八位,各位的分述如下:SM0,SM1:选择串行口4种工作方式。SM2:多机控制位,用于多机通讯。REN:允许接收控制位,REN=1,允许接收;REN=0,禁止接收。TB8:发送的第9位数据位,可用作校验位和地址/数据标识位。RB8:接收的第9位数据位或停止位。TI:发送中断标志,发送一帧结束,TI=1,必须软件清零。RI:接收中断标志,接收一帧结束,RI=1,必须软件清零。
还有节电控制寄存器PCON,SMOD(PCON.7):波特率加倍控制位。SMOD=1,波特率加倍,SMOD=0,则不加倍。
串行接口的工作方式有四种,由SM0,SM1选择。方式0为同步移位寄存器方式,用于扩展并行I/O接口。方式1为8位数据异步通讯方式。方式2和方式3为9位数据异步通讯方式【12】。
在接收端的程序编写如下:
MVSTR: MOV SCON,#0B0H;方式2,SM2=1,REN=1允许接收
SR1: JBC RI,SR2;监听状态
SJMP SR1
SR2: MOV A,SBUF;取出呼叫地址
XRL A,#01H;是呼叫本机么
JNZ SR1
CLR SM2;是则取消监听
MOV SBUF,#01H;发出应答信号
WABT1: JBC TI,SR3
SJMP WBT1
SR3: JBC RI,SR4;等待主机发送
SJMP SR3
SR4: JNB RB8,BTT;是复位信号么
SETB SM2;是则恢复监听状态
SJMP SRI
BTT: MOV A,SBUF;联络成功,取发送的数据
MOV 40H,A

在发送端的程序编写如下:
MASTR: MOV SCON,#98H;
MA1: MOV SBUF,#01H;
WAIT1: JBC TI,WAIT2;
SJMP WAIT1;
WAIT2: JBC RI,MA1;
SJMP WAIT1;
ma1: mov A,SBUF;
XRL A,#01H;
JZ ATT;
ERR: MOV SBUF,#00H;
WAIT3: JBC TI,ERR1;
SJMP WAIT3;
ERR1: SJMP MA1
ATT: CLR TB8
MOV SBUF,#01H

4.4 程序流程图

接收端主程序流程图(图4.1):

图4.1 接收端主程序流程图

发送端主程序流程图(图4.2):

图4.2 发送端主程序流程图

第五章 结论
5.1 总结
随着社会的发展,公交车已经成为人们日常出行必备的交通工具,而随着人们环保意识的增强,公交车必将取代私家轿车成为主流交通工具。这样就要求公交车各方面设备都实现自动化,本文主要研究了一种基于无线数传模块的公交车自动报站系统。
该系统采用最常用的51系列单片机,无线数传模块RX100和TX100,以及性价比较高的PM50语音芯片研制出了价格低廉,使用方便,改写容易的公交车自动报站系统,实现了以下功能:
1) 公交车到站前10到20米语音和显示报站;
2) 公交车内设手动按键,方便在自动报站系统出错时司机手动报站;
3) 公交车到总站时向总站发送信息,方便总站调度;
本论文的主要工作可分为以下部分:
1)简要介绍了现今存在的几种比较先进的公交车自动报站系统,分析了他们各自的优缺点,提出本文所研究的系统。
2)介绍了该系统的详细设计框图和各模块功能。
3)在此基础上,对各个模块中的各个部分进行了详细介绍,并对各芯片的使用方法和PROTELL 99 画图软件进行了介绍。
经过三个月努力的学习和研究,该设计终于基本完成了。这期间,作者查阅了很多相关资料,进一步学习了单片机结构与原理,51单片机指令系统,各个芯片的使用方法和PROTELL 99 软件的绘图方法等知识,并积累了一些单片机系统开发的经验,为以后的工作奠定了更好的基础。
由于时间和技术水平等方面的限制,该系统还是存在很多不完善的地方,研究过程中绘制的硬件图和编写的程序都比较理想化,用PROTELL99画的图也没有成功转化为PCB图,在实际调试中还有很多问题有待解决。以后我将把该系统不断完善,争取做出优秀的成果为公交车今后的发展做出贡献。
5.2 前景和展望
在国内,人们还是更加青睐私家车,希望能够驾驶私家车出行,但是越来越多的私家车必然对环境造成极大的影响,我们应当致力于公交车事业的发展,让人们的交通工具首选公交车。目前,已经出现并有待进一步发展的公交车自动化设备有如下几种:
1)更加完善和使用的自动报站系统;
2)智能投币箱。智能投币箱与普通投币箱最大的不同就是多了个显示屏,上面能够清楚地显示乘客投币数额,乘客如果投币不足,显示屏就只显示硬币数额,而不鸣响,足额投币,则像刷卡一样鸣叫一声,的确方便了司机监督乘客投币,如个别乘客使用假币或者用游戏机板或其他物品冒充硬币时,机器也会立刻报警。
3)公交车智能预报系统。过对所有运行公交车的监控,实现对公交运行车辆运行状况的及时预报。广大乘客在公交站点通过智能预报显示屏就能清楚地了解公交车即将到来的准确站距。
另外,目前在美国一些大城市实施的快速公共汽车交通系统BRT(Bus Rapid Transit,快速公交系统)就是美国为改进公共巴士服务质量所进行的大规模的工作。美国各大中城市波士顿、夏洛特、丹佛、芝加哥、洛杉矶、路易维尔、匹兹堡等地方都开始实施这个项目【13】。
BRT系统是一种介于轻轨交通LRT(Light Rail Transit,轻轨交通)与常规公交NB(Normal Bus,常规公交)之间的新型运营系统,它利用现代公交技术配合智能交通和运营管理,使传统的公交系统达到LRT的基本功能和服务水平,其投资及运营成本又较轻轨交通低,除发达国家城市外,许多发展中国家也都纷纷规划、建设BRT系统。
BRT是公交智能化建设中走在前面的一步棋,而随着信息化社会的到来,信息技术及相关高新技术得到开发并应用于交通系统的管理,为“公交优先”政策的实施提供了先进的技术手段。可以说,智能交通系统的发展预示着公交系统管理信息化、智能化将成为21世纪的发展方向。
  根据公交智能化的思路,围绕运营管理者和乘客等用户,分别有以下技术手段来实现公交的智能化:
  ①公交运营调度和车队管理的智能化。近年来,美国在公共交通的车队管理方面,以车辆、提高服务(供给)效率与质量和乘客安全为核心,积极吸取各种基于车辆的智能公共交通系统APTS(Advanced Public Transportation System,智能公共交通系统)技术以及车辆和车队调度营运的新理念,提高公共交通的有效性和可靠性,使公交方式对潜在的乘客和服务区更具吸引力。
  ②地理信息系统是一种特殊的计算机数据管理系统,最常见的应用是在城市公交路线管理、调度管理及相应的信息、传送等,此外还用于路线服务质量评价、线路调整优化和路线规划等领域。
  随着可获得的(公共或个人)数据资料的不断增多,GIS在公共交通领域的应用也将越来越广泛。毫无疑问,当计算技术和通讯能力进一步提高、获得的空间数据更加精确时,GIS在公共运输系统中的应用和影响将会更为广泛和深刻,尤其是对特殊运输方式和有特殊交通需求的地区。
  ③公交运营软件系统。通过公交运营软件系统可以实现多种公交方式和多种公交运输功能的自动化、流水线化和一体化运营。运营管理中计算机的应用,如计算机辅助调度服务监控、管理控制和数据采集(以及提供数据的APTS(AutomaticPictureTransmissionSystem,自动图像传输系统)技术)等,能够使营运调度、线路规划、乘客服务等部门具有更高的效率,发挥更大的作用。
④交通信号优先系统。交通信号优先控制系统在公交车辆通过交叉口时,让交通信号(提前)变成绿灯,从而让车辆更快通过交叉口。这种技术很早就已用于救护车的信号优先控制。在公交优先技术中,在信号交叉口让公交车或轨道交通优先通行,可以保证其调度运行的准时性。

参考文献
[1] 郭黎利,袁冰冰. 公交车站间的无线接力数据通信[D]:[硕士学位论文]. 哈尔滨:哈尔滨工程大学,2004.
[2] 赵晶.PROTELL 99 高级应用[M].北京:人民邮电出版社,2000.1~15.
[3] Protel PCB99SE电路板设计[M].北京:清华大学出版社,2001.58~62.
[4] HRH内部办公系统.Rx100产品手册[EB/OL].

http://www.smartrf.com.cn/cn/txt/rx100.pdf,2002-5.

[5] HRH内部办公系统.Tx100产品手册[EB/OL].

http://www.smartrf.com.cn/cn/txt/tx100.pdf,2002-5.

[6] 杨文龙.单片机原理及应用[M].西安:西安电子科技大学出版社.2000.78~81.
[7] 马忠梅等.单片机的C语言应用程序设计[M].北京:北京航空航天大学出版社,1997.114~124.
[8] 沈德金、陈粤初.MCS-51系列单片机接口电路与应用程序实例[M]. 北京:北京航空航天大学出版社,1995.3~6.
[9] 谢瑞和.串行技术大全[M]. 北京:清华大学出版社,2003.21~24.
[10] 中青世纪公司. pm50语音芯片资料[EB/OL].

http://www.atvoc.com/gsjs/gsjs.htm.2003—4.

[11] PHLIP Semiconductors公司.DATAHANDBOOK 80C51-base 8-bit Microcontrollers[M] .1995. 95~100.
[12] 曹琳琳,曹巧媛.单片机原理及接口技术[M].长沙:国防科技大学出版社,2000.112—147.
[13] 山东房产超市论坛.智能公交专用帖[EB/OL].

http://bbs.sdfccs.com/List.asp?BoardID=272.2007—3.

[14] 许连华,李学庆. 基于GPS 的公交车自动报站系统[J]:计 算 机 工 程, 2005 年, 第23 期:191~218.
[15] 洪锡军,李显明,郭新贵,李从心. Windows9X下串行通信技术探讨[J]:计算机工程,2001年,第九期:81~99.
[16] 何学文,刘建兵.Winodws98/NT环境下串行通信的设计与实现[J]:南方冶金学院学报,2002年,2月刊:23~39.
[17] 李启炎. Protel 99se 应用教程——印刷电路板设计[M]. 上海:同济大学出版社,2005.2~5.
[18] 冯建华,赵亮. 单片机应用系统设计与产品开发[M].北京: 人民邮电出版社,2004.198~206.
[19] 万福君,潘孙峰.单片机微机原理系统设计与应用[M].合肥:中国科技大学出版社,2001.140~155.
[20] 罗云斌.汇编语言全接触[EB/OL].http://www.VJStudio.net,2005—8.

附录1 总体设计图

发送端总体设计图如图附一所示:

图附一 发送端总体设计图

接收端总体设计图如图附二所示:

图附二 接收端总体设计图

附录2 完整程序

基于无线数传模块的电机遥控系统

Posted by 天际的荒草 | Posted in Docs | 文档 | Posted on 18-09-2009

标签:, , , , ,

0

摘 要 III

ABSTRACT IV

第一章 绪论 1
1.1 毕业论文课题简介 1
1.1.1 课题要求及背景意义 1
1.1.2 课题涉及知识的历史与发展 1
1.2毕业论文组织结构 4

第二章 AT89C2051单片机原理及应用 5
2.1功能概述及主要性能参数 5
2.2存储器组织及工作模式选择 8

第三章 无线数传模块RX100和TX100介绍 12
3.1 无线接收模块RX100 12
3.2 无线发送模块TX100 15

第四章 系统硬件电路设计 17
4.1硬件电路整体设计思路 17
4.2 PROTEL 99se应用 17
4.3 无线发送部分硬件电路设计 18
4.3.1 硬件电路设计 18
4.3.2 单片机I/O口上拉电阻选择讨论 19
4.4 无线接收及电机控制部分硬件电路设计 20
4.4.1 硬件电路设计 20
4.4.2 继电器选择讨论 21
4.4.3 三极管选择讨论 22
4.5 无线模块使用注意事项 22
4.6 系统无线收发中的干扰讨论 23
4.6.1 电源干扰 23
4.6.2 电路干扰 23
4.6.3 空间辐射干扰 23

第五章 系统软件程序设计 25
5.1 程序总体规划 25
5.2 串口编程讨论 25
5.2.1 串行通信基础 25
5.2.2 单片机串口使用 27
5.3 主机通信程序设计 30
5.3.1 预定义及全局变量部分 30
5.3.2 程序初始化部分 31
5.3.3 发送数据部分 32
5.4 从机通信程序设计 32
5.4.1 预定义及全局变量部分 33
5.4.2 程序初始化部分 33
5.4.3 接收数据部分 33
5.5 程序开发环境 34

第六章 结论 37

结束语 38

参考文献 39

附录一 40

附录二 41

摘 要
基于无线数传模块的电机遥控系统,硬件上采用AT89C2051单片机作为主控芯片,通过无线数传模块RX100和TX100收发数据,软件上采用单片机C语言编写信号发送和接收的程序。该系统可分为三个部分:无线发送部分、无线接收部分和电机控制部分,能够控制四个电机的转动方向。
无线发送部分通过与电源相连的开关置位AT89C2051单片机P1口的某一引脚,在开关闭合期间该引脚电平始终为高。单片机根据该引脚电平为高这一动作调用程序,向串口发送这一引脚所控制的电机的地址以及该电机转动方向的信号编码。单片机串口与无线发送模块TX100相连,从而将该编码信号发送出去。
四个电机所在接收端不断地接收发送端发送的地址信号并与自身地址比较,如果两地址相同,则接收转动方向控制信号并置位P1口对应引脚,否则继续接收地址信号。
电机控制部分由三极管和继电器以及电机组成。P1口相应引脚置位后导通与之相连的三极管,从而使继电器接通电源给电机供电,电机转动。

关键词 单片机,无线数传模块,无线发送部分,无线接收部分,电机控制部分

ABSTRACT
This is a motor system controlled by wireless mode based on wireless digital transmission module. The main controlling chip of this system is Single Chip Mircrocomputer AT89C2051. It sends data by TX100 module and receives data through RX100. Single Chip Mircrocomputer C Language was used as software language to write the program of sending and receiving signal. The system can be divided into three parts: wireless sending part, wireless receiving part and motor controlling part. This system was designed to control the turning directions of 4 motors.
The wireless sending part writes 1s to Port 1 pins when the switches connected with power are closed. And then the Single Chip Mircrocomputer sends a motor’s address and turning direction signal to the wireless sending module through the serial port if the pin’s voltage is high.
The receiving part receives address signal which sent by the sending part and compares the receiving data with the address data itself. If the two addresses are same the receiving part will receive the motor’s turning direction signal and write 1s to a relevant Port 1 pin. The receiving part will receive the address signal continually if the two addresses are not same.
The motor controlling part was made up of transistors, relays and a motor. The transistors will connect to the power when a Port 1 pin has been written 1s so that the relay connects to the power and supplies power to the motor, and then the motor rotates.

KEY WORDS Single Chip Mircrocomputer, wireless digital transmission module, wireless sending part, wireless receiving part, motor controlling part

第一章 绪论
1.1 毕业论文课题简介
1.1.1 课题要求及背景意义
本毕业论文设计题目是基于无线数传模块的电机遥控系统,来源于教师科研题。课题要求使用单片机C语言或汇编语言进行编程,使用通信模块,设计出能控制直流电机正反向转动的无线控制系统,系统具有地址识别功能,以便用于大型场馆对多个送风口的风量调节。
主要要求是掌握无线传输模块TX100和RX100的原理、功能及使用方法,掌握AT89C2051单片机的原理和使用方法。掌握protel99电路设计软件使用方法,设计出控制系统的原理图和线路板图;编制出控制系统的发送和接收程序;使用硬件调试线路板,设计出能实际应用(可直观演示)的控制系统。
主要目的是熟悉51单片机的基本原理,熟悉无线传输的基本原理;掌握设计和调试基本无线控制系统的知识和方法。
将单片机和无线控制结合起来作为课题对通信专业的学生有很大的好处,对于提高学生的能力也有很大的帮助。目前单片机应用范围极广,单片机产品也有很多,但是仍以51系列单片机为主导。而本课题中用到的AT89C2051单片机就是51系列单片机中最基础的一类,用好了该种单片机,对于以后应用51系列的其他单片机以及其他公司所生产的单片机都是有很大帮助的。所谓触类旁通,举一反三,正是学习该种单片机的目的。
在此毕业论文课题中涉及到无线传输模块,目的是让学生掌握无线传输方面的相关知识。近年来手机的出现对无线传输的要求进一步提高,尤其是3G、超3G的研究,让人们看到了无线传输领域的辉煌前景。而在日常生活中,人们对无线遥控的需求越来越大,相关产品也与日俱增。所以能够掌握这两方面的相关知识,对于以后的工作会有很大的帮助。
1.1.2 课题涉及知识的历史与发展
1.单片机的发展概况[1]
单片机出现的历史并不长,它的产生与发展和微处理器的产生与发展大体上同步。
1970年微型计算机研制成功后,随即在1971年,美国Intel公司生产出了4位单片机4004,它的特点是结构简单、功能单一、控制能力较弱,但价格低廉。1976年Intel公司推出了MCS-48系列单片机,它以体积小、功能全、价格低等特点获得了广泛的应用,成为单片机发展进程中的一个重要阶段,此可谓是第一代单片机。
在MCS-48系列单片机的基础上,Intel公司在20世纪80年代初推出了第二代单片机的代表MCS-51系列单片机。这一代单片机的主要技术特征是为单片机配置了完美的外部并行总线和串行通信接口,规范了特殊功能寄存器的控制模式,以及为增强控制功能而强化布尔处理系统和相关的指令系统,为发展具有良好兼容性的新一代单片机奠定了很好的基础。
近几年出现了具有许多新特点的单片机,可称之为第三代单片机。它以新一代的80C51系列单片机为代表。同时16位单片机也有很大发展。
尽管目前单片机品种繁多,但其中最为典型的仍当属Intel公司的MCS-51系列单片机。它的功能强大,兼容性强,软硬件资料丰富。国内也以此系列的单片机应用最为广泛,直到现在MCS-51仍不失为单片机中的主流机型。在今后相当长的时间内,单片机应用领域中的8位机主流地位还不会改变。
2.单片机的主要技术发展方向[2]
综观单片机20多年的发展过程,再从半导体集成电路技术的发展和微电子设计技术的发展,我们可以预见未来单片机技术发展的趋势。单片机将朝着大容量高性能化、小容量低价格化、外围电路的内装化以及I/O接口功能的增强、功耗降低等方向发展。
● 单片机的大容量化
单片机内存储器容量进一步扩大。以往片内ROM为1KB~8KB,RAM为64字节~256字节。现在片内ROM可达40KB,片内RAM可达4KB,I/O口也不需再外加扩展芯片。而随着单片机程序空间的扩大,在空余空间可嵌入实时操作系统RTOS等软件。这将大大提高产品的开发效率和单片机的性能。
● 单片机的高性能化
今后将不断改善单片机内CPU的性能,加快指令运算速度,提高系统控制的可靠性,强化位处理、中断及定时控制功能。采用流水线结构,指令以队列形式出现在CPU中,因而具有很高的运算速度。有的甚至采用多流水线结构,其运算速度比标准的单片机高出10倍以上。
单片机的扩展方式从并行总线发展出各种串行总线,并被工业界接受,形成一些工业标准,如I2C总线、DDB总线、USB接口等。它们采用3条数据总线代替现行的8位数据总线,从而减少了单片机引线,降低了成本。
● 单片机的小容量低廉化
小容量低廉的4位、8位机也是单片机发展方向之一。其用途是把以往用数字逻辑电路组成的控制电路单片化。专用型的单片机将得到大力发展。使用专用单片机可最大限度地简化系统结构,提高可靠性,使资源利用率最高。在大批量使用时有可观的经济效益。
● 单片机的外围电路内装化
随着单片机集成度的提高,可以把众多的外围功能器件集成到单片机内。除了CPU、ROM、RAM外,还可把A/D、D/A转换器、DMA控制器、声音发生器、监视定时器、液晶驱动电路、锁相电路等一并集成在芯片内。为了减少外部的驱动芯片,进一步增强单片机的并行驱动能力,有的单片机可直接输出大电流和高电压,以便直接驱动显示器。为进一步加快I/O口的传输速度,有的单片机还设置了高速I/O口,可用最快的速度触动外部设备,也可以用最快的速度响应外部事件。
● 单片机将实现全面的低功耗管理
单片机的全盘CMOS化,非CMOS工艺单片机的淘汰,将给单片机技术发展带来广阔的天地。最显著的变革是本身低功耗和低功耗管理技术的飞速发展。低功耗的技术措施可提高可靠性,降低工作电压,可使抗噪声和抗干扰等各方面性能全面提高。这是一切电子系统所追求的目标。
3.单片机应用[3]
由于单片机功能的飞速发展,它的应用范围日益广泛,已远远超出了计算机科学的领域。小到玩具、信用卡,大到航天器、机器人,从实现数据采集、过程控制、模糊控制等智能系统到人类的日常生活,到处都离不开单片机。其主要的应用领域如下。
● 在测控系统中的应用
单片机可以用于构成各种工业控制系统、自适应控制系统、数据采集系统等。例如,工业上的锅炉控制、电机控制、车辆检测系统、水闸自动控制、数控机床及军事上的雷达、导弹系统等。
● 在智能化仪器仪表中的应用
单片机应用于仪器仪表设备中促使仪器仪表向数字化、智能化、多功能化和综合化等方向发展。单片机的软件编程技术使长期以来测量仪表中的误差修正、线性化的处理等难题迎刃而解。
● 在机电一体化中的应用
单片机与传统的机械产品结合使传统的机械产品结构简化,控制走向智能化,构成新一代的机电一体化产品。这是机械工业发展的方向。
● 在智能接口中的应用
计算机系统,特别是较大型的工业测控系统中采用单片机进行接口的控制管理,单片机与主机并行工作,可大大提高系统的运行速度。例如,在大型数据采集系统中,用单片机对模/数转换接口进行控制不仅可以提高采集速度,而且可以对数据进行预处理。如数字滤波、误差修正、线性化处理等。
● 在人类生活中的应用
单片机由于其价格低廉、体积小巧,被广泛应用在人类生活的诸多场合,如洗衣机、电冰箱、空调器、电饭煲、视听音响设备、大屏幕显示系统、电子玩具、信用卡、楼宇防盗系统等。单片机将使人类的生活更加方便舒适,丰富多彩。
1.2毕业论文组织结构
结合毕业论文设计要求,本毕业论文接下来的各章节将如下安排:
第二章 AT89C2051单片机原理及应用
主要介绍了AT89C2051单片机的性能参数、引脚功能、存储器结构、相关指令和编程方法。本章通过对AT89C2051单片机相关资料的简单介绍,让设计者了解和掌握该单片机的相关知识以及应用方法,以便方便的设计系统的硬件结构。是系统硬件基础知识的一个准备。
第三章 无线数传模块RX100和TX100介绍
主要介绍了系统无线传输中用到的两个主要模块RX100和TX100,也是对系统硬件基础知识的准备。本章介绍了无线发送模块TX100和无线接收模块RX100的基本参数、性能指标测试结果、应用电路以及工作方式。通过了解这两个模块的相关知识,使设计者了解和掌握这两个模块的应用方法,以便更好的在系统设计中使用。
第四章 系统硬件电路设计
通过前两章知识的准备,我们便可以设计系统的硬件电路了。当然在硬件电路的设计过程中,仅仅前两章的知识还是不够,必须在必要的时候补充相关必须知识。本章首先对系统的硬件电路给出了一个总体框架,然后分解设计,并不时的补充一些必须知识。
第五章 系统软件程序设计
通过对串口编程知识的介绍,使我们理解和掌握单片机串口编程的原理,然后再根据第四章设计的硬件电路图编制出系统软件程序。
第六章 结论
结论是对论文最后的总结。
第七章 结束语
在结束语中,设计者对在毕业设计工作曾直接给予自己帮助的老师和同学表示自己的感谢。
附录
附录中将对一些论文中涉及到的英文缩写给予解释,并且附上相关程序。

第二章 AT89C2051单片机原理及应用
2.1功能概述及主要性能参数[4]
AT89C2051是美国ATMEL公司生产的低电压,高性能CMOS 8位单片机,片内含2k bytes的可反复擦写的只读程序存储器(PEROM)和128 bytes的随机存取数据存储器(RAM),器件采用ATMEL公司高密度、非易失性存储技术生产,兼容标准MCS-51指令系统,片内置通用8位中央处理器和Flash存储单元,功能强大。AT89C2051单片机可为您提供许多高性价比的应用场合。

图2.1 AT89C2051管脚图
1.主要性能参数:
● 与MCS-51产品指令系统完全兼容 ● 2k字节可重擦写闪速存储器
● 1000 次擦写周期 ● 2.7V—6V的工作电压范围
● 全静态操作:0Hz—24MHz ● 两级加密程序存储器
● 128×8字节内部RAM ● 15个可编程I/O口线
● 2个 16位定时/计数器 ● 6个中断源
● 可编程串行UART通道 ● 可直接驱动LED的输出端口
● 内置一个模拟比较器 ● 低功耗空闲和掉电模式
2.功能特性概述:
AT89C2051提供以下标准功能:2k字节Flash闪速存储器,128字节内部RAM,15个I/O口线,两个16位定时/计数器,一个5向量两级中断结构,一个全双工串行通信口,内置一格精密比较器,片内振荡器及时钟电路。同时,AT89C2051可降至0Hz的静态逻辑操作,并支持两种软件可选的节电工作模式。空闲方式停止CPU的工作,但允许RAM,定时/计数器,串行通信口及中断系统继续工作。掉电方式保存RAM中的内容,但振荡器停止工作并禁止其它所有部件工作直到下一个硬件复位。

图2.2 AT89C2051实物样片
图2.3 AT89C2051电路方框图
3.引脚功能说明:
● Vcc:电源电压
● GND:地
● P1口:P1口是一组8位双向I/O口,P1.2—P1.7提供内部上拉电阻,P1.0和P1.1内部无上拉电阻,主要是考虑它们分别是内部精密比较器的同相输入端(AINO)和反相输入端(AINI),如果需要应在外部接上拉电阻。P1口输出缓冲器可吸收20mA电流并可直接驱动LED。当P1口引脚写入“1”时可做输入端,当引脚P1.2—P1.7用作输入并外部拉低时,它们将因内部的上拉电阻而输出电流(In)。
P1口还在Flash闪速编程及程序校验时接收代码数据。
● P3口:P3口的P3.0—P3.5、P3.7是带有内部上拉电阻的7个双向I/O口。P3.6没有引出,它虽然作为一个通用I/O口,但是不可访问,不过它可作为固定输入片内比较器的输出信号,P3口缓冲器可吸收20mA电流。当P3口写入“1”时,它们被内部上拉电阻拉高并可作为输入端口。作输入端时,被外部拉低的P3口将用上拉电阻输出电流(In)。
P3口还用于实现AT89C2051特殊的功能,如表2.1所示:
表2.1 P3口的特殊功能
口引脚 功能特性
P3.0 RXD(串行输入口)
P3.1 TXD(串行输出口)
P3.2 INT0(外中断0)

P3.3 INT1(外中断1)

P3.4 T0(定时/计数器0外部输入)
P3.5 T1(定时/计数器1外部输入)
P3口还接收一些用于Flash闪速存储器编程和程序校验的控制信号。
● RST:复位输入。RST引脚一旦变成两个机器周期以上高电平,所有的I/O口都将复位到“1”(高电平)状态,当振荡器正在工作时,持续两个机器周期以上的高电平便可完成复位,每个机器周期为12个振荡时钟周期。
● XTAL1:振荡器反相放大器及内部时钟发生器的输入端。
● XTAL2:振荡器反相放大器的输出端。
● 振荡器特性
XTAL1、XTAL2为片内振荡器的反相放大器的输入和输出端,如图2.4所示。可采用石英晶体或陶瓷振荡器组成时钟振荡器,如需从外部输入时钟驱动AT89C2051,时钟信号从XTAL1输入,XTAL2应悬空。由于输入到内部电路是经过一个2分频触发器,所以输入的外部时钟信号无需特殊要求,但它必须符合电平的最大和最小值及时序规范。

石英晶体时:C1,C2=30pF±10pF
陶瓷晶体时:C1,C2=40pF±10pF
图2.4 XTAL1、XTAL2振荡电路图
2.2存储器组织及工作模式选择[5]
1.特殊功能寄存器:
片内特殊功能寄存器(SFR)空间存储区的映像图如表2.2所示:
表2.2 片内特殊功能寄存器(SFR)空间存储区的映像图
序号 地址 符号 复位值 说明
1 81H SP 07H 堆栈指针
2 82H DPL 00H 数据指针DPTR低8位
3 83H DPH 00H 数据指针DPTR高8位
4 87H PCON 0XXX 0000B 电源控制器
5 88H TCON 00H 定时器控制器
6 89H TMOD 00H 定时器模式寄存器
7 8AH TL0 00H 定时器0低8位
8 8BH TL1 00H 定时器1低8位
9 8CH TL1 00H 定时器0高8位
10 8DH TH1 00H 定时器1高8位
11 90H P1 FFH P1口锁存器
12 98H SCON 00H 串行口控制器
13 99H SBUF XXXX XXXXB 串行口数据缓冲器
14 0A8H IE 0XX0 0000B 中断允许寄存器
15 0B0H P3 FFH P3口锁存器
16 0B8H IP XXX0 0000B 中断优先寄存器
17 0D0H PSW 00H 程序状态字
18 0E0H ACC 00H 累加器
19 0F0H B 00H B寄存器
并非存储区中所有的地址单元都被占用,未占用的地址单元亦不能使用,如果对其进行“读”访问一般返回为随机数,“写”访问也不确定。
这些单元是为了以后利用这些未使用的地址单元的扩展功能而设置的,所以用户软件不要对它们写“1”。
2.工作模式
空闲模式:
在空闲模式下,CPU保持睡眠状态而所有片内的外设仍保持激活状态,这种方式由软件产生。此时,片内RAM和所有特殊功能寄存器的内容保持不变。空闲模式可由任何允许的中断请求或硬件复位终止。
P1.0和P1.1在不使用外部上拉电阻的情况下应设置为“0”,或者在使用上拉电阻的情况下设置为“1”。应注意的是:在用硬件复位终止空闲模式时,AT89C2051通常从程序停止一直到内部复位获得控制之前的两个机器周期处恢复程序执行。在这种情况下片内硬件禁止对内部RAM的读写,但允许对端口访问,要消除硬件复位终止空闲模式对端口意外写入的可能,原则上进入空闲模式指令的下一条指令不应该对端口引脚或外部存储器进行访问。
掉电模式:
在掉电模式下,振荡器停止工作,进入掉电模式的指令是最后一条被执行的指令,片内RAM和特殊功能寄存器的内容在终止掉电模式前被冻结。退出掉电模式的唯一方法是硬件复位,复位后将重新定义全部特殊功能寄存器但不改变RAM中的内容,在Vcc恢复到工作电平前,复位应无效,且必须保持一定时间以使振荡器重启动并稳定工作。
P1.0和P1.1在不使用外部上拉电阻的情况下应设置为“0”,或者在使用外部上拉电阻时应设为“1”。
3.Flasf闪速存储器的编程
AT89C2051是在擦除状态下(也即所有单元内容均为FFH时)用2k字节的片内PEROM代码存储阵列存储程序的,且其程序存储器可反复编程。代码存储阵列一次编程一个字节,一旦阵列被编程,如需重新编程一非空(空为:FFH)字节,必须对整个存储器阵列进行电擦除。
AT89C2051内Flash闪速存储器的编程和校验电路如图2.5和图2.6所示。

图2.5 编程电路

图2.6 校验电路
编程方法:
1).上电次序:
在Vcc和GND引脚之间加上电源,设置RST和XTAL1为GND电平,其他引脚置空,等待至少10ms以上。
2).置RST引脚为高电平,置P3.2引脚为高电平。
3).对引脚P3.3、P3.4、P3.5、P3.7按表2.3正确组合后加上逻辑高电平“H”或逻辑低电平“L”即可对PEROM进行编程操作。
表2.3 AT89C2051Flash闪速编程方式
方式 RST/VPP P3.2/PROG P3.3 P3.4 P3.5 P3.7
写数据码 12V
L H H H
读数据码 H H L L H H
写时钟 Bit-1 12V
H H H H
Bit-2 12V
H H L L
片擦除 12V (2)
H L L L
读签名字片 H H L L L L

注:1、内部PEROM地址计数器在RST的上升沿复位到000H并由XTAL1引脚正脉冲进行计数。
2、片擦除需要10ns的PROG脉冲。
3、编程、期间P3.1被拉低来指示RDY/ESY。
4).在000H地址单元对P1.0—P1.7输入数据代码字节。
5).置RST端为+12V,激活编程
6).使P3.2跳变一次来编程 PEROM 阵列中的一个字节或者加密位,写字节周期是自身定时的,一般需时1.2ms。
7).当校验已编程的数据时,使RST从+12V降到逻辑高电平“H”,置P3.3-P3.7 引脚到正确的电平即可从Pl口读取数据。
8).对下一地址单元编程时,XTALl引脚正脉冲跳变一次使地址计数器加1,在P1口输入新的数据字节。
9).重复5至8,可对整个2k字节阵列全部编程,直到目标文件结束。
10).下电次序:
置XTAL1为低“L”电平,置RST为“L”电平,置空所有其它I/O引脚,关闭Vcc电源 。
数据查询:
AT89C205l 具有写周期结束的数据查询功能,在写周期期间,对最后写入的字节尝试读将令P1.7上写入数据的操作结束。当写周期完成,全部输出端的真实数据有效,同时下一个周期开始,数据查询可在写周期被初始化的任一时刻开始。
程序校验:
如果加密位LB1、LB2没有进行编程,则代码数据可通过校验数据线读取:
1).使RST从“L”变为“H”,复位内部的地址计数器为000H。
2).对代码数据加上正确的控制信号即可在Pl口引脚上读取数据。
3).XTALl引脚跳变一次使内部地址计数器加1。
4). 从P1口读取下一个代码字节。
5).重复3到4步骤,即可将全部单元的数据读取。
加密位不可直接校验,加密位的校验可通过对存储器的校验和写入状态来验证。
芯片擦除:
利用控制信号的正确组合并保持P3.2引脚10ms的低电平即可将PEROM阵列(2k字节)和两个加密位整片擦除,代码阵列在片擦除操作中将任何非空单元写入“1”可被再编程之前进行。
读片内签名字节:
除P3.5、P3.7必须被拉成逻辑低电平外,读签名字节的过程和单元000H、001H及002H的正常校验相同,返回值意义如下:
(000H)=1EH声明产品由ATMEL公司制造。
(001H)=21H声明为89C2051单片机。
8.编程接口
Flash闪速阵列中的每一代码字节进行写入且整个存储器可在控制信号的正确组合下进行擦除,写操作周期是自身定时的,初始化后它将自动定时到操作完成。

第三章 无线数传模块RX100和TX100介绍
3.1 无线接收模块RX100[6]
1.RX100无线接收模块基本参数介绍:
RX100 ASK无线接收模组采用晶体稳频,具有频点稳定、数据传输速率高、体积小巧、功耗低、接口方便等特点。极高的性价比使其在无线遥控、玩具、安防、无线抄表、数字楼宇对讲系统等小区域低速无线数字通信领域得到了广泛应用。

图3.1 RX100 ASK无线接收模组功能结构图
RX100基本性能参数:
最大外形尺寸:31×23×6mm。
接口:3PIN(100mil/2.54mm)。
输入信号接口:TTL/CMOS兼容。
工作电压:DC 5.0V-7.0V。
工作电流(Vcc=4V):2.2mA。
接收灵敏度:-100dBm(433.92MHz 1KHz方波调制ARP)。
调制速度:DC-13KHz(433.92MHz ARP)。
工作频率范围:200MHz-500MHz(315.000MHz,433.920MHz)。
中心频点误差:±5ppm(TA=25℃)
工作温度范围:-40℃-+85℃(推荐-10℃-+60℃)。
接口与布局:

图3.2 RX100 ASK无线接收模组平面布局图

图3.3 实物照片
主要性能指标测试设备:
HP8567A频谱分析仪,HP8656B高频信号发生器,FLUKE123示波器,DH1718D-4双路跟踪稳压电源。
2.RX100无线接收模块相关电路介绍:

图3.4 TX100/RX100 ASK无线数传模组典型应用电路(UART)
使用时把RF部分和其它应用电路系统分开供电,以最大限度降低电路的串扰;如果经过试验验证,在满足用户使用要求的前提下也可以集中供电。
为保证最佳使用效果,建议用户使用标准为50欧姆的天线以保证最大辐射效率,如果使用普通导线作天线,导线长度请参考下式计算:
导线长度=7135/TX100中心频率(MHz)cm 。
常用频点天线长度列表于下:
表3.1 常用频点天线长度
中心频率(MHz) 230 315 433.920 470 866
天线长度(cm) 31 22.7 16.4 15.2 8.2
由于RX100 ASK无线接收模组没有待机模式,在需要极低功耗的系统设计中,RX100的动作电流小,可以使用一个74HC系列的门电路(如74HC14)输出给其供电,并采用1:X接收监听方式侦测发送数据包,这样的处理可以将整个RF接收部分的功耗降低几十个μA以内,如图3.5所示。

图3.5 使用门电路供电并且1:X监听以降低RX100的功耗
RX100 ASK无线接收模组工作电源为4.5-7V,对于电池供电的系统(2.7-4.5V),推荐使用图3.6的电路进行升压转换。

图3.6 3V/5V升压转换以使RX100适应电池供电的应用
3.2 无线发送模块TX100[7]
1.TX100无线发送模块基本参数介绍:
TX100 ASK无线发送模组采用晶体稳频,具有频点稳定、数据传输速率高、体积小巧、功耗低、接口方便等特点。极高的性能价格比使其在无线遥控、玩具、安防、无线抄表、数字楼宇对讲系统等小区域低速无线数字通信领域得到了广泛应用。
TX100基本性能参数:
最大外形尺寸:29×14×4 mm 。
接 口:4 PIN(100mil/2.54mm)。
输入信号接口:TTL/CMOS兼容。
工作电压:DC 3.0V(1.8-5.5V均可以工作,仅发射功率不同)。
表3.2 TX100无线模块工作电流(Vcc=3v)
模 式 工作模式(EN=1) 待机模式(EN=0)
DATA=0 DATA=1 DATA=1 DATA=0
电 流 4.4mA 20mA 4.4mA 2-3μA
辐射功率:10±1 dBm(Vcc=3.0V DATA=EN=Vcc 433.92MHz单频ARP)。
调制速度:DC-100KHz(50%占空比方波,TTL信号) ASK。
工作频率范围:100MHz-1GHz。
中心频点误差:±5ppm(TA=25℃)。
工作温度范围:-40℃-+85℃(推荐-10℃-+60℃)。
接口与布局 :

图3.7 TX100ASK无线发送模组平面布局图

图3.8 TX100 ASK 无线发送模组功能结构图
主要性能指标测试设备:
HP8567A频谱分析仪,FLUKE123示波器,GFG-8016G函数发生器,DH1718D-4双路跟踪稳压电源 。
2.TX100无线发送模块相关电路介绍:
TX100模块在1.8V-5.5V工作电源下均可以可靠工作,但其工作电流及RF 辐射功率会有很大差别。不同工作电压下,数据接口部分电平要求于下:
发送使能(TXEN):“1”信号=Vcc±0.3V ,“0”信号=公共地电平±0.3V
发送数据(DATA):1.5V< “1”信号<6V ,“0”信号=公共电平±0.3V
接口驱动电流:IH >0.5mA 。
为保证最佳使用效果,最好使用标准50欧姆天线以保证最大辐射效率,如果使用普通导线作天线,导线长度请参考下式计算:
导线长度=7135/TX100中心频率(MHz) cm
表3.3 常用频点天线长度
中心频率 230MHz 315MHz 433.920MHz 470MHz 866MHz
天线长度(cm) 31 22.7 16.4 15.2 8.2
直接使用单片机串口进行无线通信时,为提高接收机灵敏度,并减小因为错位引起的误码,可参考下面的数据帧结构,并在接收端采用帧同步数据接收。
表3.4 数据帧结构
HRH推荐的无线传输数据帧结构([ ]中可以去掉)
引导 冗余 同步 [主机ID] [从机ID] 数据
长度 数据 [数据
校验] [结束符] 冗余
55 55 FF AA XX XX XX XX XX XX FF
推荐的数据,如55表示16进制数据(HEX)55H,XX表示用户自行定义
在需要极低功耗或高速率的系统设计中,直接使用I/O口线来传送数据。如果采用串口(UART)来传送,请注意串口的空闲状态为“1”电平(MASK=1),在传送结束后应该把TXEN和DATA端置低,以进入待机模式。
在从待机状态返回时(TXEN从“0”变为“1”),需要等待大约1-2mS后才可以开始数据传送,否则在数据率超过1200bps时,传送数据的第1位可能丢失。

第四章 系统硬件电路设计
4.1硬件电路整体设计思路
本毕业设计课题题目为“基于无线数传模块的电机遥控系统”,从题目上看该系统可以分为三个部分:无线发送部分、无线接收部分和电机控制部分。而无线接收部分和电机控制部分又可以组合为一个部分。从这种思路出发,可以画出该系统的硬件系统框图如图4.1所示。

无线发送部分 无线接收部分 电机控制部分
图4.1 系统硬件框图
4.2 PROTEL 99se应用[8]
Protel 99se采用全新的管理方式,即数据库的管理方式。Protel 99se 是在桌面环境下第一个以独特的设计管理和团队合作技术为核心的全方位的印制板设计系统。所有Protel 99se设计文件都被存储在唯一的综合设计数据库中,并显示在唯一的综合设计编辑窗口。Protel 99se软件沿袭了Protel以前版本方便易学的特点,内部界面与Protel 98大体相同,新增加了一些功能模块。Protel公司引进了德国INCASES公司的先进技术,在Protel99中集成了信号完整性工具,精确的模型和板分析,帮助你在设计周期里利用信号完整性分析可获得一次性成功和消除盲目性。Protel99se容易使用的特性就是新的“这是什么”帮助。按下任何对话框右上角的小问号,然后选择你所要的信息。现在可以很快地看到特性的功能,然后用到设计中,按下状态栏末端的按钮,使用自然语言帮助顾问。
Protel99的组成:原理图设计系统,印刷电路板设计系统,信号模拟仿真系统,可编程逻辑设计系统,Protel99内置编辑器。
Protel 99se的运行界面如图4.2

图4.2 Protel 99se的运行界面
4.3 无线发送部分硬件电路设计
4.3.1 硬件电路设计
课题要求设计出能控制直流电机正反向转动的无线控制系统,并且要求系统具有地址识别功能,以便控制多个电机。所以在设计无线发送部分时,选择AT89C2051单片机的P1口为控制口,每两个引脚控制一个电机的正转和反转。利用P1口的8个引脚可以控制4个电机的正反向转动。
在本系统中,P1口引脚与所控制电机及及其转动方向对应关系如表4.1所示。
表4.1 P1口引脚与所控制电机号及其转动方向对应表
引脚号 电机号 电机转动方向
P1.0 一号 正转
P1.1 一号 反转
P1.2 二号 正转
P1.3 二号 反转
P1.4 三号 正转
P1.5 三号 反转
P1.6 四号 正转
P1.7 四号 反转
这样,利用开关,将相应引脚的电平长时间置位,从而激活单片机内程序使其发出相应指令,接收端收到指令后向电机发出转动命令便可以控制不同电机的转动方向,也即实现了题目所要求的地址识别功能。
根据第二章的知识知道,无线发送模块TX100有4个接口引脚[7],分别为工作电源(V)、发送使能(E)、发送数据(D)和公共地(G)。发送使能端用来选择TX100的工作模式,当EN=1时为工作模式,当EN=0时为待机模式。将发送使能端(E)与AT89C2051单片机的P3.7脚相连,通过对该脚电平的编程控制达到控制TX100的工作模式的目的。发送数据端与AT89C2051单片机的TxD(P3.1)脚相连[9],在TX100为工作模式的时候将信号发送出去。
综上,可以画出发送部分电路图如图4.3所示。
图4.3 无线发送部分
4.3.2 单片机I/O口上拉电阻选择讨论
AT89C2051单片机P1.0与P1.1内部无上拉电阻,如果需要应在外部接上拉电阻。下面对单片机I/O口上拉电阻的选择予以讨论,以便在应用时可以有选择的使用电阻。
如果单片机I/O口用来驱动LED,那么用阻值为1K左右的电阻就可以满足要求。如果希望LED亮度大一些,可以减小电阻的阻值,但是不要小于200欧姆,否则电流太大;如果希望LED亮度小一些,可以增大电阻的阻值,增加的程度主要看亮度情况,以亮度合适为准,一般来说阻值超过3K时,亮度就很弱了,但是对于超高亮度的LED,有时候电阻为10K时觉得亮度还能够用。
对于单片机I/O口驱动光耦合器的情况,如果是高电位有效,即耦合器输入端接端口和地之间,那么和驱动LED的情况是一样的;如果是低电位有效,即耦合器输入端接端口和VCC之间,因为要串接一个阻值在1—4.7k之间的电阻,所以上拉电阻的阻值就可以用的特别大,用阻值在100k——500K之间的电阻都可以,当然用10K的也可以,不过考虑到省电问题,就没有必要用太小阻值的电阻。
对于单片机I/O口驱动晶体管,又分为PNP和NPN管两种情况:
对于NPN,因为NPN管是高电平有效的,因此上拉电阻的阻值用2K——20K之间的,不过具体阻值的大小还要看晶体管的集电极接的负载的情况。对于LED类负载,由于发光电流很小,因此上拉电阻的阻值可以用20k的,但是如果管子的集电极的负载为继电器时,由于集电极电流大,因此上拉电阻的阻值最好不要大于4.7K,有时候甚至用2K的。
对于PNP管,因为PNP管是低电平有效的,因此上拉电阻的阻值要在100K以上,且管子的基极必须串接一个阻值在1—10K之间的电阻,具体电阻阻值的大小要看管子集电极的负载是什么,如果LED类负载,由于发光电流很小,因此基极串接的电阻的阻值可以用20k的,但是如果管子的集电极为继电器负载时,因为集电极电流大,因此基极电阻的阻值最好不要大于4.7K。
对于驱动TTL集成电路,上拉电阻的阻值要在1—10K之间,如果电阻太大会拉不起来,因此要求电阻的阻值较小。但是对于CMOS集成电路,上拉电阻的阻值就要求较大,一般不小于20K,通常用100K的。实际上对于CMOS电路,上拉电阻的阻值用1M的也是可以,但是上拉电阻的阻值太大时,容易产生干扰,尤其是线路板的线条很长的时候,这种干扰更严重,这种情况下上拉电阻不宜过大,一般要小于100K,有的时候甚至要求小于10K。
根据以上分析,上拉电阻的阻值的选取是有很多讲究,不能乱用,需要具体情况具体分析。如果刚开始用,那么尽量用阻值小一些的,不过这样需要牺牲一些电源功耗。
4.4 无线接收及电机控制部分硬件电路设计
4.4.1 硬件电路设计
无线接收模块RX100有三个引脚接口[6],分别为工作电源(V)、接收数据(D)和公共地(G)。无线接收模块将接收到的数据通过其接收数据引脚(D)传送到单片机接收串口RxD(P3.0)[9],单片机调用程序对该信号进行处理,判断其是否为本机地址。若该信号是本机地址,则接收转动方向控制信号,正转命令,则置P1.7为高电平,反之,则置P1.6为高电平。若不是本机地址,则继续接收地址信号。由于题目要求实现电机正转或反转的控制系统,所以可以在直流电机的两个输入端分别接上继电器,如图4.4所示。
图4.4 电机控制部分
由上图可以看出,当P1.7为高电平且P1.6为低电平时,三极管Q1导通Q2截止,继电器K1充电,充电后开关K1与接地端断开并与VCC接通给直流电机正向供电,开关K2接地,此时电机的电流方向为正向,电机正转。而当P1.6为高电平且P1.7为低电平时,三极管Q2导通Q1截止,继电器K2充电,充电后K2与接地端断开并与VCC接通给直流电机反向供电,开关K1接地,此时电机的电流方向为反向,电机反转。
综上,可以画出无线接收和电机控制部分电路如图4.5所示。
图4.5 无线接收和电机控制部分
按照前面的设计,该系统可以控制4个电机,前面已经画出了其中一个电机的控制电路。事实上,四个电机的控制电路完全相同,其所不同的只是控制程序中的地址不同,这点将在后面的程序编写中介绍。
4.4.2 继电器选择讨论[10]
继电器就是电子机械开关,它是用漆包铜线在一个圆铁芯上绕几百圈至几千圈,当线圈中流过电流时,圆铁芯上便产生了磁场,从而把圆铁芯上边的带有接触片的铁板吸住,使之断开第一个触点而接通第二个开关触点。当线圈断电时,铁芯失去磁性,由于接触铜片的弹性作用,使铁板离开铁芯,恢复与第一个触点的接通。因此,可以用很小的电流去控制其他电路的开关。整个继电器由塑料或有机玻璃防尘罩保护着,有的还是全密封的,以防触电氧化。
当控制电路中的开关K闭合时,电磁铁便具有磁性,将衔铁吸下,使继电器触点接触,与触点相连接的电源电路便接通;当控制开关K断开时,电磁铁的磁性被撤消,继电器触点弹开,电源电路亦随之断开。
由于本系统只是要求直流电机能够实现正反转,所以只要利用电磁继电器的开关特性给电机供电,使电机在需要转动的时候有相应方向的电流通过即刻。继电器的使用,使得本系统得到了简化而且更容易实现。
4.4.3 三极管选择讨论
由于单片机的I/O口电路不能很好的带动电磁继电器工作,所以本系统利用三极管对电流的放大作用来给继电器供电,使其能得到足够电流从而正常工作。
三极管有PNP型和NPN型两种[11]。对于PNP型三极管,当其工作在放大区时,其三个引脚集电极、基极和发射极的电压大小关系为:集电极<基极<发射极;对于NPN型三极管,当其工作在放大区时,其三个引脚集电极、基极和发射极的电压大小关系为:集电极>基极>发射机。在本系统中,三极管的基极与单片机的引脚相连,因此PNP管在基极为低电平时有效,而NPN管在基极为高电平时有效。而且按照4.3.2节的讨论,在使用PNP管时,需要串接一个阻值为1-10K大小的电阻。
根据本系统硬件电路的设计思路,希望在初始状态下,单片机各引脚均为低电平,当某引脚电平变高时触发系统工作,这样既可以省电同时也能够保护单片机。所以我们选择NPN管对继电器电源电流进行放大。
4.5 无线模块使用注意事项
1.无线模块电源和用户数字电源(如:单片机系统等数字系统电源)应在系统总电源接入出一点相联。
2.无线模块电源地应和用户系统的总电源的地相联。
3.发射和接收模块的距离应保持两米以上,且附近尽量避免有同频干扰源。
4.电源尽量选用经过稳压模块和电容处理后的电源。在带负载的情况下,用示波器观察电压的波动应小于1‰,即5mV。
5.发送数据包格式建议用户先发射5个以上的字节55H,再发射一个字节FFH,最后发射数据。
6.建议用户把RF部分和其它应用电路系统分开供电,以最大限度降低电磁串扰。
7.工作状态时一定注意不能插拔天线。
注:
1.通信距离指在无遮挡开阔地,使用导线作天线,天线离地1.5 米,4800bps(ASK)/9600bps(FSK)数据率,收发模组均处于静止状态,433.92MHz 频点,BER(位误码率)<10-3时所测得。
2.ASK模组不适合移动中通信,FSK模组在高速移动中(相对速度>60Km/h)通信时,可靠通信距离大致会减半。
3.架高天线或使用高增益定向天线会有利于通信的稳定或提高可靠通信距离。同样的,通过在软件中使用编码、交织以及前向纠错技术,会等效提高接收增益,从而达到提高可靠通信距离的目的,一般软件纠错带来的等效增益在2-5dB(FSK)左右,具体值与算法及使用环境的不同而不同。
4.6 系统无线收发中的干扰讨论
4.6.1 电源干扰
若使用开关电源供电,则将其换为线性电源(78系列)或将开关电源屏蔽好并通过使用104+102J+101J降低纹波(1MHz以内),并且通过二次稳压为无线模组提供电源。
若电源纹波太大,可以考虑增加滤波电容,必要时可在每个IC电源脚对地并连104+102J(高频磁)电容,将无线模组电源纹波限制在10mV以内。或者向无线模组单独供电。
若电路中DC/DC模组串扰过大,则可对DC/DC供电电源进行隔离,或者在电路中增加102J高频磁滤波电容。如果DC/DC未屏蔽,应将其屏蔽。
若电源电路中有大感性负载存在,导致无线模块起停时产生严重的电磁干扰并耦合到电源上。解决的办法是对大感性负载和无线模块隔离供电并做好无线模块的滤波。
4.6.2 电路干扰
若地线连接不正确,可将无线模组地直接一点接到电源地,其它数字电路就近接地,并使用大面积覆铜铺地。
不要使用仿真器操作来测试无线模块通信距离,应直接写芯片。
若电路中有高速电路(MCU、CPU),使得PCB走线不合理。应尽量缩短、加宽高速信号线走线,45度角折线,尽量少过孔;时钟或晶体电路应注意外壳接地。
若有电磁辐射大的器件靠近无线模组,应尽量不使用电磁辐射大的器件,比如某些品牌的51单片机。若不可避免要使用电磁辐射大的器件,在电路布局时应将其远离无线模组。
4.6.3 空间辐射干扰
如果无线模块周围存在大功率的同频无线电设备,应避开这些设备的工作时段或者换用其它频段的无线模组。
若周围环境电磁干扰过大,可以通过仪器跟踪或做试验,确定这些电磁干扰的大致频段并避开这些频段。
若应用环境中有产生电火花的设备(比如汽车点火回路高压线断裂),可以使用快速能量吸收器件来避免电火花产生(比如继电器打火);尽量缩短引线并滤波,可能时把整个无线模组或电路屏蔽起来,但天线需引出。

第五章 系统软件程序设计
5.1 程序总体规划
本系统是一个单片机点对点通信系统,系统处于单工通信方式,也就是按照主从机设计。主机只发送数据,从机只接收数据。主从机在通信过程中没有握手过程,无字节奇偶校验。具体协议内容规定如下:
● 通信双方均使用9600bit/s的速率传送和接收数据,使用主从机通信,主机发送数据,从机接收数据。双方在发送数据和接收数据时使用查询方式。
● 主机上电后即开始循环查询,当有开关闭合后,主机开始循环发送该开关对应的电机地址,接着发送电机转动方向信号。开关断开后,停止发送。
● 从机上电后即开始循环查询,当查询到与本机地址相同的地址信号时继续接收电机转动方向控制信号。否则继续接收地址信号,不接收电机转动方向控制信号。
表5.1 主机开关地址与电机号及其转动方向对应关系表
开关号 地址信号 引脚号 电机号 转动方向控制信号 转动方向
S1 73H P1.0 一号 97H 正转
S2 73H P1.1 一号 D1H 反转
S3 89H P1.2 二号 97H 正转
S4 89H P1.3 二号 D1H 反转
S5 5DH P1.4 三号 97H 正转
S6 5DH P1.5 三号 D1H 反转
S7 CBH P1.6 四号 97H 正转
S8 CBH P1.7 四号 D1H 反转
5.2 串口编程讨论[12]
5.2.1 串行通信基础
串行通信是一种能够把二进制数据按照比特传送的通信方式,适用于远程通信和远程控制。串行通信一般被分为同步和异步两种方式。
同步串行通信方式:即同步方式,是一种连续串行传送数据的通信方式,一次通信只能传送一帧信息,同时需要有至少一条的信号线来为对方提供和数据传送同步的精确时钟,以确保数据无误传输。同步帧一般有固定的帧格式,其中包含了帧类型、帧长度或结束标志、校验位等若干内容。一般在需要高速串行传输数据的场合采用同步帧,异步串行通信传输速率不能达到要求的情况下也要考虑采用同步帧。目前同步串行通信的传输速率可达到百兆比特每秒(Mbit/s)。
异步串行通信方式:异步串行通信方式是使用51系列单片机比较常用的一种串行通信方式。它具有实现比较简单的优点,但传送速率很低,一般使用时均为9.6kbit/s,有时也可达到更高的速率。它通常以字符或者字节为单位,组成字符帧来传送。异步通信方式不需要信号线来传送数据的时钟,通信双方均使用自己的时钟来控制数据的发送和接收,二者所具有的时钟是相互独立不同步的。
对于异步串行通信方式,收发端在使用自己的时钟的情况下是用字符帧格式来协调数据的收发的。在平时,发送线为高电平(即为1),每当接收端检测到传输线上发送过来的电平为低电平逻辑0,即字符的起始位时,就知道一帧信息已经开始。在收到规定个数的数据以后,就停止接收。此时信号线上的电平也应该为逻辑高电平,即结束位。图5.1说明了字符帧的一般格式。一个字符帧一般由起始位、数据位、奇偶校验位和停止位等部分组成。
图5.1 异步通信的字符帧格式
起始位:位于字符帧开头,只占一位,为逻辑0低电平,用于向接收设备表示发送端开始发送一帧信息。
数据位:紧跟起始位之后,用户根据情况可取5位、6位、7位或8位,低位在前高位在后。
奇偶校验位:位于数据位之后,仅占一位,用来表征串行通信中采用奇校验还是偶校验,由用户决定。
停止位:位于字符帧最后,为逻辑1高电平。通常可取1位、1.5位或2位,用于向接收端表示一帧字符信息已经发送完,也为发送下一帧做准备。
空闲位:在两个相邻帧之间可以有若干个空闲位,以保证如果接收端在数据处理能力不足的情况下仍能可靠传输。也可以没有空闲位直接发送数据。
5.2.2 单片机串口使用
51系列单片机的串行口由串行口控制寄存器SCON、发送电路、接收电路等组成。对程序编制来说,需要了解的有串口收发缓冲、串口控制寄存器、串口工作模式及速率的选定几个方面。
1.缓冲SBUF
在数据收发过程中,串口收发的数据都存放在一个称为SBUF的8位寄存器中。如果要发送数据,则将数据先移到累加器ACC中,然后再从ACC中移到SBUF。如果是接收数据,则一般在接收中断程序中把SBUF中的数据取出,即为串口上实际传送的数据。不过在这里要注意,在单片机的硬件上,收发虽然共用一个选口SBUF(99H),但实际上对SBUF的读和写时并不是访问的一个寄存器。这样才有可能使单片机能够同时进行收发的工作。
2.串口控制寄存器
单片机对串口的工作控制还通过串口控制寄存器SCON和电源控制寄存器PCON来实现。SCON和PCON都是特殊功能寄存器,选口地址分别为98H和87H。SCON的各个比特的定义如表4.1所示,PCON的各个比特定义如表5.2所示。
表5.2 SCON中各位定义
位地址 9F 9E 9D 9C 9B 9A 99 98
SCON SM0 SM1 SM2 REN TB8 RB8 TI RI
● SCON各位定义:
SM0和SM1:串行口工作模式设置位。如果设置为模式0,表示为同步移位寄存器工作方式,所用的数据传输速率为晶振频率的1/12;模式1表示为10位异步收发模式,数据传输率由定时器来控制;模式2表示为11位异步收发模式,数据传输速率由定时器来控制。
SM2:多机通信控制。主要在模式2和模式3下使用。在模式0时,SM2不用,应设置为0状态。在模式1下,SM2也应设置为0,此时RI只有在接收电路接收到停止位时才被激活,并自动发出串口中断请求。在模式2和模式3下,如果该比特为0,串口以单机发送或者接收方式工作,TI和RI以正常方式被激活,但不引起中断请求;若该比特为1并且SCON中的RB8也被置位时,RI不仅被激活而且可以向CPU请求中断。
REN:允许接收控制位。为0时禁止串口接收,为1时允许串口接收。
TB8:为数据发送第9位,用于模式2和模式3。由软件更改。
RB8:为数据接收第9位。用于模式2和模式3。在模式1中,如果SM2为0,则RB8用于存放接收到的停止位。在模式0下不使用该比特。
TI:发送中断标志位。用于指示一帧数据是否发送完毕。在模式0下,当发送电路发送完第8位数据时,TI由硬件置位;在其他模式下,TI在发送电路开始发送停止位时置位,也就是说,TI必须由软件复位,硬件置位。故CPU查询该比特可知道一帧信息是否已发送完毕。
RI:接收中断标志位,用于指示一帧数据是否接收完毕。在模式1下,RI在接收电路接收到第8位数据时由硬件置位;在其他模式下,RI在发送电路开始发送停止位的中间位置时置位。RI也由软件复位,可供CPU查询,以决定CPU是否需要从SBUF中提取接收到的数据。
● PCON中各位定义:
表5.3 PCON中各位定义
位地址 8E 8D 8C 8B 8A 89 88 87
PCON SMOD — — — GF1 GF0 PD IDL
SMOD:数据传输率选择位。在模式1、模式2、模式3中,串行通信数据传输率在SMOD为1时通信数据传输率提高1倍。
PCON的其他位与串口通信无关。
3.串口的工作模式
单片机有4种工作模式:模式0为同步移位寄存器工作方式;模式1为10位异步收发模式;模式2为波特率不变的11位异步收发模式;模式3为波特率可变的11位异步收发模式。
模式0:
在模式0下,串口的SBUF是作为同步的移位寄存器使用的。在串口发送时,SBUF相当于一个并行进入、串行输出的移位寄存器,由单片机的内部总线并行接收8位数据,并从TxD信号线串行输出。在接收操作时,它又相当于一个串行输入、并行输出的移位寄存器。该模式下,SM2、RB8、TB8不起作用。
发送操作在TI=0时进行,CPU将数据移入SBUF之后,RxD线上即可发出8位数据,TxD上发送同步脉冲。8位数据发送完后,TI由硬件置位,并在中断允许的情况下会向CPU请求中断。CPU响应中断后先用软件使TI清零,然后再给SBUF送下一个需要发送的字符,以重复上面的过程。
接收过程是在RI=0和REN=1的条件下启动的。此时,串行数据由RxD线输入,TXD线输出同步脉冲。接收电路接收到8位数据后,RI自动置位并发出串行口中断请求。CPU查询到RI为1或者响应中断以后便将SBUF中的数据送到累加器。RI也需要由软件复位。
模式1:
在模式1下,串行口设定为10位异步通信方式,字符帧中除了8位数据位外,还有一位起始位和一位停止位。发送位和停止位是硬件自动产生的。
发送操作过程如下:在TI=0时,发送电路自动将SBUF的数据加上起始位和停止位后依次发出。发送结束后将TI置位,并同时自动让TxD保持为逻辑高电平。TI最终由软件复位。
接收操作在RI=0和REN=1条件下运行,这一点与模式0下的工作情况相同。平常接收电路对高电平的RxD采样,采样脉冲频率是接收始终的16倍。当接收电路连续8次采样到RxD为低电平时,相应的检测器便可以确认RxD线上有了起始位。此后,接收电路就改为对第7、8、9三个脉冲采样到的值进行位检测,并以三中取二的原则来确定所采样的数据的值。
在接收到停止位时,接收电路必须同时满足下面两个条件:RI=0和SM2=0或者接收到的停止位为1,才能把接收到的8位字符存放到SBUF中;把停止位送入RB8中,并使RI=1和发出串口中断请求。若不满足上述条件,则此次接收到的数据将被舍弃,也就是丢失了1组接收数据。
在本模式下,发送时钟、接收时钟和通信数据传输率都是由定时器溢出率脉冲经过32分频得到的,并且由SMOD控制是否倍频。因此,模式1的数据传输率是可变的。
模式2:
模式2是11位异步收发模式,它的数据传输率由单片机的主频32或64分频提供,具体是多少由SMOD设置。
模式2的发送过程与模式1类似,唯一不同的就是它的数据有9位,包括SBUF中的8位和TB8中的一位,可以是奇偶校验或者其它内容。
模式2的接收过程也与模式1类似,但是模式1中RB8存放的是停止位,模式2中存放的是第9位数据。所以本模式下必须满足接收有效字符的条件是:RI=0和SM2=0或者接收到的第9个数据位为1。
模式3:
模式3与模式2基本相同,唯一的区别就是通信的数据传输速率不同。模式2的数据传输速率由单片机的主频经过32或64分频以后提供,模式3的数据传输速率则由定时器的溢出率经过32分频以后提供,故数据传输速率是可变的。
4.串口通信的数据传输速率的计算
在模式0下,串口的数据传输速率是固定的,它的值为单片机的晶振频率的1/12。
在模式2下,SMOD=0时,通信的数据传输率为主机频率的1/64;SMOD=1时,数据传输率为主机频率的1/32。
在模式1和模式3下,通信的数据传输率是由定时器的溢出频率决定的,所以数据传输率可以变化的范围较大。相应的公式为:
公式(4.1)
定时器T1的溢出率的计算公式为:
公式(4.2)
由上面两个式子就可以得到模式1或者模式3的数据传输率计算公式:
公式(4.3)
一般情况下,定时器T1通常采用工作模式2,因为定时器T1在模式2工作,即自动载入模式工作时,不但使操作简单,也可以避免因为重装初值而带来的定时误差。
表5.4列出了常用的一些数据传输率和晶振频率下的定时器T1的初装值。
表5.4 常用的一些数据传输率和晶振频率下对应的定时器T1的初装值
数据传输率 fosc SMOD 定时器T1
C/~T 所选方式 相应初值
0.5Mb/s(串行口方式0) 6MHz × × × ×
187.5kb/s(串行口方式2) 6MHz 1 × × ×
19.2kb/s(方式1或3) 6MHz 1 0 2 FEH
9.6kb/s(方式1或3) 6MHz 1 0 2 FDH
4.8kb/s(方式1或3) 6MHz 0 0 2 FDH
2.4kb/s(方式1或3) 6MHz 0 0 2 FAH
1.2kb/s(方式1或3) 6MHz 0 0 2 F4H
0.6kb/s(方式1或3) 6MHz 0 0 2 E8H
110bit/s(方式1或3) 6MHz 0 0 2 72H
55bit/s(方式1或3) 6MHz 0 0 1 FEEBH

5.3 主机通信程序设计
主机通信程序大体上可分为3个部分,分别为预定义及全局变量部分、程序初始化部分、发送数据部分。
5.3.1 预定义及全局变量部分[13]
这一部分中,主要对电机的地址信号以及转动方向控制信号进行了规定和定义。其定义和内容如表5.5所示。

表5.5 电机地址及转动方向控制信号
信号 宏定义 说明
73H addr1 一号电机地址
89H addr2 二号电机地址
5DH addr3 三号电机地址
CBH addr4 四号电机地址
97H Right 电机正转控制信号
D1H Left 电机反转控制信号
5.3.2 程序初始化部分
程序初始化主要是对串口部分、P1口和TX100的初始化。定义串口为工作方式1,单机通信,禁止接收;波特率设为1200波特,单片机晶振为11.0592MHz;定时器T1使用工作方式2[12];P1口初始化为低电平;TX100初始化待机模式[7]。初始化流程图如图5.2所示。

图5.2 初始化流程图

5.3.3 发送数据部分
发送数据部分的数据通信的基本流程如下:
上电后主机部分对单片机P1口引脚电平进行查询,当查到有某引脚电平变高时,就通过单片机串口循环发出该引脚对应电机的地址信号和电机转动方向的控制信号,直到该引脚电平变低。如图5.2所示,开关S1闭合后,P1.0电平变高,主机串口循环发出地址信号73H和电机正转信号97H[14],直到开关S1断开;开关S2闭合后,P1.1电平变高,主机串口循环发出地址信号73H和电机反转信号D1H,直到开关S2断开。其他情况同理可推出。该部分对应的流程图如图5.3所示。

图5.3 发送数据部分数据通信流程图
5.4 从机通信程序设计
与主机通信程序相似,从机通信程序也可以分为预定义及全局变量部分、程序初始化部分、接收数据部分3个部分。
5.4.1 预定义及全局变量部分
预定义部分的宏定义与主机部分是相同的。
5.4.2 程序初始化部分
该部分主要是对串口部分、P1口的初始化。定义串口为工作方式1,单机通信,允许接收;波特率设为1200波特,单片机晶振为11.0592MHz;定时器T1使用工作方式2,允许中断[12];P1口初始化为低电平。初始化流程图如图5.4所示。

图5.4 初始化流程图
5.4.3 接收数据部分
接收数据部分的数据通信基本流程如下:
初始化完成后,从机开始接收主机发送的地址信号。如果从机接收到本机地址信号,它将接收主机发送的电机转动方向控制信号并且向电机发出转动命令,否则继续接收地址信号。如图4.5所示,当一号电机接收到73H信号时,说明主机要求一号电机转动,则一号电机将继续接收主机发送的转动方向控制信号,如果接收到97H信号,则令P1.7为高电平,使三极管Q1导通Q2截止,继电器K1接通[10]电源从而对电机正向供电,一号电机正转;如果接收到D1H信号,则令P1.6为高电平,使三极管Q2导通Q1截止,继电器K2接通电源[10]从而对电机反向供电,一号电机反转。如果一号电机接收到的是其他地址信号,则该从机不接收接下来的电机转动控制信号,而是继续接收地址信号。其它电机同理。
该部分对应的流程图如图5.5所示:

图5.5 接收数据部分数据通信流程图
5.5 程序开发环境[12]
本系统在软件上采用单片机C语言作为程序开发语言,而使用Windows集成开发环境Keil μVision2作为程序开发环境。
Keil μVision2是Keil Software 公司用于8051系列及其衍生的单片机的软件开发工具,支持汇编和C语言。μVision2集成开发环境集成了项目管理器、功能完善的编辑器、仿真器、各种选项设置工具以及在线帮助等。Keil μVision2是51系列单芯片最佳的软件开发工具,Keil μVision2试用版可以编译2K以内的代码。
Keil μVision2安装后自带了一些帮助文档,位于安装目录的\Keil\C51\HLP文件夹,包括A51.pdf、C51.pdf、C51lib.chm、DBG51.CHM、errors.chm、GS51.pdf等,用户可以通过μVision2开发环境Project Window的Books标签页中的连接来打开这些文档。这些资料详细介绍了集成开发环境使用、侦错、汇编语言编程(A51)、C语言编程(C51)等。

图5.6 Keil μVision2启动界面
下面简单介绍一下程序开发流程。
打开μVision2,从“项目”下拉菜单选择“新项目”,在弹出的对话框中选择合适的路径、输入项目名称,然后保存。接着出现一个新对话框,假设是针对AT89C2051芯片编程,在左边的树形目录中选择Atmel-〉AT89C2051,然后确定(图5.5所示)。这时集成开发环境左边的“项目工作区”就出现了一个“目标一”的目标项目。左键点击目标一左边的+号,可以看到展开的目录有个“源代码组1”。
从“文件”下拉菜单选择“新建”或者左键点击工具栏上的新建文件按钮,可以打开一个文本编辑区,假如使用A51汇编语言就输入汇编程序代码,输入结束后,从“文件”下拉菜单选择“保存”或者左键点击工具栏上的保存按钮,在弹出的对话框里输入文件名,比如Text1.a或者Text1.asm,保存。然后从项目工作区里选择源代码组1,点右键,在菜单中选择“添加文件到组‘源代码组1’”,在弹出的对话框里把文件类型设成Asm 源文件,浏览到刚才建立的源码文件,双击或者单击后点添加按钮,即可把文件加入工程。
这时候从“项目”下拉菜单选择“重建所有目标文件”,就可编译项目,但是在项目目录里没有*.hex文件产生,因为没有进行设置。选中“项目工作区”的目标1,点右键从菜单中选择“为‘目标1’设置选项”,在弹出的标签页对话框中选择“输出”标签,然后选上“产生HEX文件”选项,重新编译项目,就会产生hex文件。

图5.7 为目标选择设备对话框

图5.8 新建文件与添加文件

第六章 结论
单片机是微型计算机的一个重要的分支。随着计算机的发展,单片机的应用领域也越来越广泛,它在工业控制、数据采集以及仪器仪表自动化等许多领域都起着十分重要的作用。单片机自从产生到现在经历了4位机阶段、8位机阶段、16位机阶段以及现在出现的32位机,其发展可谓日新月异。
从一百多年前德国物理学家海利希.赫兹证明了电磁波的理论到今天,无线电控制技术得到了长足的发展。无线电工业遥控技术是一门年轻的学科,要求按照操作员的手动触觉对多种机器设备和仪器通过无线信号对其进行精确的遥距控制。遥控设备的广泛应用,促进了无线电遥控技术的快速发展。今天,几乎所有的建筑工程机械设备通过遥控改造都能实现遥控[15]。
本毕业设计课题为基于无线数传模块的电机遥控系统,将单片机和无线遥控这两大技术有效的结合在了一起。通过设计该系统,既了解和掌握了单片机的相关知识及其应用,又对无线模块及无线遥控技术的相关知识和应用得到了理解,将本专业知识和实际应用结合在了一起,对提高学生将理论应用于实践的能力有很大的帮助。
在完成毕业设计的过程中,由于以前对课题中涉及到的相关元件和模块了解不足,又缺少实际应用,所以在设计初期遇到了一定的困难,必须从头开始学习相关知识,查阅相关元件的资料以及了解这些元件和模块的应用。
对于单片机串口通信,以前虽有了解,但是并不明白其工作过程,尤其是串口编程部分,不知道该如何下手。经过对串口知识的多次阅读与理解以及对相关书籍关于串口编程的示例程序的理解,最后终于明白了其中的原理,写出了程序。
对于无线数传模块RX100和TX100,到设计结束也只是了解了这两个模块的应用方法,而对其具体原理,比如信号是如何发射出去和如何接收进来都没能了解,不能不说是这次设计的一个缺憾。
以前虽然使用过prote99se,但只是用其画过硬件电路图。用完之后就没有继续学习该软件,所以对以前掌握的一些该软件的功能都有所遗忘,尤其是在PCB电路板设计这一块留有较大的空白。这一次设计使用prote99se设计硬件电路图并且要设计出线路板图,对我来说,难免是一次挑战。在硬件图设计过程中,遇到的困难相对较小,而且在查阅资料后都解决掉了。但是在线路板设计过程中遇到了很大的困难,首先在元件封装过程中就有很多不明白的地方,虽然查阅了很多的相关资料,也在网上搜集了大量的资料,但最终仍未能完全明白,所以这一点也是这次毕业设计中一个较大的遗憾。希望在以后的工作学习中能够予以弥补。

结束语

参考文献
[1] 杨文龙.单片机原理及应用[M].西安:西安电子科技大学出版社,2000.1~18
[2] 单片机概论[EB/OL].http://www.tup.tsinghua.edu.cn/Resource/tsyz/0095
49-01.doc.
[3] 万福君,潘松峰.单片微机原理系统设计与应用(第二版)[M].合肥:中国科学技术大学出版社,2003.1~27.
[4] AT89C2051.PDF .http://www.ourmpu.com/webdown/AT89C2051cn.rar.2007.
[5] 孙涵芳. MCS-51系列单片机原理及设计[M].北京:北京航空航天大学出版社,1996.25~89.
[6] RX100产品手册. http://www.smartrf.com.cn/cn/txt/rx100.pdf,2004.
[7] TX100产品手册. http://www.smartrf.com.cn/cn/txt/Tx100.pdf,2004.
[8] 胡烨, 姚鹏翼, 陈明等.Protel 99 SE原理图与PCB设计教程[M]. 北京:机械工业出版社,2005.28~356.
[9] 谢瑞和.串行技术大全[M].北京:清华大学出版社,2003.198~302.
[10] 电磁继电器原理[EB/OL].http://www.hy3w.com/bbs/ShowPost.asp?menu=Nex
t&ForumID=31&ThreadID=2.
[11] 罗桂娥.模拟电子技术基础[M].长沙:中南大学出版社,2005.20~37.
[12] 求是科技.8051系列单片机C程序设计完全手册[M].北京:人民邮电出版社,2006.209~390.
[13] 杨路明.C语言程序设计教程[M].北京:北京邮电大学出版社,2003.64~92.
[14] 周炯磐,续大我等.通信原理(合订本)[M].北京:北京邮电大学出版社,2005.381~447.
[15] 赵丽.工业遥控系统在工程机械领域的发展和应用[EB/OL]. http://blog.china.alibaba.com/blog/indcom/article/b98-i45127.html.2004-09-29.
[16] Han,Jianguo,Liao,Junbi.Foundation and application of microcontroller[M].北京:Higher Education Press,2004.

附录一
TX100 无线发送模块
RX100 无线接收模块
3G 3rd Generation,第三代移动通信
ROM Read Only Memory,只读存储器
RAM Random-Access Memory,随机存取存储器
CPU Central Processing Unit,中央处理单元
RTOS Real Time Operation System,实时操作系统
DDB Direct Data Bus,直接数据总线
USB Universal Serial Bus,通用串行总线
DMA Direct Menmory Access,直接存储器存取控制器
I/O Input/Output,输入/输出
CMOS Comple-mentary Metal-Oxicle-Semiconductor,互补金属氧化物半导体
DC Direct Current,直流
IC Integrated Circuit,集成电路
LED Light Emitting Diode,发光二极管
TTL Transistor-Transistor Logic,逻辑门电路

附录二
1.系统发送数据程序清单:
#include
#include
#define addr1 0×73
#define addr2 0×89
#define addr3 0×5D
#define addr4 0xCB
#define Right 0×97
#define Left 0xD1

2.系统接收数据程序清单:
#include
#include
#define addr1 0×73
#define addr2 0×89
#define addr3 0×8D
#define addr4 0xCB
#define Right 0×97
#define Left 0xD1

基于单片机无线电子点菜系统硬件设计及实现

Posted by 天际的荒草 | Posted in Docs | 文档 | Posted on 18-09-2009

标签:, , ,

0

目 录
摘 要 IV
ABSTRACT V
第一章 绪论 1
1.1 研究背景和意义 1
1.3 论文的研究内容 4
1.4 内容安排 4
第二章 ZIGBEE协议分析 6
2.1 ZIGBEE协议框架 6
2.2 ZIGBEE协议优缺点和应用前景 8
2.2.1 ZigBee协议的优点 9
2.2.2 ZigBee协议存在的问题及解决方案 9
2.2.3 ZigBee协议应用前景 10
2.3基于ZIGBEE协议的芯片 10
第三章 基于ZIGBEE协议的硬件系统的设计及实现 14
3.1 STC89C58RD+单片机概述 14
3.2 开发板的各个组成部分原理图以及功能 15
3.2.1 单片机最小系统组成电路 15
3.2.2 串行口电平转换部分 16
3.2.3 LED部分 17
3.2.4 开发板和无线数据传输模块接口部分 17
3.2.5 键盘部分 18
3.3 无线数据传输模块 19
3.4 无线数据传输模块和开发板的PCB图设计 20
3.4.1 开发板的PCB图 20
3.4.2 无线数据传输模块的PCB图 22
第四章 硬件驱动程序和串行口调试工具 24
4.1 硬件驱动程序 24
4.1.1 主机端硬件驱动程序 24
4.1.2 移动端驱动程序 28
4.2 串行口调试工具 28
4.2.1串行通信的基本原理 28
4.2.2程序设计原理 30
第五章 总结与展望 37
5.1 全文总结 37
5.2 研究展望 38
致 谢 39
参考文献 40
附录 41

摘 要

随着人民生活水平的提高和生活方式的转变,餐饮业具有巨大的投资市场,被称为中国的黄金产业。无线电子点菜系统是无线通信技术的典型应用,把无线技术用于餐饮业将会极大提高餐馆的工作效率和服务质量。
论文给出了无线电子点菜系统的完整的硬件平台的设计和实现方案。整个系统有主机端和移动端两部分组成,无线通信的双方依托一定的硬件平台,按照约定好的协议来实现数据交换。设计的硬件平台时,首先详细介绍了平台将要用到的一些芯片,然后使用Protel 99 SE设计出了系统的原理图和PCB(Print Circuit Broad,印刷电路板)图;在设计的硬件平台的基础上,依据所用芯片的编程原则,在Windows环境下,以C51语言为编程语言,开发出了无线通信系统的驱动程序来实现双方约定的通信协议。文中还附带简要介绍了用到的软件开发工具,以及系统的局限性,并提出了进一步改进的方案。
为了使整个系统更加完善,用Visual C++ 6.0开发了串口调试工具,实现了将远端数据发送到计算机并以窗口形式显示和通过窗口形式将计算机上的数据发送到远端,基本达到了论文的设计目的。

关键词 无线通信,ZigBee,单片机,nRF2401

Abstract
Along with the enhancement of the level of the people’s lives and the transformation of the lifestyle, the dining industry which is called gold industry in China has the huge investment market. The wireless electronic ordering food system is the typical use of the technology of wireless communication. Using the technology of wireless communication in the dining industry will largely improve the working efficiency and the grade of service.
The present paper brings up the plan of the hardware design of the the wireless electronic ordering food system and how to realize. The overall system is made up of two parts, one is the main end and the other is the mobile end. Both sides of wireless correspondence depend on certain hardware platforms. They exchange data according to the protocol which both sides have agreed on before, and the data is transformed in specific frame form. When designing the hardware platform, first analyzes the CMOS chips that will be used in the system. Then, the paper uses Protel 99 SE to design the principle picture and the PCB picture of the system. In this foundation, according to the programming rules of the CMOS chips used in the system, the paper exploits the driving program of the system using C51 programming language in the Windows operating system. By the way, this paper also briefly introduces the software development kits which will be used next, analyzes the limitations of system, and also proposes how to improve it.
In order to make the entire system more comprehensive,the paper also exploits the serial debugging tool in Visual C++ 6.0 to display the data from remote end in the window on computer and send data to remote end in the window form. This basically achieves the goal.

KEY WORLD wireless communication, ZigBee,Single-Chip Microcomputer, nRF2401

第一章 绪论

1.1 研究背景和意义

人类利用无线通信技术的历史已经有几千年了,古时候用的烽火台就是最原始的无线通信。但这时候的无线通信技术还只是处于萌芽阶段,只有到19世纪末意大利人马可尼发明无线电报开始,人类才真正开始大规模地利用无线通信技术[1]。近数十年来随着计算机技术和电子技术的发展,无线通信技术更是以日新月异的速度向前发展,它也成为了通信领域的一个重点研究方向。
现代的无线通信技术是建立在硬件电路的基础上的,因此微电子技术[2]的发展直接制约着无线通信技术的发展。回顾集成电路的发展历程,我们可以看到,自发明集成电路至今40多年以来,”从电路集成到系统集成”这句话是对IC产品从SSI(Small Scale Integrated,小规模集成电路)到VLSI(Very Large Scale Integrated超大规模集成电路)今天特大规模集成电路发展过程的最好总结,即整个集成电路产品的发展经历了从传统的板上系统(System-on-board)到片上系统(System-on-a-chip)的过程。随着集程度的提高,芯片的体积能耗和成本在逐步降低。这也使电子产品向便携式和低端市场发展。
虽然微电子的发展历史已经有半个多世纪,但是射频芯片[1][2]的发展却是近几年的事。从分类上来看,射频芯片属于专用集成电路。目前国际上有很多专门生产射频芯片的公司,例如Nordic公司和Chipcon公司。这些芯片一般工作在免费频段,采用专门的调制解调技术,内部集成了很多电路。像Nordic公司的NRF2401芯片,它是单片射频收发芯片,工作于2.4~2.5GHz ISM(Industry Science medicine,工业、科学、医学)频段,芯片内置频率合成器、功率放大器、晶体振荡器和调制器等功能模块,输出功率和通信频道可通过程序进行配置。芯片能耗非常低,以-5dBm的功率发射时,工作电流只有10.5mA,接收时工作电流只有18mA,多种低功率工作模式,节能设计更方便。其DuoCeiverTM技术使nRF2401可以使用同一天线,同时接收两个不同频道的数据。
无线电子点菜系统是无线通信技术的一个典型应用。近些年来,随着人民生活水平的提高和生活方式的转变,餐饮业具有巨大的投资市场,被称为中国的黄金产业。人们在消费过程中对服务质量也有了更高的要求,同时餐馆之间的激烈竞争也促进了无线通信技术在餐饮业中的应用。无线电子点菜系统的目的就是利用最先进的2.4GRF无线通信技术、嵌入式移动数据库技术[3][4]、以及触摸屏的掌上电脑技术, 为餐饮业走向全面数字化提供了完整的解决方案。该系统能够提高餐馆档次、提高效率、自动结账、避免人为错误、避免跑单、实时监控餐馆状况、提供各种各样统计信息、精简人手、管理库存、提高服务品质等,为餐饮行业带来崭新的管理理念与服务手段,优化业务流程,为客户提供更好的服务,实现企业价值最大化同时又使成本最低化,是餐饮行业向信息化发展的一个重要标志。由于使用无线技术通信,可以不用进行复杂的布线,这也大大降低了餐馆的建设成本,减少了对线路维护的开支。同时,无线通信的可以移动性也使服务员随时可以和吧台联系。
无线电子点菜系统基于目前很热门的技术——嵌入式技术[3],依托一定的硬件平台。因此微电子技术的发展对系统的性能有很大的限制,目前微电子技术已经发展到了SOC(System On Chip,片上系统),集成度获得了极大的提高。同时,芯片的价格,体积和能耗进一步降低,这些都使无线电子点菜系统向移动化和大众化方向发展。可以说,随着微电子技术的进一步发展,无线电子点菜系统仍然有很大的发展空间。

1.2 无线通信技术的发展现状

按照发射功率的不同,无线通信技术可分为短距离无线通信技术和长距离无线通信技术,它们各自依托的硬件平台和通信协议也有很大不同。几种常见的长距离无线通信系统如GPRS系统和我国即将投入使用的3G系统,它们都有一些共同的特点:使用专门的频段,需要专门的公司进行运营。由于本系统要求传输距离有限,而且对成本有限制,因此长距离无线通信协议不在考虑的范围之内,下面就重点阐述几种常见的短距离无线通信协议:
1 蓝牙[5]
爱立信在1994年开始研究一种能使手机与其附件(如耳机)之间互相通信的无线模块,4年后,爱立信、诺基亚、IBM等公司共同推出了蓝牙技术,主要用于通信和信息设备的无线连接。蓝牙工作频率为2.4GHz,有效范围大约在10m半径内。在此范围内,采用蓝牙技术的多台设备,如手机、微机、激光打印机等能够无线互联,以约1Mb/s的速率相互传递数据,并能方便地接入互联网。目前蓝牙技术开发重点是多点连接,即一台设备同时与多台(最多7台)其他设备互联。今后,市场上不同厂商的蓝牙产品将能够相互联通。
蓝牙技术的应用主要有以下3类:
1 语音/数据接入 是指将一台计算机通过安全的无线链路连接到通信设备上,完成与广域网的连接。
2外围设备互连 是指将各种设备通过蓝牙链路连接到主机上。
3 PAN(Personal Area Net,个人局域网)如图1所示,主要用于个人网络与信息的共享与交换。
蓝牙协议有以下技术特点:
(1)蓝牙工作在全球开放的2.4GHz ISM频段;
(2)使用跳频频谱扩展技术,把频带分成若干个跳频信道(hop channel),在一次连接中,无线电收发器按一定的码序列不断地从一个信道跳到另一个信道;
(3)一台蓝牙设备可同时与其它七台蓝牙设备建立连接;
(4)数据传输速率可达1Mbit/s;
(5)低功耗、通讯安全性好;
(6)在有效范围内可越过障碍物进行连接,没有特别的通讯视角和方向要求;
(7)支持语音传输;
(8)组网简单方便
正是由于蓝牙协议有以上特点,蓝牙产品涉及PC、笔记本电脑、移动电话等信息设备和A/V设备、汽车电子、家用电器和工业设备领域。蓝牙的支持者们预言说,一旦支持蓝牙的芯片变得非常便宜,蓝牙将置身于几乎所有产品之中,从微波炉一直到衣服上的纽扣。
但是蓝牙的传输距离比较短,而且蓝牙是一种还没有完全成熟的技术,尽管被描述得前景诱人,但还有待于实际使用的严格检验。蓝牙的数据传输速率也不是很高,在当今这个数据爆炸的时代,可能也会对它的发展有所影响。目前主流的软件和硬件平台均不提供对蓝牙的支持,这使得蓝牙的应用成本升高,普及难度增大。从以上各点综合考虑,蓝牙协议不适合本系统。
2 超宽带技术UWB(Ultra Wide band)[6]
超宽带技术UWB(Ultra Wide band)是另一个新发展起来的无线通信技术。UWB通过基带脉冲作用于天线的方式发送数据。窄脉冲(小于1ns)产生极大带宽的信号。脉冲采用脉位调制(Pulse Position Modulation,PPM)或二进制移相键控(BPSK)调制。UWB被允许在3.1~10.6GHz的波段内工作。它主要应用在小范围、高分辨率、能够穿透墙壁、地面和身体的雷达和图像系统中。除此之外,这种新技术适用于对速率要求非常高(大于100Mb/s)的LAN(Local Area Net,本地局域网)s或PANs。
军事部门已对UWB进行了多年研究,开发出了分辨率极高的雷达。直到2002年2月14日,美国联邦通信委员会才准许该技术进入民用领域。所以对于商业和消费领域,UWB还是新鲜事物。UWB有可能在10m范围内,支持高达110Mb/s的数据传输率,不需要压缩数据,可以快速、简单、经济地完成视频数据处理。虽然说UWB技术的数据传输距离相比蓝牙技术已经获得很大提高,但是仍然不能满足本系统的技术要求。
3 ZigBee [1][7]
Zigbee是一种短距离、低功耗的无线通信技术名称。这一名称来源与蜜蜂的八字舞。其特点是近距离、低复杂度、低功耗、低数据速率、低成本。主要适合用于自动控制和远程控制领域,可以嵌入各种设备。
ZigBee协议的技术特点和应用前景将在下一章详细叙述。
4 IrDA (infrared data association,红外数据标准协会)技术[5][6]
红外线是波长在750nm至1mm之间的电磁波,它的频率高于微波而低于可见光,是一种人的眼睛看不到的光线。由于红外线的波长较短,对障碍物的衍射能力差,所以更适合应用在需要短距离无线通讯的场合,进行点对点的直线数据传输,传输速率最快可达16Mbps。IRDA将红外数据通讯所采用的光波波长的范围限定在850nm至900nm之内。IRDA技术有以下特点:
(1)它是目前在世界范围内被广泛使用的一种无线连接技术,被众多的硬件和软件平台所支持;
(2)通过数据电脉冲和红外光脉冲之间的相互转换实现无线的数据收发。
(3)主要是用来取代点对点的线缆连接;
(4)新的通讯标准兼容早期的通讯标准;
(5)小角度(30度锥角以内),短距离,点对点直线数据传输,保密性强
(6) 传输速率较高,目前4M速率的FIR技术已被广泛使用,16M速率的VFIR技术已经发布。
虽然目前IRDA技术发展已经很成熟,而且有很多公司的产品都支持这种协议。但是由于红外线的波长较短,对障碍物的衍射能力差,所以它只能用于视距传输,传输距离比较短,因此也不适合本系统的技术要求。
综合比较以上各个短距离无线通信协议的技术特点和本系统的要求,只有ZigBee协议能基本满足要求。而且目前支持ZigBee协议的厂商比较多,技术发展也很成熟,可以作成低成本的嵌入式产品。

1.3 论文的研究内容

无线电子点菜系统的实现是建立在硬件电路的基础上的,为了降低误码率,提高频率资源的利用律,数据必须按照一定协议传输。在发送端,数据按照一定的格式编码,然后调制到一约定的频率后发送;接受端将接收到的信号经过解调和解码后,将数据还原。
本论文的研究内容主要有两部分组成:
1.经过讨论各种无线通信协议的特点和电子技术的发展现状,在此基础上,提出了基于ZigBee协议的硬件平台。并详细分析了平台组成部分各自的原理以及功能。
2.分析了平台的编程规则,开发出了相应的驱动程序。

1.4内容安排

本文对无线电子电菜系统的硬件设计进行了深入的研究,全文共分为五章,各章节的内容安排如下:
第一章介绍了本文的研究背景和各章节的内容安排情况。
第二章介绍ZigBee协议的详细内容和一种基于ZigBee协议的芯片。
第三章在上一章的基础上提出了自己的硬件平台,详细介绍了平台的组成部分和各自的功能。
第四章和第三章相对应的,主要讲了硬件平台的驱动程序以及PC机端串行口调试工具的开发,并简单介绍了相应的软件开发工具。
第五章是总结与展望。对本文工作进行了总结,并探讨可以进一步深入研
究的方向。

第二章 ZigBee[7]协议分析

ZigBee协议是一种近距离、低复杂度、低功耗、低数据速率、低成本的无线网络技术。
在标准规范制订方面,主要是IEEE 802.15.4小组与ZigBee Alliance两个组织,两者分别制订硬体与软体标准。在IEEE 802.15.4方面,2000年12月IEEE成立了802.15.4小组,负责制订MAC(Media Access Control,媒体存取控制层)与物理层规范, 2003年5月通过802.15.4标准;在ZigBee 联盟方面,ZigBee[7]联盟是在2002年10月由Honeywell、Mitsubishi、Motorola、Philips与Invensys共同成立,ZigBee联盟负责制订网路层、安全管理、应用界面规范,其次也肩负互通测试,目前ZigBee联盟已推出第1.0版规范(Version 1.0),成员已达150多个。
ZigBee协议依据802.15.4标准[8][9],在数千个微小的传感器之间相互协调实现通信。这些传感器只需要很少的能量,以接力的方式通过无线电波将数据从一个传感器传到另一个传感器,所以它们的通信效率非常高。IEEE802.15.4规范是一种经济、高效、低数据速率(<250 kbps)、工作在2.4 GHz和868/915 MHz的无线技术,它是ZigBee应用层和网络层协议的基础。
相对于现有的各种无线通信技术,ZigBee技术将是最低功耗和成本的技术,同时由于ZigBee技术的低数据速率和通信范围较小的特点,也决定了ZigBee技术适合于承载数据流量较小的业务。所以ZigBee联盟预测的主要应用领域包括工业控制、消费性电子设备、汽车自动化、农业自动化和医用设备控制等。

2.1 ZigBee协议框架

ZigBee协议同其它网络通信协议一样采用分层模型,对各层所实现的功能和在整个协议中起的作用做了明确的划分,每层为其上层提供一组特定的服务。ZigBee的协议架构大致如表2.1所列。

表2.1 ZigBee的协议架构
第四层 应用层
第三层 网络层
第二层 媒体访问层(MAC)
第一层 物理层

ZigBee协议虽然是基于标准的七层OSI(Open System Interconnect,开放式系统互联)模型[10],但仅对那些涉及ZigBee的层予以定义。IEEE802.15.4-2003标准定义了最下面的两层:物理层和MAC。ZigBee联盟提供了网络层和应用层框架的协议。
相比于常见的无线通信标准,ZigBee协议套件紧凑而简单,具体实现的要求很低。以下是ZigBee协议套件的需求估计:硬件需要8位处理器,如广泛使用的80C51系列单片机[12];软件需要32KB的ROM(Read Only Memory,只读存储器),最小软件需要4KB的ROM;网络主节点需要更多的ROM以容纳网络内所有节点的设备信息,数据包转发表,设备关联表,与安全有关的密钥存储等。
1 物理层
IEEE802.15.4标准在物理层设计中面向低成本和更高层次的集成需求,才用的工作频段分别为2.4 GHz和868/915 MHz。各个频段可以使用的信道数目分别为16、10、1,各自提供250kbps,40kbps和20kbps的传输速率,其传输范围介于10-100米之间。
为了避免干扰,在各个频段均使用DSSS(Direct Sequence Spread Spectrum,直接序列扩频技术)[13],以化整为零方式将一个信号分为多个信号,再经由编码方式传送信号以避免干扰,这对大部分较低端的实现来说,直接序列的应用可以使模拟电路更加简单,具有更高的容错性能。
2 媒体访问层
IEEE802.15.4标准在媒体访问层(MAC)方面,主要沿用无线局域网WLAN中IEEE802.11系列标准的CSMA/CA(Carrier Sense Multiple Access/Collision Avoidance,载波监听多路访问与冲突避免)方式以提高系统的兼容性。这种MAC层的设计不但是多种拓扑结构网络的应用变得简单,还可以实现非常有效的功耗控制。
3 网络层
网络功能是ZigBee协议的重要特点,也是与其他无线局域网标准不同的地方。在网络层方面其主要工作在于负责网络机制的建立与管理,并且具有自我组态与自我修复功能。在网络层中ZigBee协议定义了三种角色:第一个是网络协调器,负责网络的建立以及网络位置的分配;第二个是路由器,主要负责找寻建立以及修复信息包的路由路径,并负责转发信息包;第三个是末端装置,只能选择加入他人已经形成的网络,可以收发信息包,但是不能转发,不具备路由的功能。通常,路由器和网络协调器由全功能装置(FFD)实现,而末端装置由简化功能装置(RFD)实现。在组网方式上,ZigBee主要采用图2.1所示三种方式:其一为主从方式的星形网,它需要一个能负责管理和维护网络的网络协调器和不超过65535个从属装置;其二为簇形网络,它可以是扩展的单个星形网或者互连多个星形网络;其三为网状网(Mesh),网络中的每个FFD可以做为路由器,根据AD hoc网络路由协议来优化最短和最可靠的路径。

图2.1 三种网络拓扑结构

4 应用层
对于应用层,主要有三个部分:与网络层相连的应用支持(APS),ZigBee设备对象(ZDO)以及装置应用行规。ZigBee的应用层架构最重要的是已经覆盖了服务的观念。
对于ZigBee装置而言,当加入到一个WPAN(Wireless Personal Area Net,个人无线局域网)后,应用层的ZMO会发起一系列的初始化动作,先通过APS进行装置收寻以及服务收寻后,然后根据事先定义好的描述信息,将与其相关的装置或是服务记录在APS里的绑定表中;之后所有服务的使用,都要通过这个绑定表来查询资料的服务或者行规。而装置应用行规则是根据不同的产品设计出的不同的描述信息,以及ZigBee各层协议的参数设定。
5 安全层
安全层并非单独独立的协议,ZigBee为其提供了一套基于128位AES算法的安全类和软件,并且集成了IEEE802.15.4标准的安全元素,用来保证MAC层祯的机密性,一致性和真实性。
另外ZigBee联盟也负责ZigBee产品互通性测试与认证规则的制定,让开发ZigBee产品的厂商有一个公开的场合,能够互相测试互通性。而在认证部分,ZigBee联盟一共定义了三种层次的认证,第一级认证物理层和MAC,与芯片厂有着最直接的关系;第二级认证ZigBee协议栈;第三级认证ZigBee产品。只有通过第三级认证的产品才能贴上ZigBee的标志,所以也称作ZigBee注册认证。

2.2 ZigBee协议优缺点和应用前景

ZigBee协议是从WLAN发展过来的,经过近几年来ZigBee联盟成员[7]对标准的不断修改和完善,已经显示出了强大的生命力,但是本身还有一些缺点,这也限制了ZigBee协议的使用范围。
2.2.1 ZigBee协议的优点
功耗低:由于ZigBee网络节点设备工作周期较短、收发信息功耗较低,并且采用了休眠模式(当不传送数据时处于休眠状态,当需要接收数据时由ZigBee网络中的协调器设备负责唤醒它们),可以确保两节五号电池支持长达六个月到两年左右的使用时间。避免了频繁更换电池或者充电,从而减轻了网络维护的负担 。
数据传输可靠性高:采用了碰撞避免机制,同时为需要固定带宽的通信业务预留了专用时隙,避免了发送数据时的竞争和冲突。而且MAC层采用了完全确认的数据传输机制,发送的每个数据包都必须等待接收方的确认信息,从而从根本上确保了数据传输的可靠性,最大限度地降低信息损失的概率。
网络容量大:一个Zigbee网络可以容纳最多65536个从设备和一个主设备[14],一个区域内可以同时存在最多100个Zigbee网络。
时延小:针对时延敏感的应用做了优化,通信时延和休眠状态激活的时延都非常短。设备搜索时延典型值为30ms,休眠激活时延典型值为15ms,活动设备信道接入时延为15ms。

表2.2 Zigbee与蓝牙协议时延比较
设备收索时延典型值(ms) 休眠激活时延典型值(ms) 活动设备信道接入时延(ms)
ZigBee技术 30 15 15
蓝牙技术 >=3000 3000 2

兼容性:与现有的控制网络标准无缝集成。通过网络协调器(Coordinator)自动建立网络,采用CSMA-CA方式进行信道存取。为了可靠传递,提供全握手协议。
安全性:Zigbee提供了数据完整性检查和鉴权功能,加密算法采用AES-128,同时各个应用可以灵活确定其安全属性,是网络安全得到有效的保障。
实现成本低:模块的初始成本估计在6美元左右,很快就能降到1.5~2.5美元,且Zigbee协议是免专利费的。
协议套件紧凑而简单:其具体实现的要求很低。Zigbee协议套件的需求估计:8位微处理器,如80C51[10];全协议套件软件需要32K字节的ROM;最小协议套件软件大约4K字节的ROM。
2.2.2 ZigBee协议存在的问题及解决方案
802.15.4标准是ZigBee协议的基础,用它实现无线数据采集,主要有以下两个问题:
1、网络内传感器节点时钟需要同步,监控系统的多传感器信息融合时,上位机需要知道每个原始数据是何时采集的,采样的触发要求每个节点有统一的时钟;
2、其通信速率较低,而且又受到接口通信速率的限制,加之受纠错码的编码效率影响,真正的数据发送量是很低的。
解决此问题可以通过如下的途径: 传感器节点采用DSP处理器,尽可能在传感器节点一级多做些数据处理工作,尽量减少原始数据的发送量,只发送有用信息。例如,对于平稳状态的原始数据可以不发送到上位机中,只发送可疑状态前后的原始数据,这样就大大减少了数据的通信量。
2.2.3 ZigBee协议应用前景
ZigBee协议特别适合数据吞吐量小,网络建设投资少,网络安全要求较高,不便频繁更换电池或者充电的场合,预计将在消费类电子设备,家庭智能化,工业控制,医疗设备控制,农业自动化和无线点菜系统等领域获得广泛的应用。
消费类电子产品和家庭智能化将是ZigBee技术最有潜力的市场,家庭可以联网的设备包括电视,录象机,PC外设,儿童玩具,游戏机,门禁系统,窗户和窗帘,照明设备,空调设备和其他家用电器等。家用设备引进ZigBee协议后将极大改善人们的居住环境和舒适度。
在工业控制领域,利用传感器和ZigBee网络,可是数据的自动采集,分析和处理变得更加容易;可以作为决策辅助系统的重要组成部分,例如危险化学成分的检测,火警的早期检测和预报,高速旋转机器的检测和维护。这些应用不需要很高的数据吞吐量和连续的状态更新,重点在于低功耗,可最大限度地延长电池的寿命,减少ZigBee网络的维护成本。
在医学领域,利用传感器和ZigBee网络可以准确,实时地监测每个病人的血压,心率等情况,有助于医生快速做出反应,减少医生查房的工作负担,特别适合对重,危病患者的监护和治疗。
在现代农业中,利用传感器可以将土壤温度,氮浓度,PH值,降水量,气温,气压和采集信息的地理位置经由ZigBee网络传送到中央的控制部分,使农民能及早而且准确地发现问题,从而有助于保持并提高农作物的产量,减少发生灾害的概率。
本系统是将ZigBee协议用于餐馆的无线点菜系统,这样能够提高餐馆档次、提高效率、自动结账、避免人为错误、避免跑单、实时监控餐馆状况、提供各种各样统计信息、精简人手、管理库存、提高服务品质等,为餐饮行业带来崭新的管理理念与服务手段,优化业务流程,为客户提供更好的服务,实现企业价值最大化同时又使成本最低化,是餐饮行业向信息化发展的一个重要标志。

2. 3基于ZigBee协议的芯片[1][4][5]

2002年8月ZigBee联盟成立时Honeywell,Invensys,三菱电器,摩托罗拉和飞利浦等国际上知名的大公司就是ZigBee协议的支持者。目前,ZigBee已经吸引了上百家芯片研发公司和无线设备制造公司,并且不断有新的公司加盟这一联盟。现在国际上有很多公司生产基于ZigBee协议的芯片,芯片的集成度也越来越高。例如挪威的Nordic公司的nRF系列芯片,还有Chipcon公司的无线数据传输芯片等。各个公司的芯片原理基本相同,编程规则大致相同,因此选用Nordic公司的nRF2401,下面详细叙述一下nRF2401芯片的特点。
nRF2401无线收发一体芯片和蓝牙一样,都工作在2.4GHZ自由频段,能够在全球无线市场畅通无阻。nRF2401支持多点间通信,最高传输速率超过1Mbit/s,而且比蓝牙具有更高的传输速度。它采用SOC方法设计,只需少量外围元件便可组成射频收发电路。与蓝牙不同的是,nRF2401没有复杂的通信协议,它完全对用户透明,同种产品之间可以自由通信。更重要的是,nRF2401比蓝牙产品更便宜。所以nRF2401是业界体积最小、功耗最少、外围元件最少的低成本射频系统级芯片。
nRF2401的引脚排列如图2.2(顶视图)所示。它采用5mm×5mm的24引脚QFN封装。nRF2401的主要特点如下:

图2.2 nRF2401的引脚排列

(1)采用全球开放的2.4GHZ频段,有125个频道,可满足多频及跳频需要;
(2)速率(1Mbps)高于蓝牙,且具有高数据吞吐量;
(3)外围元件极少,只需一个晶振和一个电阻即可设计射频电路;
(4)发射功率和工作频率等所有工作参数可全部通过软件设置;
(5)电源电压范围为1.9-3.6V,功耗很低;
(6)电流消耗很小,-5dBm输出功率时的典型峰值电流为10.5mA;
(7)芯片内部设置有专门的稳压电路,因此,使用任何电源(包括DC/DC开关电源)均有很好的通信效果;
(8)每个芯片均可以通过软件设置最多40bit地址,而且只有收到本机地址时才会输出数据(提供一个中断指示),同时编程也很方便;
(9)内置CRC(Cyclic Redundancy Check,循环冗余校验)[16]纠检错硬件电路和协议;
(10)采用DuoCever技术可同时接收两个nRF2401的数据;
(11)采用ShockBurst TM模式时,能适用极低的功率操作和不严格的MCU执行;
(12)无需外部SAW滤波器;
(13)可100%RF检验;
(14)带有数据时隙和数据时钟恢复功能。
nRF2401的内部结构原理及外部组成框图如图2.3所示,下面介绍其工作原理。

图2.3 nRF2401的内部结构原理及外部组成框图

1 ShockBurst TM[16]模式
nRF2401的ShockBurst TM模式采用片上FIFO(First-In First-Out,先进先)出来进行低数据率的时钟同步和高数据率的传输,因此极大的降低了功耗。
ShockBurst TM发射主要通过MCU接口引脚CE、CLK1和DATA来完成。当MCU请求发送数据时,置CE为高电平,此时的接收机地址和有效载荷数据作为nRF2401的内部时钟,可用请求协议或MCU将速率调至1Mbps;置CE为低电平可激活ShockBurst TM发射。
ShockBurst TM接收主要使用MCU接口引脚CE、DR1、CLK1、DATA来实现。当正确设置射频包输入载荷的地址和大小后,置CE为高电平可激活RX。此后便可在nRF2401监测信息输入200μs,若收到有效数据包,则给MCU一个中断并置DR1为高电平,以使MCU 以时钟形式输出有效载荷数据,待系统收到全部数据后, nRF2401再置DR1为低此时如果CE保持高电平,则等待新的数据包。若CE置低电平,则开始接收新的序列
nRF2401的 DuoCeiver TM[17]技术为RX提供了两个独立的专用数字信道,因而可代替两个单独接收系统。图4所示是DuoCeiver TM同时双接收信道结构图。 nRF2401可以通过一个天线接口从相隔8MHZ的两1Mbps接收机上接收数据。同时将两个数字信道的输出反馈到两个单独的MCU接口。具体的两个信道如下:

图2.4 DuoCeiver TM同时双接收信道结构图

数字信道1:CLK1,DATA,DR1;
数字信道2:CLK2,DOUT2,DR2;
应当说明的是,数字信道2的频率只有在比数字信道1的频率高出8MHZ时,才能保证正常接收。

第三章 基于ZigBee协议的硬件系统的设计及实现

目前,51系列单片机非常流行,而且资料众多,因此选用51系列单片机作为开发板的MCU,通过附加一定的外围电路后,来和无线数据传输模块进行通信,实现数据的无线传输。

3.1 STC89C58RD+[10]单片机概述

STC89C58RD+系列单片机是宏晶科技推出的新一代超强抗干扰,高速,低功耗的单片机,指令代码完全兼容传统8051单片机,12时钟/机器周期和6时钟/机器周期可任意选择。
它具有以下特点:
1. 增强型6时钟/机器周期,12时钟/机器周期 8051 CPU(Central Process Unit,中央处理器)。
2. 工作电压:5.5V – 3.4V(5V单片机)
3. 工作频率范围:0 – 40 MHz,相当于普通8051的 0~80MHz.实际工作频率可达48MHz.
4. 用户应用程序空间32K字节
5. 片上集成 1280 字节RAM(Random Access Memory,随机存储器)。
6. 通用I/O口32个,复位后为: P1/P2/P3是准双向口/弱上拉(普通8051传统I/O口),P0口是开漏输出,作为总线扩展用时,不用加上拉电阻,作为I/O口用时,需加上拉电阻。
7. ISP(在系统可编程)/IAP(在应用可编程),无需专用编程器/ 仿真器 可通过串口(P3.0/P3.1)直接下载用户程序,8K程序3秒即可完成一片
8. EEPROM 功能
9. 看门狗
10.共3个16位定时器/计数器,其中定时器0还可以当成2个8位定时器使用
11.外部中断4路,下降沿中断或低电平触发中断,Power Down模式可由外部中断低电平触发中断方式唤醒
12. 通用UART(Universal Asynchronous Receiver/Transmitter ,通用串行接口),还可用定时器软件实现多个UART
14.工作温度范围: 0 – 75℃ / -40 – +85℃
15.封装: PDIP-40,PLCC-44,PQFP-44
使用这种单片机做开发板,最大的优势就在于它支持ISP,这样不用购买昂贵的编程器/ 仿真器,直接通过串口线就能实现在线编程。而且内部集成了看门狗和Flash,简化了PCB板的制作。指令代码与51单片机兼容,这样可以用常用的51单片机软件开发工具开发驱动程序。

3.2 开发板的各个组成部分原理图以及功能

整个开发板是由单片机最小系统和它的一些外围电路组成,单片机最小系统做为整个开发板的控制中心,控制各个外围电路协调工作,完成系统设计的功能。整个系统原理图见附录2,下面详细叙述各个组成部分的原理及各自实现的功能。原理图由Protel 99SE[18][19]绘制。
3.2.1 单片机最小系统组成电路
单片机最小系统是整个开发板的控制中心,它由电源,复位电路和晶振组成。电源采用5V供电,晶振为12MHZ。为了便于调试,将P0.4-P0.7和发光管相连,发光管为共阳极连接,这是因为开发板初上电或者或者复位后,所有的I/O口均为高电平。由于不使用外部存储器,因此将EA接高电平。为了方便调试和降低成本,因此选用USB(Universial Serial Bus,通用串口总线)方式供电。USB的即插即用特性,使对开发板供电非常方便。图3.1所示为单片机最小系统。

图3.1 单片机最小系统

3.2.2 串行口电平转换部分
大多数PC机都有一个串行通讯端口RS-232用于两台计算机间进行串行通讯。RS – 232通讯接口是一种标准化的串行接口,是为DTE(Data Terminal Equipment,远程通讯连接终端设备)与DCE (Data Communication Equipment,数据通讯设备)定义的物理接口。RS-232采用非平衡连接(又称为单端线路),在这个线路中,信号电压加到一条导线上,所有的信号电压都使用一个公共的接地线。为了提高抗干扰能力和增加传送距离,RS一232的每个脚线的信号和电平规定采用负逻辑电平,DC(-15一5V)规定为逻辑“1”,DC(+ 5—+15V)规定逻辑“0”, DC(-5一+5V规定为过渡区)。由于单片机的输入、输出电平为TTL电平,与 PC机RS-232标准串行接口的电气规范不一致,因此要实现单片机与PC机之间的数据通读,必须进行电平转换。选用的电平转换芯片为MAX232,它的工作电压为+5V,和单片机的工作电源相同。
由于STC89C58RD+单片机支持ISP下载,因此通过这个串行口既可以用来和PC机通信,又能将程序下载到单片机,不用购买昂贵的编程器。图3.2所示为串口电平转换部分。

图3.2 串口电平转换部分

3.2.3 LED部分
由于单片机复位后,各个引脚输出都为高电平,因此选用共阴极的LED数码管。每个数码管的使能端com1,com2,com3,com4分别接到P1.0,P1.1,P1.2,P1.3,当向使能端输出低电平,即可选通相对应的数码管。74LS244为三态输出的八组缓冲器和总线驱动器,选用的四位八段数码管本身已经集成了译码器,这样既简化了线路的连接,又降低了错误发生的概率。图3.3为LED部分。

图3.3 LED部分

3.2.4 开发板和无线数据传输模块接口部分
这一部分有两部分组成:由于nRF2401的工作电压为1.9V-3.6V,工作电压超过3.6V就会烧坏芯片。而开发板的电源为5V,因此为了使系统工作,必需要有5V电平转换为3.3V电平的部分。为了实现这一过程,选用LM1117-MAX3.3作为核心芯片。LM1117是一个低压差电压调节器系列,其压差在1.2V输出,负载电流为800mA时为1.2V。LM1117提供电流限制和热保护,电路包含1个齐纳调节的带隙参考电压以确保输出电压的精度在±1%以内。LM1117系列具有LLP、TO-263、SOT-223、TO-220和TO-252 D-PAK封装;此外为了使两个模块直接相连,将P2口的部分引脚用排针引到一起,排针间距为 100mil,标准 DIP 插针。图3.4为开发板和无线数据传输模块接口部分,图3.5为5V电平转3.3V电平部分。

图3.4 开发板和无线数据传输模块接口部分

图3.5 5V电平转3.3V电平部分

3.2.5 键盘部分

图3.6 键盘部分

键盘部分用来实现人机通信。有四个按键开关构成,分别为S5(P3.3/INT1), S6(P3.4/T0), S7(P3.5/T0), S5(P3.2/INT0),正常情况下均为高电平。当键按下后,输出为低电平。由于四个键盘的组成一样,这里只画出了S5的电路图。图3.6为键盘部分。

3.3 无线数据传输模块

通过仔细的比较和反复的论证后,决定选用nRF2401芯片作为无线模块的核心芯片,它的特点在上一章已经详细论述,这里不在重复。nRF2401芯片的典型应用电路如图3.7所示。

图3.7 nRF2401芯片的典型应用电路
从图11可以看出,只需要很少外围电路就可以组成无线数据传输模块。
它与开发板的接口电路为图3.8
各个接口的要求如下:
(1) VCC脚接电压范围为 1.9V~3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。推荐电压3.3V左右。
(2) 除电源 VCC 和接地端,其余脚都可以直接和普通的 5V 单片机IO 口直接相连,无需电平转换。当然对 3V 左右的单片机更加适用了。
(3) 硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO口就可以了,当然用串口也可以了。
(4)6脚,12脚为接地脚,需要和开发板的逻辑地连接起来。

图3.8 无线数据传输模块与开发板的接口电路

3.4 无线数据传输模块和开发板的PCB图设计

PCB板是一块绝缘材料,在表面合理安放各种电子元件,并安排连接电子元件引脚间的铜膜导线,在不同的表面间有连接不同表面的铜导孔。
随着电子技术的不断发展进步,PCB在复杂程度和应用范围方面都有了长足的进步,按复杂程度来分,可以将PCB板分为3类:1.单面印刷电路板;2.双面印刷电路板;3.多层印刷电路板。为了方便布线,本系统所用的开发板和无线数据传输模块均为双层印刷电路板。
PCB的生成主要由四个过程组成:其一是原理图的生成;其二是根据已经生成的原理图产生对应的网络表,网络表是PCB图和原理图的纽带;第三步是新建一个PCB文件,并导入网络表;第四步是将合理布局元件,并用导线将元件的引脚连起来。
3.4.1 开发板的PCB图
将开发板的原理图按照以上的步骤生成相应的PCB图。如图3.9所示:
在PCB图设计的所有过程中,原理图在上一节已经生成。网络表的生成也比较简单。由于PCB图上使用元件的封装来代表元件,因此原理图中各个元件都要明确有自己的封装方式,而且在绘制PCB图前必须将用到的封装所在的封装库调入。否则,在调入网络表的过程中将会出现元件丢失的错误。

图3.9 开发板的PCB图

开发板上主要用到两个封装库:Advpcb.ddb和Miscellaneous.ddb.另外由于USB电源接口,电源开关,键盘和四位八段数码管没有对应的封装,因此需要使用元件库编辑器建立新元件封装。图3.10为键盘封装,图3.11为USB封装,图3.12为开关封装,图3.13为四位八段数码管封装。

图3.10 键盘封装 图3.11 USB封装

图3.12 开关封装 图3.13 四位八段数码管封装

各个元件的封装的引脚的序号必须和原理图中引脚的序号保持一致,不然将会在调如网络表过程中出现管脚丢失的错误。
下面再重点分析一下布线的过程。
布线是完成产品设计的重要步骤,可以说前面的准备工作都是为它而做的,在整个PCB中,以布线的设计过程限定最高,技巧最细、工作量最大。本系统的PCB布线为双面布线,布线的方式有两种:自动布线及交互式布线。但由于自动布线效果不好,往往实际的效果和预计效果有很大的出入,因此全部使用交互式布线。布线过程中充分考虑到如何降低元件字之间互相的干扰。
首先根据印制线路板电流的大小,尽量加租电源线宽度,减少环路电阻,它们的关系是:地线>电源线>信号线。同时使电源线、地线的走向和数据传递的方向一致,这样有助于增强抗噪声能力。线条有讲究:有条件做宽的线决不做细;高压及高频线应园滑,不得有尖锐的倒角,拐弯也不得采用直角。
由于采用双层设计,因此不可避免地将会使用到过孔。过孔太多,沉铜工艺稍有不慎就会埋下隐患。所以,设计中应尽量减少过线孔。此外,应该合理布置电源滤波/退耦电容:一般在原理图中仅画出若干电源滤波/退耦电容,但未指出它们各自应接于何处。其实这些电容是为开关器件(门电路)或其它需要滤波/退耦的部件而设置的,布置这些电容就应尽量靠近这些元部件,离得太远就没有作用了。
3.4.2 无线数据传输模块的PCB图
由于无线数据传输模块的核心芯片工作在2.4GHZ,因此在设计PCB图时对干扰的控制要格外重视。在PCB设计时,必须考虑到各种电磁干扰,注意调整电阻、电容和电感的位置,特别要注意电容的位置。
nRF2401的PCB为双层板,底层一般不放置元件,顶层的空余地方敷上铜,这些敷铜通过过孔与底层的地相连。nRF2401的供电电源应通过电容隔开,这样有利于给nRF2401提供稳定的电源。在PCB中,尽量多打一些通孔,使顶层和底层的地能够充分接触。nRF2401模块的PCB如图3.14所示。

图3.14 无线数据传输模块的PCB图

第四章 硬件驱动程序和串行口调试工具

驱动程序是硬件电路的灵魂,没有驱动的硬件电路是没有用的。STC89C58RD+是51类单片机,可以像开发其他51单片机驱动一样开发它的驱动程序。单片机软件开发平台选择比较流行的Keil uVision2,因为现在关于Keil uVision2软件的资料很多,这样上手就会很快。
串行口调试工具是用来将PC机上的数据通过串行口发送到单片机,和PC机接收从单片机发送过来的数据。选用Visual C++ 6.0来开发串行口调试工具,Visual C++ 6.0是微软公司推出的一款优秀开发工具,代码紧凑,运行速度快,而且比较适合低层开发。

4.1 硬件驱动程序

整个数据传输系统有两部分组成:与PC机相连的开发板为主机端,它不能移动,接收从机端发送过来的数据,并向从机端发送指令;可以移动的为从机端,它由开发板和无线数据传输模块组成。由于两端的地位和功能不同,因此对应的驱动程序也不同。
使用Keil uVision2开发硬件驱动程序,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。51 的编程语言常用的有二种,一种是汇编语言,一种是 C 语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小于汇编语言很多。综合以上C语言的优点,在开发时选择了C51语言.
4.1.1 主机端硬件驱动程序
主机端的硬件驱动程序主要有两种功能:实现开发板通过串行口和PC机通信;实现开发板通过某些I/O口和无线数据传输模块进行通信。
STC89C58RD+单片机的串行口是一个全双工通信接口,即能同时进行发送和接收,它可以作UART用,也可以作为同步移位寄存器用,其祯格式和波特率可以通过软件编程来设置,在使用上非常方便。
STC89C58RD+单片机串行口的工作方式和波特率由控制寄存器SCON和特殊功能寄存器PCON组成。
串行口控制寄存器SCON:

D7 D6 D5 D4 D3 D2 D1 D0
SM0 SM1 SM2 REN TB8 RB8 TI RI

特殊功能寄存器PCON:

D7 D6 D5 D4 D3 D2 D1 D0
SMOD

串行口可以通过软件设置四种工作方式,各种工作方式的数据格式和波特率均有所不同,这四种工作方式如下:
1. 方式0
当设定SM1、SM0为00时,串行口工作于方式0,在方式0下,RXD为数据输入/输出端,TXD为同步脉冲输出端,发送或接收的数据为8位,低位在前,高位在后,方式0的波特率固定震荡频率的1 /12,也就是每一机器周期传送一位数据。方式0可以外接移位寄存器,将串行口扩展为并行口,也可以外接同步输入/输出设备。发送完毕后,硬件自动将TI置1。再次发送数据前,需要软件将TI位清0。
REN为1时,单片机允许接收数据。RXD为数据接收端,接受数据保存到SBUF接收缓冲器中。发送完毕后,硬件自动将RI置1。再次接收数据前,需要通过软件将RI清0。
2. 方式 1
当设定SM1、SM0为01时,串行口工作方式1。方式1为波特率可变的8位异步通信方式,由TXD发送RXD接收,一帧数据为10位,1位起始位(低电平),8位数据位(低位在前)和1位停止位(高电平),波特率取决于定时器 的T 溢出率(1/溢出周期)和波特率的选择位SMOD。
3.方式2和方式3
当设定SM0、SM1为10或11时,串行口工作于方式2或方式3,这两种方式都是9位异步通信,仅波特率不同,适用于多机通信。在方式2或方式3下,数据由TXD发送RXD接收,1帧数据为11位,1位起始位(低电平),8位数据位(低位在前),1位可编程位(第9位数据,用作奇偶校验或地址/数据选择),1位停止位(高电平)。与方式1相比,多了一位可编程位,发送时,第9位数据为TB8,接收时,第9位数据送入RB8。
通过以上单片机串行口各种工作方式的比较,由于使用一个开发板和PC机进行单独的通信,因此工作方式1比较适合系统的要求。通过设置合适的波特率和帧格式,来实现开发板和PC机之间准确的数据传递。
由于PC机和单片机的处理速度的不同,PC机给开发板发送数据时,单片机采用中断的方式进行数据接收。通过软件设置单片机的传输属性参数为“9600,N,8,1”,来实现和PC机端串行口传输速率同步。开发板向PC机发送数据时,采用查询方式,这样可以节省单片机有限的资源。
开发板还要通过专门的接口和无线数据传输模块进行数据交换,由于系统设计为点对点通信,因此只使用了nRF2401一个信道。nRF2401的数据传输方式为同步传输,因此使用普通的I/O口通过软件方式模拟SPI方式传输。
nRF2401有四种工作模式:收发模式,配置模式,空闲模式和关机模式[16][17]。工作模式由PWR_UP 、CE、TX_EN和CS三个引脚决定,详见表4.1。

表4.1 nRF2401的各种工作模式的设置方式
工作模式 PWR_UP CE CS
收发模式 1 1 0
配置模式 1 0 1
空闲模式 1 0 0
关机模式 0 * *

前文已经讲过有关nRF2401的收发方式,这里重点讨论一下它的配置方式。nRF2401的所有配置工作都是通过CS、CLK1和DATA三个引脚完成,把其配置为ShockBurstTM收发模式需要15字节的配置字。
ShockBurst TM的配置字可以分为以下四个部分:
(1) 数据宽度:声明射频数据包中数据占用的位数。这使得nRF2401能够区分接收数据包中的数据和CRC校验码;
(2) 地址宽度:声明射频数据包中地址占用的位数。这使得nRF2401能够区分地址和数据;
(3) 地址:接收数据的地址,有通道1的地址和通道2的地址;
(4) CRC:使nRF2401能够生成CRC校验码和解码。
nRF2401的配置字如表4.2所示:
在配置模式下要保持PWR_UP引脚为高电平,CE引脚为低电平,配置字从最高位开始,依次写入nRF2401。在CS引脚的下降沿,新送入的配置字开始工作。

表4.2 nRF2401的配置字
位 位数 名字 功能
Shockb
Brst T
M 配置 143:120 24 TEST 保留
119:112 8 DATA2_W 接收频道2有效数据长度
111:104 8 DATA1_W 接收频道1有效数据长度
103:64 40 ADDR2 接收频道2的地址,最高为5字节
63:24 40 ADDR1 接收频道1的地址,最高为5字节
23:18 6 ADDR_W 接受频道地址位数
17 1 CRC_L 8位或16位CRC校验
16 1 CRC_EN 使能CRC校验
常用器件配置 15 1 RX2_EN 使能第二频道
14 1 CM 通信方式设置
13 1 RFDR_SB 发射数据速率
12:10 3 XO_F 晶震频率
9:8 2 RF_PWR 发射输出电源
7:1 7 RF_CH# 频道设置
0 1 RX_EN 接收或发送操作
开发板通过串行口和PC机交换数据的流程图如下:

图4.1 开发板和PC机通过串行口交换数据的流程图
开发板通过IO口和无线数据传输模块进行数据交换的流程图为图4.2。

图4.2开发板通过IO口和无线数据传输模块进行数据交换的流程图

4.1.2 移动端驱动程序
移动端的开发板的结构和PC机端的开发板的结构完全相同,但由于它不需要和PC机通信,只需要和无线数据传输模块进行通信。因此相对另一端的驱动简单一些。具体编程规则在上一节已经详细叙述,这里不再多说,具体的程序是PC机端程序的一部分。

4.2 串行口调试工具

串行口调试工具是用微软公司的visual c++6.0[20][21]开发的。几乎所有世界级的软件,从业界领先的Web浏览器到面向任务的企业应用,都是使用Microsoft Visual C++开发系统来开发的。要用C++来开发Windows和Web上的高性能应用程序,Visual C++是效率最高的首选工具。Visual C++ 6.0在不牺牲灵活性、性能和控制力度的同时,给C++带来了更高水平的生产效率。它具有可视化的界面,封装了大量的类,使界面制作变的很简单,使用它可以方便快捷地开发Windows环境下的应用程序。visual c++6.0专门为串行口通信提供了Mscomm[20][21]控件,使用该控件程序员不必花时间去了解比较复杂的API函数,通过简单修改控件的属性和使用控件提供的方法就可以实现对串口的配置,完成串口发送和接收数据。
4.2.1串行通信的基本原理
串行端口的本质功能是作为CPU和串行设备间的编码转换器。当数据从CPU经过串行端口发送出去时,字节数据转换为串行的位。在接收数据时,串行的位被转换为字节数据。 在Windows环境下,串口是系统资源的一部分。 应用程序要使用串口进行通信,必须在使用之前向操作系统提出资源申请要求(打开串口),通信完成后必须释放资源(关闭串口)。32位下串口通信程序可以用两种方法实现:利用ActiveX控件;使用API通信函数。在本次课程设计中,所用到的是MFC的MSComm控件,下面先将这个关键的控件做一下简单的介绍。
Microsoft Communications Control(以下简称MSComm)是Microsoft公司提供的简化Windows下串行通信编程的ActiveX控件,为应用程序提供串行通信功能,它为应用程序提供了通过串行接口收发数据的简便方法。MSComm控件在串口编程时非常方便,其实际上是调用了API函数,但我们不必再了解复杂的API函数就可控制串行通信。通信的过程,实际上是对属性的操作和对控件事件的响应。
在Windows操作系统中,串行通信采用“事件通知”方式,支持数据按块传送。进行通信时,Windows开辟一个用户定义的输入输出缓冲区,每接收一个字符就产生一个低级硬件中断,串行驱动程序立即取得控制权,并将字符放入输入数据缓冲区,然后将控制权返还正在运行的应用程序。如果输入数据缓冲区满了,驱动程序用当前定义的流控制机制通知发送方停止发送数据。发送数据也采用类似的处理方式,应用程序将需要发送的数据放入输出数据缓冲区,串口每发送一个字符就产生一个低级硬件中断。
Visual C++ 6.0通信控件Mscomm提供了功能完善的串口数据的发送和接收功能,Mscomm 控件具有两种处理方式:一是事件驱动(Event-driven)方法,一是查询法。
1)事件驱动方式。当通信事件发生时,MSCOMM控件会触发OnComm事件,调用者可以捕获该事件,通过检查其CommEvent属性便可确认发生的是哪种事件或错误,从而进行相应的处理。这种方法的优点是响应及时、可靠性高。
2)查询方式。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。如果应用程序较小,这种方法可能更可取。例如,如果写一个简单的电话拨号程序,则没有必要每接收1个字符都产生事件,因为惟一等待接收的字符是调制解调器的”确定”响应。
在使用MSCOMM控件时,1个MSCOMM控件只能同时对应1个串口。如果应用程序需要访问和控件多个串口,那么必须使用多个MSCOMM控件。
在VC++中,MSCOMM控件只对应着1个C++类–CMSComm。由于MSCOMM控件本身没有提供方法,所以CMSComm类除了Create()成员函数外,其他的函数都是Get/Set函数对,用来获取或设置控件的属性。MSCOMM控件也只有1个OnComm事件,用来向调用者通知有通信事件发生。
MSCOMM控件有许多很重要的属性,限于篇幅只给出几个较为重要和常用的属性。

表4.3 MSCOMM控件的重要属性
属 性 说 明
CommPort 通信端口号
Settings 以字符串形式表示的波特率、奇偶校验、数据位
PortOpen 通信端口的状态,打开或是关闭
Input 接收数据
Output 发送数据
InputMode 接收数据的类型:0为文本;1为二进制

表4.4 程序中用到的所有控件,以及它们的ID
控件 ID 标题
按钮 ID_SEND 发送
按钮 ID_CLEAR 清空
编辑框 IDC_EDIT_SEND
编辑框 IDC_EDIT_RCV
静态文本 IDC_STATIC 接收缓冲区
静态文本 IDC_STATIC 发送缓冲区
组框 IDC_STATIC 端口选择
单选按钮 IDC_1 端口1
单选按钮 IDC_2 端口2
mscomm IDC_MSCOMM

表4.5 用到的变量和变量的类型
Control IDS Type Member
IDC_EDIT_SEND CString m_str_send
IDC_EDIT_RCV CString m_str_recv
IDC_MSCOMM CMSComm m_mscomm

Object IDS Messages Function
ID_SEND BN_CLICKED OnSend
ID_CLEAR BN_CLICKED OnClr
IDC_1 BN_CLICKED On_Com1
IDC_2 BN_CLICKED On_Com2
IDC_MSComm OnComm OnComm

4.2.2程序设计原理
第一步:初始化串行口。调用SetCommPort()函数,选择使用的端口好,然后设置波特率发送接收的处理方式,以及数据的传输方式,最后将串口打开。
第二步:发送数据。将要发送的字符串变成特定的类型后,调用函数SetOutput(),将数据发送到发送缓冲区
第三步:接受数据。将接收缓冲区中的数据通过GetInput()函数读出,并将它转换为Cstring类型,显示在界面上。
程序的各个主要部分和一些流程图:
(1)登陆界面后,程序首先将接收缓冲区和发送缓冲区清空
程序如下:
m_str_send=” “;
m_str_recv=” “;
UpdateData(FALSE);
(2)然后进行串行口的初始化,也即是设置MSComm控件的各种属性。首先要进行端口的选择,由于所用到的计算机只有两个串行口,因此本程序只给了两个选择,具体的程序代码如下:
void CMyDlg::On_Com1()
{
if(m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(FALSE);
m_mscomm.SetCommPort(1);
m_mscomm.SetSettings(“9600,n,8,1″);
m_mscomm.SetRThreshold(1);
m_mscomm.SetSThreshold(0);
m_mscomm.SetInputLen(0);
m_mscomm.SetInputMode(1);
m_mscomm.SetPortOpen(TRUE);
}
void CMyDlg::On_Com2()
{
if(m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(FALSE);
m_mscomm.SetCommPort(2);
m_mscomm.SetSettings(“9600,n,8,1″);
m_mscomm.SetRThreshold(1);
m_mscomm.SetSThreshold(0);
m_mscomm.SetInputLen(0);
m_mscomm.SetInputMode(1);
m_mscomm.SetPortOpen(TRUE);
}
1)CommPort:分别选1和2。
2) Setting设置或返回串行端口的波特率:9600、无奇偶校验位、数据位数为8、1位停止位。
3) InBufferSize:设置接收缓冲区为1024字节。
4) RThreshold:设置当接收缓冲区内字节个数为1时,触发MSCOMM的OnComm事件,然后由计算机将接收缓冲的数据读出,并将接收缓冲区清空。
5) InputLen:值为0,设置INPUT读取整个缓冲区的内容。
6) OutBufferSize:设置发送缓冲区为512字节。
(3)发送数据的源程序代码
void CMyDlg::OnSend()
{
if(!m_mscomm.GetPortOpen())
m_mscomm.SetPortOpen(TRUE);
UpdateData(TRUE);
m_mscomm.SetOutput(COleVariant(m_str_send)); //发送数据
}
将文本框内的字符串送到变量m_str_send中,然后将字符转化为ColeVariant类型的数据,再通过SetOutput函数将数据发送到发送缓冲区中。
(4)接收数据的源程序代码
void CMyDlg::OnComm()
{
VARIANT variant_tmp;
COleSafeArray safearray_tmp;
LONG len,i;
BYTE buf[2048];
CString str_tmp;
if(m_mscomm.GetCommEvent()==2)
{
variant_tmp=m_mscomm.GetInput();
safearray_tmp=variant_tmp;
len=safearray_tmp.GetOneDimSize();
for(i=0;i safearray_tmp.GetElement(&i,buf+i);
for(i=0;i {
BYTE ch=*(char*)(buf+i);
str_tmp.Format("%c",ch);
m_str_recv+=str_tmp;
}
}
UpdateData(FALSE);
}
当m_mscomm.GetCommEvent()==2时候,数据到来,触发OnComm事件,调用该函数。首先通过m_mscomm.GetInput()将接收缓冲区内的数据读到变量variant_tmp中,再将variant_tmp赋予safearray_tmp来实现数据类型转化为ColeSafeArray。通过safearray_tmp.GetOneDimSize()求出接收到的字符的总长度,再将每个ColeSafeArray变量转化为Byte类型的变量,最后转化为字符类型,并将它显示在文本框内。
void CMyDlg::OnComm() 的流程图:

图4.3 void CMyDlg::OnComm() 的流程图

(5)清空功能函数源代码
void CMyDlg::OnClr()
{
m_str_send=" ";
m_str_recv=" ";
UpdateData(FALSE);
}
总的程序流程图如图4.4所示

图4.5是PC机通过端口1向单片机发送数据时候的图型界面。进入界面后,首先要进行根据连接的串行口选择要初始化的端口,然后使用键盘在发送缓冲区内输入一系列的字符。等单片机开发板上电后,单击发送按键将数据发送出去。
图4.6是PC机通过串口接收单片机发送过来的数据时候的图形界面。在缓冲区接收的数据为二进制形式,程序内已经将这些二进制转化为字符串在界面上显示。
图4.7是串行口调试工具初始运行时候的图形界面。
事件驱动方式时,由计算机直接管理,字节之间不可控,而且单片机串行口和PC机串行口速率差别较大,接收程序一定要精心合理的设计,才能使传输稳定可靠,否则很容易出现意想不到的问题。在调试过程中,如果不小心将串行口调试工具的波特率和开发板串行口的波特率设置为不同,就会出现错误。程序中已经将串行口的波特率设置为9600bps,这样可以避免错误。

图4.5通过端口1进行发送时候的图型界面

图4.6 通过串口接收时候的图形界面

图4.7 串行口调试工具的运行界面

第五章 总结与展望

5.1 全文总结

通过这次毕业设计,我学到了不少课本上没有的知识,也锻炼了自己的动手能力,将以前学过的零散的知识串到一起。
首先在毕业设计刚开始的调研阶段,我学会了怎么通过各种方式查询相关的资料。通过对这些资料的学习,我大致了解了无线通信的发展现状以及未来的发展趋势,认识到目前无线通信方面的各种各样的协议,以及它们之间的竞争。了解了无线通信方面的先进技术,这些都为我未来的学习指明了方向。
我毕业设计主要涉及硬件和软件两个方面的内容,通过这些我的硬件和软件开发能力都获得了提高。首先在硬件方面,基本了解了电子产品的开发流程和所要做的工作。基本掌握了Protel 99 SE设计原理图和简单的PCB图的方法,并设计了一个单片机最小系统。通过开发板的设计和硬件搭建的过程,使我对51系列单片机的接口有了更深层次的理解,熟悉了一些单片机常用的外围电路的引脚和连接方法,如LED数码管,键盘等。
在软件方面,通过串行口调试工具的开发,我基本掌握了Visual C++ 6.0的使用方法,加深了对类封装的理解。通过开发板驱动程序的开发,使我熟练掌握了Keil uVision2,熟悉了51系列单片机内部的寄存器和编程规则,以及如何控制外围电路。
当然,由于单片机功能的局限性,当面对很复杂的系统时像无线点菜系统,单片机就不太合适。这是因为单片机的引脚过少,能够使用操作系统过于简单,不能进行复杂的工作调度,也不能驱动复杂的外围电路,因此使用单片机完全实现点菜系统的要求比较困难。
近几年来,处理器已经发展到32位机,尤其是以ARM(Advanced RISC Machines)为内核的32位处理器受到越来越多嵌入式开发人员的青睐。ARM处理器支持复杂的嵌入式操作系统,例如Win CE,UClinux等。可以进行复杂的功能调度,而且能够驱动比较复杂的外围电路例如触摸屏等。这样使用ARM处理器和嵌入式操作系统,配合嵌入式移动数据库技术,更能完成点菜系统的要求。所以,毕业设计也给我将来的学习指明了一个方向。
单就本论文而言,主要完成了以下工作:
1.在ZigBee协议的基础上,以51系列单片机为处理器,配合一定的外围电路构建了硬件开发平台。
2.用C51语言为硬件部分编写驱动程序,并用Visual C++6.0开发了串口调试工具。

5.2 研究展望

目前,无线通信的各种技术呈现百花齐放的局面。但是随着经济的发展,人民需求的提高,无线通信技术依然有很大的发展空间。在以下方面仍然有很长的路要走。
1随着IP(Internet Protocol,网际协议)技术的发展,无线通信网和IP网有融合的趋势。尤其是多媒体信息需求的增加,多媒体信息对实时性要求不高的特点,使得利用无线通信网传输多媒体信息成为一大热门。
2随着人民生活水平的提高,生活方式的转变,无线通信技术必然向移动化和便携化方向发展。
3由于无线频谱资源有限和无线通信传输信道的特殊性,使得如何提高频谱资源的利用率以及提高抗干扰能力成为未来很热门的研究方向。
4 现代微电子技术发展迅猛,摩尔定理仍然有效,集成电路技术已经发展到SOC,32位的ARM处理器已经得到了广泛的应用。因此在未来越来越复杂的嵌入式系统开发中,32位处理器和嵌入式操作系统将得到更广泛的应用。

参考文献

[1] 张莉. 近距离无线通信技术及应用前景[EB/OL].

http://www.chinaunicom.com.cn/profile/xwdt/txjs/file701.html.2007-1-24

[2]李朝青.无线发送/接收IC芯片及其数据通信技术选编[M].北京:北京航空航天大学出版社,2000.243-316
[3]求是科技.单片机通信技术与工程实践[M].北京:人民邮电出版社,2005.239-315
[4]王博.基于nRF2401的无线数据传输系统[J].电子工程师,2004.30(8):18-20
[5] 佚名. 红外技术与蓝牙技术的比较[EB/OL].
http://www.360doc.com/showweb/0/0/514536.aspx. 2007-3-24
[6]曹琳琳.单片机原理及接口技术[M].长沙:国防科技大学出版社,2000.55-213
[7] 佚名.ZigBee协议分析[EB/OL]
http://www.cnzdh.com/Article/yt/200703/902.html. 2007-3-21.
[8] 沈文斌.嵌入式硬件系统设计与开发实例详解[M].北京:电子工业出版社2005.69-93
[9]郑启忠.2.4GHZ射频收发芯片nRF2401及其应用[EB/OL]. http://www.eduboss.com/content/2005-4-10/16272.html. 2005-4-10
[10] 李肇庆.串行端口技术[M].北京:国防工业出版社,2004.1-69
[11] Kaveh Pahlavan,Prashant Krishnamurthy.Principle of Wireless
Networks:A unified Approach[M]北京:清华大学出版社,2003.1-52
[12] 邹涛.网络与无线通信技术[M].北京:人民邮电出版社,2004.47-63
[13] 杨晓鹏,宗明. VISUAL C++ 6.0实用编程技术[M].北京:中国水利水电出版社 2004.169-215
[14] 佚名.SPI总线在51系列单片机系统中的实现[EB/OL].
http://www.et00.com/mcu/html/article_3047.html. 2007-1-12
[15]刘文涛.单片机语言C51典型应用设计[M].北京:人民邮电出版社,2004.43-117
[16] 张崇. 单片2.4GHz无线收发一体芯片nRF2401及其应用[J].国外电子元器件,2004.6 34-36
[17] Nordic.Single chip 2.4 GHz Transceiver nRF2401[EB/OL].
http://www.c51rf.com/DownloadShow.asp?ID=57. 2007-1-22
[18] 刘秋艳.Protel 99 SE电路设计[M].北京:中国铁道出版社,2005.13-180
[19] 廖焕霖.跟我学Protel 99[M].北京:冶金工业出版社,2000.137-203
[20] 胡晓军.Visual C++ 6.0高级开发范例解析[M].北京:电子工业出版社,2003.81-132
[21]王华.Visual C++ 6.0 编程实例与技巧[M].北京:机械工业出版社.

附录

1附录1

#include

基于modem的PC机与单片机通信

Posted by 天际的荒草 | Posted in Docs | 文档 | Posted on 18-09-2009

标签:, , , ,

0

由于公用电话网技术成熟、覆盖范围广,所以采用现有的公用电话网是实现单片机与PC机远程通信非常有效的方法。本文详细介绍了AT89S51单片机与远程PC机通过Modem利用公用电话网实现数据通信的硬件、软件设计和实现方法。系统由单片机、Modem和远程PC机三个部分构成,PC机可通过Modem实现与单片机的远程通信。设计中使用汇编语言实现AT89S51单片机收发数据程序,远程PC机软件部分使用Visual Basic 6.0编写,包括串口和Modem初始化、拨号、接收子程序、发送子程序等功能模块,Modem通信采用AT指令完成。
最后本设计将基于Modem的PC机与单片机通信应用于自动报警系统,在单片机接口扩展人体红外传感器、语音报警等电路实现检测、报警功能,PC机软件部分加入Modem来电显示和数据库管理功能,监控端通过接收Modem来电显示从数据库调出报警用户的地址、联系人等信息。自动报警系统对于一般家庭、小区及机关单位的安全防盗,具有广泛的应用价值。

关键词: 单片机,PC机,Modem,串行通信,自动报警

ABSTRACT

Nowadays, since the public telephone network technology has been mature and the scope is so broad, using the existing public telephone network to perform the long-distance communication between PC and MCU is an extremely effective method. This article in detail introduces the MCU AT89S51 and PC using the public telephone network to perform data communication based on Modem, and also the design of the hardware, software and the method of them. The long-distance communication system is integrated with three major parts, the MCU, Modem and PC. The PC can communicate with the MCU via Modem. The design uses the assembly language to accomplish the receiving and receiving data procedure of the MCU AT89S51. The software of the PC is developed with Visual Basic 6.0. Function modules include the Modem communication, data base administration, display of the surface and so on. The Modem communication part uses the AT orders to complete.
Besides, the long-distance communication design is applied to the auto-alarm system. A human body infrared sensor and pronouncing equipments are expanded to the monolithic integrated circuit. They can execute the function of electric examination and report to the police. The PC monitoring terminal receives the caller’s ID through Modem to get the user’s information such as the user’s name and address from the database in the PC. In a word, the auto-alarm system has a widespread value of application for security of general family, plots and institution units.

KEY WORDS MCU, PC, Modem, serial communication, auto-alarm
目 录
第一章 绪 论 1
1.1 课题研究的背景 1
1.2 课题研究的目的和意义 1
1.3 本文研究的主要内容及结构安排 2
第二章 基于Modem的PC机与单片机通信实现 4
2.1 整体设计方案 4
2.1.1 系统组成框图 4
2.1.2 各模块说明 4
2.2 系统硬件设计 4
2.2.1 RS-232串行接口标准 5
2.2.2 AT89S51单片机介绍 5
2.2.3 MAX232介绍 7
2.2.4 电路原理说明 7
2.3 系统软件设计 8
2.3.1 使用Modem实现串行通信的方法 8
2.3.2 使用VB6.0的MSComm控件实现串行通信的方法 9
2.3.3 PC机流程框图及程序设计 11
2.3.4 单片机流程框图及程序设计 16
第三章 系统应用——自动报警系统 19
3.1 系统概述 19
3.1.1 应用背景与意义 19
3.1.2 系统功能简介 19
3.2 硬件电路构成及工作原理 20
3.2.1 系统原理结构框图 20
3.2.2 主要电路分析 21
3.3 报警系统软件设计 22
3.3.1 单片机流程框图及程序设计 22
3.3.2 PC机流程框图及程序设计 25
第四章 结 论 31
4.1 对系统的评价与展望 31
4.1.1 对系统的评价 31
4.1.2 对系统的展望 31
4.2 结束语 32
4.2.1 总结和心得 32
参考文献 34
致 谢 35

第一章 绪 论
1.1 课题研究的背景
当代的工业控制系统中,单片机通常作为下位机,用在设备现场采集信号,中央控制室的PC机则用来监控和调度整个控制现场。PC机与单片机之间的通信变得不可避免而且非常重要。通信方式有多种可供选择,可以利用现场总线传输,如CAN总线、RS-422, RS-485总线等,这些现场总线都很安全、可靠,而且实时性比较强,但是也存在明显不足,即受距离的限制,不适合很远的距离。但在许多情况下,如遥控、遥测等数据传输的距离都很远,而对于实时性要求不是很强,这时利用Modem就可以实现这些远距离通信。
利用Modem,借助于工厂、企业内部的电话机交换网络,甚至公用交换机网络,远距离传输信息,不但不受地点和时间的限制,真正做到了安全、迅速和正确,而且不用另外布线,非常经济、方便,采用电话通信网络建立数据通信系统确实具有独特的优越性。目前国外的通信技术已经相当成熟,使用Modem和公用电话网构成的远程通信系统己经向标准化、系列化发展。在国内一些生产厂家已经研制开发了很多类似的产品,从总体上看,在通信协议、数据格式等方面,还没有形成统一的标准。其发展趋势将是形成一种标准化、模块化和系列化的产品,以便降低成本,缩短开发周期【1】。

1.2 课题研究的目的和意义
基于Modem的PC机与单片机通信系统的设计解决了两机实现远程通信的技术难题,利用PC机良好的人机界面和强大的数据处理能力,可以实现整个系统的集中管理和最优控制;利用单片机低廉的价格和较强大的控制功能,可以完成现成的数据采集以及控制,而且结构经济、方便,具有广泛的现实应用价值。

1. 利用Modem和公用电话网实现,对于降低成本具有实际意义。
电话网在各地都已经建立,通过Modem充分利用现成的公用电话网(PSTN)作为通信信道进行数据通信则是最经济、最方便和最可靠的方法。当前,现代电话通信网已经进入程控交换时代,它具有技术先进、速度快、容量大等优点,因此,采用电话通信网建立数据通信系统确实具有其独特的优越性,它无须新建数据专线,从而减低成本,提高了经济效益。
2. 研究PC机与单片机的Modem通信进一步开拓了串行通信的发展领域。
串行数据通信以其独特的优势在当今工程应用中占有非常重要的地位,51系列单片机提供了可方便与计算机或其他串行设备连接的异步通信口。串口常用作PC机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。依据不同的条件实现对串口的灵活编程控制是我们所需要的。串行通信虽然传送速度相对较慢,但是传送成本低,对实现监视和控制,具有足够的带宽,并且没有过于复杂的编解码,实现自定义的协议也不复杂。研究PC机与单片机的通信,正是建立在串行通信的理论基础之上,同时通过软件硬件的扩展可使串口方便地接入以单片机为核心的各种设备,进一步开拓了串行通信的发展领域,因而在工业自动化、通信和遥控等领域的应用十分广泛。

3. 系统应用于工业自动化的同时,对于日常生活中的数据采集、远程监控、
医疗等领域也有一定价值。
PC机与单片机的Modem 通信系统可用于实现简单实用的温度实时采集系统。远程采集用户室内温度,检测供热质量,远程室内温度采集监测中心通过电话拨号的方式将热用户的室内温度采集上来,在一定程度上减少由于室内温度过高造成的浪费;利用基于Modem的PC机和单片机串行通信也可制作家用多功能电话报警器,通过接收多种传感器的信号而构成多种警情,如燃气,火警,盗窃,漏水等,并自动拨通小区管理监控端的电话号码或发出传呼信息,提示值班人员立即处理,达到实时监控的目的;除此以外,随着人们对家居医疗方式需求的强烈增加,基于Modem的PC机与单片机的数据通信就恰好成为其中应用的关键。在单片机中嵌入具有可靠性的心电信号远程传输功能,使用户可以在家中利用电话将心电信号准确传输到医院,并及时获取医生的诊断信息,不但成本低,传输速率高,还在一定程度上减轻医院应诊的负担,是未来发展的趋势【2】。

1.3 本文研究的主要内容及结构安排
第一章 绪论
主要介绍研究基于Modem的PC机和单片机串行通信的背景与发展现状,并讲
述利用Modem和公用电话网开发PC机与单片机通信系统的目的,以及在各领域的应用意义。
第二章 基于Modem的PC机与单片机通信实现
这一章详细论述基于Modem的PC机与单片机通信系统的实现,分别从理论基础、研究方法等方面分析整体方案的思路、硬件设计和软件设计。首先介绍整体方案的构思和各个模块的功能,然后分别从硬件、软件的角度分析整个系统的设计。硬件部分介绍了系统所选用的各种器件及其工作原理,包括RS-232串行接口、AT89S51单片机和电平转换芯片MAX232,其中如何把握它们之间的接口电路是设计的关键;软件部分则首先介绍Modem的工作方式及其使用AT指令控制Modem的方法,然后详细讲述了MSComm控件的使用,最后分析程序的流程以及程序中具体每个步骤应用的方法与事件。
第三章 系统应用——自动报警系统
讲述通信系统在自动报警方面的具体应用。这部分是对研究课题的理论应用,
把前文所实现的PC机与单片机串行通信系统应用到实际家居在无人看管下的自动报警。同样使用从理论到方法的阐述,具体谈到了自动报警系统硬件软件的具体设计。硬件电路除基本的PC机与单片机通信器件以外,还添加了红外线传感器和音频放大器,用于检测信号与播放报警音,软件方面主要介绍了来电显示和查询数据库两个主要功能模块的程序设计。最后给出了系统运行的界面,并对其用法作详细说明。
第四章 结论
讲述对基于Modem的PC机与单片机通信系统各方面的评价,以及对系统未来的发展趋势作展望。最后谈谈这次毕业设计的总结和心得体会。

第二章 基于Modem的PC机与单片机通信实现
2.1 整体设计方案
2.1.1 系统组成框图
本系统主要由单片机、远程PC机和公用电话网三个部分构成。系统总体结构框图如图2.1所示【3】。

2.1.2 各模块说明
1.单片机部分
单片机部分包括AT89S51单片机、MAX232电平转换器、RS-232C串行接口以及硬件接口电路,其中控制部分使用AT89S51单片机,MAX232将单片机输出的TTL/CMOS电平转换为RS-232电平,然后由串行通信接口RS-232接入Modem,通过公用电话网将数据传输到远程PC机。

2.PC机部分
该部分的软件使用Visual Basic6.0语言编写,通过Modem的AT指令实现自动摘机、拨号和挂机等功能,利用MSComm控件实现数据的发送与接收,并显示在运行界面。

3.公用电话网
使用公用电话网或内部电话网进行远程通信,减少了架线过程,使用Modem与公用电话网或内部电话网组成的通信系统进行数据传输,具有可靠性高,通信成本低的特点。对于机关、团体及企事业单位,使用内部电话网,可使成本大大降低。

2.2 系统硬件设计
PC机与PC机之间,或PC机与数据通信设备之间的数据传送可以采用串行或并行二种通信方式。串行通信是指通信的发送方和接收方之间数据信息的传输是在单根数据线上,以每次一个二进制的01为最小单位进行传输。这种通信方式使用的数据线较少,在远距离通信中可以节约成本。串行通信的传输速度要比并行通信慢得多,但串行通信可显著降低通信线路的价格和简化通信设备,并可利用现有的电话电缆线路,在任何两点通电话的设备之间,配置适当的通信接口实行串行通信。串行通信方式由于具有使用线路少、成本低等特点,因此在数据远程传输时使用的最多【4】。

2.2.1 RS-232串行接口标准
在串行通信时,要求通信双方都采用一个标准接口,使不同的设备可以方便地连接起来进行通信。RS-232-C接口(又称RS-232)是目前常用的一种串行通信接口。RS-232被定义为一种在低速率串行通信中增加通信距离的单端标准。RS-232采用不平衡传输方式,即收/发端的数据信号是相对于信号低,如从发端设备发出的数据使用DB9连接器时是2脚相对7脚(信号地)的电平。
典型的RS-232信号电平在正负电平之间摆动,在发送数据时,发送端驱动输出正电平为+5V~+15V、负电平为-5V~-15V。当无数据传输时,线上为TTL电平,从开始传送数据到结束,线上电平从TTL电平到RS-232电平再返回TTL电平。接收器典型的工作电平为+3V~+12V与-3V~-12V。由于发送电平与接收电平的差仅为2V~3V左右,所以其共模抑制能力差,再加上双绞线上的分布电容,其传输距离最大约为15m,最高速率为20kBits/s。RS-232是为点对点(即只用一对收、发设备)通信而设计的,其驱动负载为3kΩ~7kΩ。所以RS-232适合本地设备之间的通信【5】。

2.2.2 AT89S51单片机介绍
1.单片机比较选择
Atmel公司所生产的AT89系列单片机是与8051系列兼容、且内部含有Flash存储器(闪存存储器)的单片机,它是一种源于8051而又优于8051系列,是目前主流的MCS-51单片机。所以本文选择了AT89系列的两种型号单片机AT89C51与AT89S51作比较。
AT89C51是一种带4K字节闪烁可编程可擦除只读存储器(FPEROM—Flash Programmable and Erasable Read Only Memory)的低电压,高性能CMOS 8位微处理器,采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。
AT89S51与AT89C51相比,外型管脚完全相同,AT89C51的程序无须任何转换可直接在AT89S51运行,结果一样。AT89S51比AT89C51新增了一些功能,支持在线编程和看门狗是其中主要特点。
89S51相对于89C51增加的新功能包括:
(1) ISP在线编程功能,优势在于改写单片机存储器内的程序不需要把芯片从工作环境中剥离,是一个强大易用的功能;
(2) 工作频率更高:89C51的极限工作频率为24M,而89S51最高工作频率为33MHz;抗干扰性更强:内部集成看门狗计时器,而89C51需要外接看门狗单元电路;
(3) 全新的加密算法,大大加强了程序的保密性,可有效保护知识产权;兼容性方面:向下兼容51系列产品;
(4) 市场价格:由于89C51已经全面停产,其库存的批发价要比89S51贵将近一倍!
比较结果:从功能、价格方面考虑,89S51功能更强大,性价比高,在线编程使用方便,更适合本设计应用。所以选择AT89C51作为核心单片机【6】。

2.所选单片机——AT89S51的介绍
AT89S51是美国ATMEL公司生产的低功耗,高性能 CMOS8位单片机,片内含 4k 的可系统编程的Flash只读程序存储器,采用高密度、非易失性存储技术生产,兼容标准 8051 指令系统及引脚。它集Flash 程序存储器及通用 8 位微处理器于单片芯片中,既可在线编程(ISP)也可用传统方法进行编程及,内部集成看门狗电路,提高了系统的稳定性。AT89S51可灵活应用于各种控制领域。其管脚如图2.2所示【6】。

2.2.3 MAX232介绍
由于PC机采用的是RS-232标准信号,而AT89S51单片机采用的是TTL电平信号,所以使用单片机进行串行通信时,必须通过MAX232进行接口电平转换。
MAX232是一种双组驱动器/接收器,片内含有一个电容性电压发生器以便在单SV电源供电时提供ERRS-232-C接口电平。每个接收器将ERRS-232-C电平输入转换为5V TTL/CMOS电平。这些接收器具有1.3V的典型门限值及0.5V的典型迟滞,而且可以接收+30V的输入。每个驱动器将TTL/CMOS输入电平转换为ERRS-232-C电平。其管脚如图2.3所示【7】。

2.2.4 电路原理说明
本设计中使用AT89S51单片机通过MAX232电平转换,控制Modem完成数据的发送和接收。具体电路原理图如图2.4所示【4】。

图2.4 单片机接口电路原理图
单片机串行接收端RXD、发送端TXD分别对应AT89S51的P3.0和P3.1口,DTR信号和CD信号分别对应AT89S51的P3.2和P3.5口。
MAX232分别与AT89S51和Modem的RS-232串口的连接如下:T1IN、T2IN可直接接TTL/CMOS电平的AT89S51单片机串行发送端TXD;R1OUT、R2OUT可直接接TTL/CMOS电平的AT89S51单片机串行接收端RXD;T1OUT、T2OUT可直接接Modem的RS-232串口的接收端RXD;R1IN、R2IN可直接接Modem的RS-232串口的发送端TXD。
Modem的RS-232串口上需要使用TXD、RXD、CD和DTR四个端口,其中CD载波信号由Modem发送给单片机,作为单片机发送、接收数据的依据,只有线路上有载波的条件下才能发送和接收数据。DTR信号由单片机发送给Modem,作为Modem初始化的使能信号。单片机的TXD信号送串口的RXD端口,RXD端口接收串口TXD发送的数据,完成数据的发送和接收。

2.3 系统软件设计
2.3.1 使用Modem实现串行通信的方法
1. Modem工作方式与AT指令简介
PC 机与单片机通过数据通信设备Modem进行通信,Modem工作有命令和在线两种状态。
(1) 命令状态
是指通信线路上的两个Modem还没有建立起连接的状态。处于命令状态下的
Modem会把PC机发往串口的信息当成指令来执行。因此,在命令状态下,PC机可通过串口向Modem发送指令对其进行初始化、设置和操作。
(2) 在线状态
是指通信线路上的两个Modem建立起连接后的状态。在Modem连接方式中,TXD和RXD信号线用于PC机和Modem间传输数据信息;RTS从PC机端发送信号到Modem,表示希望把数据传给Modem。若Modem能接收这个数据,它将发送CTS信号给PC机;DTR从PC机端发送信号到Modem,表示PC机已作好通信准备,Modem将DTR信号作为初始化信号,然后给PC机回送数据设置就绪信号DSR;当本地Modem接收到远地Modem的呼叫时,则发送RI信号给PC机;Modem应答呼叫后,发送数据载波检测CD信号到PC机,表示己建立连接。上述过程虽然复杂,但都是由Modem和PC机间自动完成的。
一旦本地Modem与远方Modem建立连接,Modem即自动进入在线状态,此后双方就可以进行数据传输了。由在线状态转为命令状态要通过PC机向Modem发送转换指令来实现。
PC机要通过AT指令控制Modem工作。任何与Hayes兼容的Modem都可接受这些指令。有了AT指令,Modem从最基本的音量控制到复杂的内置参数改变,都可以由PC机通过串口发送指令来完成【8】。

2. Modem的初始化
Modem初始化用来完成对拨号方式的选择,振铃响多少次自动摘机,是否回应指令,是否返回结果码以及是否打开扬声器等操作。Modem初始化工作在单片机部分通过使用汇编语言向Modem写入相应的AT指令完成。在PC机中使用MSComm控件的Output属性通过串口向Modem写入相应的AT指令完成。
本设计中使用”ATE1Q0V1W0SO=1&C1&D2″ 指令初始化Modem,其含义为回应指令、以文本形式返回结果码、不返回协商进程结果码、振铃响1次后摘机、追踪载波信号CD、Modem挂机进入命令状态并发送结果码OK。

3. 数据的发送
单片机部分的编程步骤为摘机、拨号、等待线路上的载波、载波出现后发送数据;PC机的编程所以步骤为拨号、等待线路上的载波信号、载波出现后发送数据,由于使用了自动摘机功能,所以PC机省略了摘机的过程。其中摘机和拨号过程由单片机或PC机向Modem发送相应的AT指令完成的,摘机的AT指令为“ATH1”,拨号的AT指令为“ATDT+电话号码”。

4. 数据的接收
数据的接收在单片机部分的编程步骤为等待线路上的载波信号,载波出现后接收数据,挂机;PC机的编程步骤为接收数据,挂机。其中挂机过程由单片机或PC机向Modem发送相应的AT指令完成的,挂机的AT指令为“A+++,ATHO”。

2.3.2 使用VB6.0的MSComm控件实现串行通信的方法
1.MSComm控件的介绍
Visual Basic 6.0(以下简称VB6.0) 是一种功能强大、简单易学的程序设计语言。它不但保留了原先Basic语言的全部功能,而且还增加了面向对象程序设计功能。不仅可以方便快捷地编制适用于数据处理、多媒体等方面的程序,而且利用ActiveX控件MSComm还能十分方便地开发出使用计算机串口的计算机通信程序。
MSComm控件是VB6.0中专门用来串行通信的控件,它提供了一系列标准通信命令的接口,允许建立串口连接,并通过串行端口传输和接收数据,可以连接到其他通信设备(如Modem),还可以发送命令、进行数据交换以及监视和响应在通信过程中可能发生的各种错误和事件,从而可以用它创建全双工 、事件驱动的、高效实用的通信程序。

2. MSComm控件处理通信的方式
MSComm有两种通信处理方式:事件驱动方式和查询方式。
事件驱动通信是处理串行端口交互作用的一种非常有效的方法。在许多情况下,在事件发生时需要得到通知,例如,在串口接收缓冲区中有字符,或者CD或RTS线上一个字符到达或一个变化发生时。在这些情况下,可以利用MSComm控件的OnComm事件捕获并处理这些通信事件。OnComm事件还可以检查和处理通信错误。在编程过程中,就可以在OnComm事件处理函数中加入自己的处理代码。这种方法的优点是程序响应及时,可靠性高。每个MSComm控件对应着一个串行端口。如果应用程序需要访问多个串行端口,必须使用多个MSComm控件。
查询方式实质上还是事件驱动,但在有些情况下,这种方式显得更为便捷。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事件和错误。如果应用程序较小,并且是自保持的,这种方法可能是更可取的。例如,如果写一个简单的电话拨号程序,则没有必要对每接收一个字符都产生事件,因为唯一等待接收的字符是Modem的“确定”响应。

3. MSComm控件的常用属性
CommPort :设置并返回通信端口号;
Settings :以字符串的形式设置并返回波特率、奇偶校验、数据位、停止位;
PortOpen :设置并返回通信端口的状态。也可以打开和关闭端口;
InputMode:设置或返回接收数据的类型;
Inputlen: 设置或返回一次从接收缓冲区中读取字节数;
InBufferSize: 设置或返回接收缓冲区的大小,缺省值为1024字节;
InBufferCount:设置或返回接收缓冲区中等待计算机接收的字符数;
Input: 从接收缓冲区中读取数据并清空该缓冲区;
OutBufferSize: 设置或返回发送缓冲区的大小,缺省值为512字节;
OutBufferCount:设置或返回发送缓冲区中等待计算机发送的字符数;
Output: 向发送缓冲区发送数据;
Rthreshold:当接收缓冲区中字符数达到该值时,MSComm控件设置Commevent属
性为ComEvReceive,并产生OnComm事件。用户可在OnComm事件处理程序中进行相应处理。若Rthreshold属性设置为0,则不产生OnComm事件;若Rthreshold属性设置为1,接收缓冲区中每接收到一个字符,就产生一次OnComm事件;
Sthreshold:当发送缓冲区中字符数小于该值时,MSComm控件设置Commevent属性为ComEvSend,并产生OnComm事件。若Sthreshold属性设置为0,则不产生OnComm事件;
CommEvent: 这是一个非常重要的属性。在设计时无效,运行时只读。一旦串口发生通信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,同时产生OnComm事件。用户程序就可在OnComm事件处理程序中针对不同的代码,进行相应的处理【9】。

2.3.3 PC机流程框图及程序设计
1.程序功能与流程框图
程序的功能:PC机通过Modem发送命令拨打单片机的电话号码,单片机检测载波后建立连接,PC机通过MSComm控件接收、发送数据并在运行界面显示,数据传输完毕后由PC机发送挂机信号。本设计采用查询方式实现,具体程序框图如图2.5所示。

2.实现步骤
(1)创建窗体
 添加MSComm控件,用来建立与串口的连接;
 添加两个名为receivetext和sendtext的TextBox控件,用于存放接收与发送的数据;
 添加四个CommandButton控件,名为Call、Hang、Receive、Send,分别用来实现拨号、挂机、接收数据、发送数据;
(2)设置MSComm控件属性
 InBufferSize=1024;
 InputLen=0;
 Rthreshold=0;
 RSTEnable=False;
 Settings=“9600,n,8,1” ;
 Sthreshold=0。
(3)主要事件与方法
①串口和Modem的初始化
PC机对串口进行初始化,以决定其异步串行通信的数据格式、传输速率、控制方式等设置。初始化Modem的AT命令为”ate1q0v1w0s0=1&c1&d2+Chr(13)”。
详细程序如下:
‘初始化串口、Modem
Private Sub Form_Load()
MSComm1.CommPort = 1 ‘ com1口通信
If MSComm1.PortOpen = False Then
MSComm1.Settings = “9600,n,8,1″
‘波特率9600,无校验,8位数据位1位停止位
MSComm1.RThreshold = 0
‘返回Modem命令时暂不产生MSComm-Ev-Receive事件
MSComm1.PortOpen = True ‘ 打开串口
MSComm1.Output = “ate1q0v1w0s0=1&c1&d2″ & Chr$(13)‘ 初始化Modem
End If
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0
End Sub
②拨号
由CallCommandButton发送Modem拨号命令“atdt+单片机电话号码+Chr(13)”
Private Sub Call_Click()
MSComm1.Output = “atdt” & phonenumber$ & Chr$(13)
Do
DoEvents
Loop Until MSComm1.OutBufferCount = 0
End Sub
③数据的接收
首先应当检测缓冲区是否有待接收的数据,如果有,若是Modem返回的CONNECT信息,PC机通过MSComm控件读取收到的数据,并在名为receivetext的TextBox中输出显示。
Dim time1 ‘定义时间变量
Private Sub Receive_Click()
Select Case MSComm1.CommEvent
Case comEvReceive ‘若缓冲区有数据待接收
MSComm1.InputLen = 0 ‘读取接收缓冲区中全部的内容
If MSComm1.InBufferCount > 0 Then
time1 = Timer ‘把当前时间值赋给time1
While Timer – time1 < 0.5 ‘延时
DoEvents
Wend
receivetext.Text = MSComm1.Input‘接收数据并在TextBox输出
End If
End Select
End Sub
④数据的发送
首先应当检测CD载波信号是否有效,接下来检测发送器保持寄存器,看其是否为空,只有为空时可向发送保持寄存器发送sendtext文本框里输入的字符。
Private Sub Command1_Click()
time1 = Timer
Do While Timer - time1 < 30
DoEvents
If MSComm1.CDHolding Then GoTo CD_Ture
Loop
MsgBox ("未检测到载波信号!")
MSComm1.Output = "+++,ath" & Chr$(13)
Exit Sub
CD_Ture:
MSComm1.Output = sendtext.Text
End Sub
⑤挂机退出
由HangCommandButton发送Modem挂机命令“+++ath+Chr(13)”,然后关闭串口,完成整个PC机与单片机通信过程。
Private Sub Hang_Click()
If MSComm1.CDHolding = True Then
MSComm1.DTREnable = False
MSComm1.Output = "+++ath" & Chr$(13) ‘ Modem挂机指令
End If
End Sub
Private Sub exit_Click()
MSComm1.PortOpen = False ‘ 关闭串口
End Sub
(4) 使用说明
程序运行的界面如图2.6所示。

图2.6 基于Modem的PC机与单片机通信运行界面
首先按“拨号”键,PC机通过Modem拨单片机的电话号码,按下“接收”键,等待接收数据文本框返回“CONNECT”信息,表示PC机与单片机已建立连接,如图2.7所示。若5秒内检测不到拨号音返回“NO DIAL TONE”信息,若检测到忙音将返回“BUSY”信息,此时应该重新按“拨号”键。

图2.7 建立连接
确认建立连接以后,在发送文本框键入“请输入要发送数据!”,按“发送”键,如图2.8所示。

图2.8 发送数据
若在30秒内没检测到载波,无法发送,将弹出对话框提示用户“未检测到载波信号”,如图所示2.9所示。此时发送数据失败,重新按“发送键”要想接收对方的数据,可直接按“接收”键。数据传输完毕,按“挂机”键,Modem挂机,断开与单片机的连接。

2.3.4 单片机流程框图及程序设计
单片机采用中断方式进行数据传送。当接收到PC机发来的拨号信号时,单片机向PC机发送已接收信号“R”表示准备好,这样双方握手通信完成,可以进行数据交换,PC机发送1帧数据,单片机则响应中断,接收数据。单片机程序的具体实现过程如下:
方式1是10位异步通信方式,其中包括1个起始位,8个数据位和1个停止位。波特率由定时器T1的溢出率和串口控制寄存器SMOD的状态确定,在CPU的晶振为11.0592MHz时,波特率采用9600b/s。
对SBUF进行写操作就可启动发送,在发送移位时钟的同步下,从TXD先送出起始位,然后是8位数据位,最后是停止位,这样,1帧数据发送完,中断标志TI置位。
在允许接收的条件下(REN=1),当RXD出现由1到0的负跳变时,即被当成是串行发送来的1帧数据的起始位,从而启动1次接收过程。当8位数据接收完,并检测到高电平停止位后,即把收到的8位数据装入SBUF,置位RI,1帧数据的接收过程就完成了。单片机程序流程框图如图2.10。

;单片机串口初始化
ORG 0000H
AJMP MAIN
ORG 0023H ;串行中断口
LJMP S&R
ORG 0100H
MAIN: MOV TMOD,#20H ;设置定时器T1方式2
MOV PCON,#00H ;使SMOD为0
MOV TL1 ,#0FDH ;晶振11.0592MHz,波特率为9600b/s
MOV TH1 ,#0FDH
SETB EA ;开全局中断
CLR ET1 ;关T1中断
SETB ES ;开串行中断
SETB TR1 ;开T1定时
MOV SCON,#50H ;串行方式1,允许接收
LOOP: SJMP LOOP ;等待
S&R: CLR EA ;CPU关中断
MOV C,RI
CLR RI ;清除中断标志
PUSH DPH ;保护现场
PUSH DPL
;Modem复位命令
FF: MOV SBUF,# 'A' ;写“A”
FW1: JNB TI, FW1
CLR TI
MOV SBUF,# 'T' ;写“T”
FW2: JNB TI, FW2
CLR TI
MOV SBUF,# 'Z' ;写“Z”
FW3: JNB TI, FW3
CLR TI
MOV SBUF,#ODH ;写“
FW4: JNB TI, FW4
CLR TI
;检测CD载波
CD_TURE: MOV A,P3 ;P3口锁存寄存器
AND A,#20H ;提取P3.5位到A
JNZ CD_TURE ;A非0转移,检测CD载波是否有效
;数据的发送与接收
JC RECEIVE ;RI为1,执行接收子程序
SJMP SEND ;否则,执行发送子程序
RECEIVE: MOV A,SBUF ;接收数据
CLR RI
SJMP DONE
SEND: MOV @R0, A ;发送数据,R0为存放数据的地址
MOV SBUF,A
JNB TI,$
CLR TR
INC R0
DONE: POP DPL
POP DPH
SETB EA ;开中断
RETI ;中断返回
;Modem 挂机
MOV SBUF ,# ‘A’ ;写“A”
GJ1: JNB TI, GJ1
CLR TI
MOV SBUF ,#’T’ ;写“T”
GJ2: JNB TI , GJ2
CLR TI
MOV SBUF, #‘H’ ;写“H”
GJ3: JNB TI, GJ3
CLR TI
MOV SBUF ,#ODH ;写“
GJ4: JNB TI, GJ4
CLR TI
JMP FF ;返回Modem复位命令
END

第三章 系统应用——自动报警系统
3.1 系统概述
3.1.1 应用背景与意义
随着生活水平的不断提高,特别是物质生活水平的提高,人们越来越重视自己的个人和财产安全,安全意识在不断增强;同时,经济的飞速发展伴随着城市流动人口的急剧增加,给城市的社会治安增加了新的难题,要保障家居的安全,防止偷抢事件的发生,就必须有自己的安全防范系统,人防的保安方式难以适应我们的要求,家用防盗报警系统建设已成为当前的发展趋势。
建立一个完善的智能化家居,确保户主的财产生命的安全,是防盗自动报警系统应用最大的意义。本设计研究旨在制作出一种用于家居的防盗报警系统,在出现紧急情况时能及时通知户主,即便其不在现场附近,并自动呼叫报警。

3.1.2 系统功能简介
本系统在基于Modem的PC机与单片机通信的基础上,扩展成利用公用电话网实现的自动报警系统。现假设有一个小区,在小区的物业管理中心设置一台监控PC机,里面的自动报警系统登记了小区内所有住户基本资料并已生成Access数据库,其中包括户主姓名、地址、联系电话等信息,在户主办公室的PC机也有同样的自动报警系统,区别在于没有设置用户资料数据库。
自动报警器安放在住户的家中较隐蔽处,户主外出前启动报警器。当有人非法闯入时,报警器自动拨号到物业管理中心和户主办公室两端。物业管理中心监控PC机根据来电显示查询到住户的基本信息,值班人员可尽快立即处警,用户在办公室也可在同一时间接收到报警信息。两端都可通过PC机控制报警器播放报警音阻吓闯入者。

1.系统的整体功能
① 红外线传感器实现实时监控与信号检测;
② 当红外线传感器检测到有人闯入监视区域内时,发出报警信号到单片
机,单片机控制Modem自动摘机、拨号到小区物业管理处及住户的办公室;
③ 当有报警信号时,小区物业管理或户主办公室PC机通过Modem检测到振
铃可自动摘机,与单片机建立连接;
④ 小区物业管理或户主办公室PC机利用Modem的来电显示功能,输出报警
电话号码,小区物业管理可根据电话号码从数据库中调出更多的用户信息(如户主、地址、联系电话等),以便保安人员迅速处警,也可供日后查询。
⑤ 小区物业管理或户主办公室PC机通过Modem向远程单片机发送报警成功的确认信息“OK”,单片机收到后控制放音电路驱动扬声器播放报警音阻吓闯入者。

2.本设计要解决的问题
① 单片机部分
解决红外线传感器的报警信号电平的触发和单片机控制报警放音信号,重点
解决单片机软件编程里信号控制问题和控制Modem进行远程通信的设计。
② 监控PC机部分
解决监控PC机利用Modem来电显示和整理输出,重点解决监控PC机控制
Modem进行远程通信的软件编程以及利用来电显示查询数据库报表输出等处理问题。
③ 整个系统通信的软件、硬件联调问题。

3.2 硬件电路构成及工作原理
3.2.1 系统原理结构框图
系统原理结构框图如图3.1所示。

用户端自动报警器

系统主要由用户端的自动报警器、小区物业管理监控PC机和户主办公室PC机三个部分组成。用户端的报警器包括红外线传感器、放音电路、单片机接口电路以及Modem。接口电路用于提供单片机与Modem的接口及传感器的信号输入接口。当报警电路检测到有非法闯入时,有效电平输入单片机,经电平转换为RS-232电平控制Modem复位、拨号监控端PC机的电话号码,把报警信号发送到监控端PC机,物业管理或户主办公室的PC机指示单片机驱动放音电路扬声器发出报警音阻吓闯入者。

3.2.2 主要电路分析
自动报警系统是在PC机与单片机基于Modem通信的基础上扩展功能硬件电路实现的。主要包括AT89S51单片机电路、报警电路、放音电路以及电平转换芯片。AT89S51单片机和电平转换芯片MAX232已在前文作过介绍,以下主要展开对其余功能电路的分析。
1. 报警电路
用户端报警器安装于用户住所较隐蔽处,由红外线传感器、信号放大电路、电压比较器等电路组成,如图3.2所示。本系统采用热释电红外线传感器P2288(IC1)进行探测,它是一种仅对人体辐射的9~10微米的红外线敏感的半导体器件,与菲涅尔透镜和放大电路配合使用可探测出10~20米处人的行动。菲涅尔透镜置于探测器的前方适当位置,其原理是用来产生一个交替的“盲区”和“高灵敏区”。当有人从透镜前走过时,人体发出的红外线就不断从“盲区”进入“高灵敏区”,这样就产生大量的光脉冲进入热释电红外线传感器,从而提高了它的接收灵敏度。

图3.2 报警电路原理图
红外线探测传感器IC1探测到前方人体辐射出的红外线信号时,由IC1的②脚输出微弱的电信号,经三极管VT1等组成第一级放大电路放大,再通过C2输入到运算放大器IC2中进行高增益、低噪声放大,此时由IC2①脚输出的信号已足够强。IC3作电压比较器,它的第⑤脚由R10、VD1提供基准电压,当IC2①脚输出的信号电压到达IC3的⑥脚时,两个输入端的电压进行比较,此时IC3的⑦脚由原来的高电平变为低电平。IC4为报警延时电路,R14和C6组成延时电路,其时间约为1分钟。当IC3的⑦脚变为低电平时,C6通过VD2放电,此时IC4的②脚变为低电平,它与IC4的③脚基准电压进行比较,当它低于其基准电压时,IC4的①脚变为高电平,输出报警信号到单片机引脚P1.0。
人体的红外线信号消失后,IC3的⑦脚又恢复高电平输出,此时VD2截止。由于C6两端的电压不能突变,故通过R14向C6缓慢充电,当C6两端的电压高于其基准电压时,IC4的①脚才变为低电平。该装置采用9-12V直流电源供电,由T降压,全桥U整流,C7滤波。本装置交直流两用,自动无间断转换【10】。

2. 放音电路
LM386N1是音频功率放大器,为使外围元件最少,电压增益内置为20。但在1脚和8脚之间增加一只外接电阻和电容,便可将电压增益调为任意值,直至200。输入端以地位参考,同时输出端被自动偏置到电源电压的一半,在6V电源电压下,它的静态功耗仅为24mW,使得LM386特别适用于电池供电的场合。电路特性为静态功耗低,约为4mA,可用于电池供电。工作电压范围宽,约为4V~12V,且外围元件少,电压增益可调,失真度低。 其详细电路如图3.3所示【11】。

图3.3 放音电路原理图
3.3 报警系统软件设计
3.3.1 单片机流程框图及程序设计
单片机部分程序主要通过汇编语音编程,控制AT89S51的P1各端口高低电平从而达到自动报警的目的。与PC机和单片机通信程序相比,报警系统以单片机作为主动发起拨号连接端,故单片机程序无需检测CD载波,改为监视连接传感器的P1.0口,有信号则主动拨号监控端PC机。
系统的具体实现步骤如下:用户外出前启动报警系统进入工作状态,单片机首先运行串口初始化,Modem复位子程序,进入监控状态。当红外传感器检测到一个高电平时,表示有报警信号输入,系统自动摘机,拨小区物业管理和户主办公室PC机的电话号码。当任一端PC机象单片机发送报警成功信号,单片机的P1.1口给一个高电平信号,触发放音电路自动播放报警音。报警结束后,单片机的口给一个低电平信号,系统自动挂机,完成整个报警过程。
报警系统单片机软件流程图如图3.4所示。

N

Y

N

单片机串口、Modem初始化与拨号程序已在第二章(2.3.4)作过介绍,以下分析其余功能模块的程序设计。
1. 监控子程序
单片机AT89S51的P1.0口连接红外传感器输出端,通过检测P1.0为电平的高低判断是否实施自动报警,监控子程序如下:
JC: MOV A, P1 ; P1口锁存寄存器
AND A, #01H ; 提取P1.0位到A
JNZ JC ; A非0转移

2. 放音子程序
由单片机AT89S51的P1.1口输出1KHz和500Hz的音频信号驱动扬声器,作音频报警信号,1KHz信号响100ms,500Hz信号响200ms,高低音交替进行。单片机AT89S51中的P1.1口连接到“音频放大模块”区域中的SPK IN端口上;在“音频放大模块”区域中的SPK OUT端口上接上一个8欧的或者是16欧的喇叭【12】。
详细程序如下:

FLAG BIT 00H
START: JNB FLAG, NEXT
MOV R2, #200 ; 置200次计数
DV: CPL P1.1 ; P1.1输出取反
LCALL DELY500 ; 延时500μs
LCALL DELY500
DJNZ R2, DV ; 计数是否完毕
CPL FLAG
NEXT: MOV R2, #200 ; 置200次计数
DV1: CPL P1.1
LCALL DELY500 ; 延时1ms
DJNZ R2, DV1 ; 计数完毕?
CPL FLAG
SJMP START
DELY500: MOV R7, #250
LOOP: NOP
DJNZ R7, LOOP
RET
END

3. 看门狗子程序
为提高系统的稳定性,避免在无人看管下导致单片机“死机”,系统使用AT89S51的看门狗定时器功能。在程序初始化中向看门狗寄存器(WDTRST地址是0A6H)中先写入01EH,再写入0E1H。即可激活看门狗。
ORG 0000
LJMP BEGIN
BEGIN: MOV 0A6H, #01EH ;先送1E
MOV 0A6H, #0E1H ;后送E1
;在程序初始化中激活看门狗
……
……
FOR: ……
MOV 0A6H, #01EH ;先送1E
MOV 0A6H, #0E1H ;后送E1
;喂狗指令
……
LJMP FOR

3.3.2 PC机流程框图及程序设计
PC机软件用VB6.0进行设计,下面以小区物业管理处PC机为例作详细分析。
程序主要包括串口与Modem初始化、来电显示、自动查询数据库三大模块。设计关键为来电信息的捕捉。
方法与PC机和单片机的串行通信设计相同,Modem的通信使用控件MSComm,
对Modem的控制使用AT指令去实现。PC机除了要完成串口和Modem初始化以外,还要从Modem所对应的串行口接收来电显示信息,通过格式整理输出,并以提取出的电话号码为索引,从事先建立好的数据库中调出详细的报警信息,如报警地点、联系人、联系电话等,并显示到PC机显示器上,供值班人员对警情立即进行处理。
软件设计流程图如图3.5所示。

1. 来电显示模块
首先系统所用的Modem必须满足两个条件:
一. Modem本身支持来电显示;
二. 所用的电话已在电信局申请了来电显示功能。
Modem激活来电显示的AT命令为“at+cid=1”。接收的来电显示信息的
格式为“DATE=MMDD
TIME=HHMMNMBR=电话号码”。通过一系列字符函数把来电显示格式整理后在ListBox输出,格式为
报警时间是:MMDD HH:MM
电话号码是:########
’来电显示的接收与格式整理
Private Sub MSComm1_OnComm()
Dim inStrData As String, tm As String
Dim iPos As Integer
Select Case MSComm1.CommEvent
Case comEvReceive ’有数据待接收
inStrData = MSComm1.Input & MSComm1.Input ’格式整理
iPos = InStr(inStrData, “TIME=”)
If iPos > 0 Then
tm = Mid(inStrData, iPos + 5, 4)
tm = Left(tm, 2) + “:” + Right(tm, 2) ’tm为报警时间
End If
iPos = InStr(inStrData, “NMBR=”)
If iPos > 0 Then
inStrData = Right(inStrData, Len(inStrData) – iPos – 4)
’输出报警时间与电话号码
lstPhone.AddItem “报警时间是:” & Date & ” ” & tm
lstPhone.AddItem “电话号码是:” & inStrData
End If
End Select
End Sub

2.自动查询数据库模块
主要功能:监控端的PC机预先创建住户资料数据库,包含小区内管理的单位住户的地址、户主、联系电话等。当有警情发生时,利用使用DataGrid控件来电显示作为数据库的索引把相关的户主资料立即调出显示,让值班人员及时处理。
①数据库的建立
本系统利用VB6.0可视化数据库管理器创建一个Access数据库,文件名为
E:\住户资料.mdb,表名为“住户基本情况表”,表中登记了小区住户的户主姓名、地址、联系电话和报警电话。住户基本情况表的编辑如图3.6所示。

图3.6 住户信息管理界面
编辑后生成的Acess数据库如图3.7所示。

图3.7 住户基本情况表

②对数据库的查询
对数据库的查询使用DataGrid控件实现。
DataGrid控件是一种类似于电子数据表的绑定控件,可以显示一系列行和列来表示Recordset对象的记录和字段。可以使用DataGrid 来创建一个允许最终用户阅读和写入到绝大多数数据库的应用程序。DataGrid控件可以在设计时快速进行配置,只需少量代码或无需代码。当在设计时设置了DataGrid控件的DataSource属性后,就会用数据源的记录集来自动填充该控件,以及自动设置该控件的列标头。然后就可以编辑该网格的列;删除、重新安排、添加列标头、或者调整任意一列的宽度, 在运行时,可以在程序中切换DataSource来察看不同的表,或者可以修改当前数据库的查询,以返回一个不同的记录集合【14】,窗体上的DataGrid控件如图3.8所示。

图3.8 窗体上的DataGrid控件
③实现步骤:
a. 创建窗体
 添加一个MSComm控件,用来建立与串口的连接;
 添加一个ListBox控件,用来存放来电显示信息;
 添加Adodc控件,DataGrid控件,用来显示用户基本信息;
 添加一个CommandButton控件,用于报警完毕挂机退出。

b. Adodc控件属性设置
 ConnectionString= E:\住户资料.mdb
 RecordSource=select * from 住户基本情况表 where 住户基本情况表.报警电话=& inStrData

c. 主要事件与方法
‘数据库查询与显示
Private Sub DataGrid1_Click()
‘导入源数据库
Adodc1.ConnectionString=”Provider=Microsoft.Jet.OLEDB.3.51;Data Source=E:\住户资料.mdb;Persist Security Info=False”
‘使用报警电话号码为索引进行查询
Adodc1.RecordSource = “select*from 住户基本情况表 where 住户基本情况表.报警电话=& inStrData”
Set DataGrid.DataSource = Adodc1
DataGrid.Refresh ‘打开DataGrid控件
End Sub

‘挂机退出,并指示放报警音
Private Sub Command1_Click()
MSComm1.Output = “AT&D0H0″ & Chr(13)
‘modem断开连接并发送结果码OK,挂机
MSComm1.RThreshold = 1
End Sub

系统运行界面如图3.9

图3.9 自动报警系统运行界面
d. 使用说明
当有报警来电的时候,住户的电话号码将显示在ListBox,系统同时把查询到报警住户的户主、地址、联系电话在DataGrid控件显示,值班人员查阅报警住户的资料以后,按“退出”键是Modem挂机并发送“OK”指示报警器放报警音。
住户办公室端PC机自动报警系统界面如图3.10所示。

图3.10 住户办公室报警系统界面
住户办公室PC机的自动报警系统只有来电显示,没有数据库查询功能,所以相对简单。有报警来电时,显示报警电话和时间,用户可立即按“退出”键,指示报警器放报警音,再去处理警情。

第四章 结 论
4.1 对系统的评价与展望
4.1.1 对系统的评价
随着信息技术、PC机技术和通信技术的不断发展,PC机与单片机串行通信的技术将会越来越多地应用到各行各业中。尽管串行通信系统的种类很多,但使用Modem配合现有的公用电话网构成的PC机与单片机通信系统是一种非常有应用价值的通信方式。其特点是充分利用现有的公用电话网,由于采用自动拨号与自动应答,使得这种方式可实现无人操作,可广泛应用于工业自动化。而单片机则因其优越的性价比和灵活的功能配置可设计成数据采集、远程监控等应用系统。
本设计解决了通过Modem和公用电话网实现PC机与单片机进行远程通信的硬件设计和软件编程等关键问题,同时也实现了使用Visual Basic6.0进行串口通信。并在系统的基础上通过扩展红外线传感器、放音芯片等硬件电路制作成防盗自动报警系统,应用于小区管理时值班人员的实时监控,功能丰富,人机界面操作方便,具有较强的使用价值,加以不断的改进必将对智能小区体系的建设与发展和人民生活水平的不断提高带来积极的影响。

4.1.2 对系统的展望
使用Modem配合现有的公用电话网构成的PC机与单片机串行通信系统,由于使用PC机的串口接收和发送数据,受串行通信速率的影响,数据传输的速度不高。因此,这种方式只能用在传输数据量不是很大的场合。
由于串口数据传输速度限制,近年来新型的外部UO接口不断推出,其中USB(Universal Serial Bus,通用串口总线)是最具有代表性的外部UO接口。USIA接口的传输速率可以达到每秒12M,比串口传输速率快约100倍。USB接口还可以提供5V DC电源,低功率的USB设备不再需要另接其他的电源,同时USB接口支持热插拔,即电脑在开机状态下可实现“即插即用”。现在电脑系统连接外围设备的接口并无统一的标准,如键盘用PS/2接口,连接打印机要用25针的并行接口,鼠标则要用串行或PS/2接口。USB则将这些不同的接口统一起来,使用一个4针插头作为标准插头。通过这个标准插头,采用菊花链形式可以把所有的外设连接起来,并且不会损失带宽。目前主板一般都采用支持USB功能的控制芯片组,而且也安装了USB接口插座。目前已经有数字照相机、数字音箱、数字游戏杆、打印机、扫描仪、键盘、鼠标等很多USB外设问世。随着大量的支持USB的个人电脑的普及以及Windows98的广泛应用,USB逐步成为PC机的一个标准接口已经是大势所趋。最新推出的PC机几乎100%支持USB,另一方面使用USB接口的设备也在以惊人的速度发展。
因此,使用USB接口替代传统的串口进行通过Modem完成远程数据的发送和接收是必然的发展趋势。

4.2 结束语
4.2.1 总结和心得
经过几个月的辛苦摸索,我终于完成了毕业设计。学习的过程让我受益匪浅,感受良多!
这次设计是大学里面最后的一次学习机会,也是最重要的一次,所以我分外认真对待。从在图书馆借书的时候,我就下决心要做好毕业设计的每一个方面,每一个步骤,不让自己留一点遗憾。可是当我翻阅资料的时候却发现自己要学的东西是如此之多,找到跟我的课题有关的书里都是一大堆没听过的名词,而过去曾经学过的部分却模糊的所剩无几,感觉到自己的知识实在少的可怜啊!但我知道急是没用的,得一点一点学,一点一点努力。首先得从了解要研究的课题开始,于是我借了几本跟单片机数据通信有关的书,回去花了几天时间把单片机的使用和汇编语言的指令重新复习了一遍,开始上网搜索与串行通信有关的文章。经过导师指引,我在校园网上下载了一些跟课题有关的论文。可是发现看得懂的部分实在很少,原因是自己理论知识准备不足,所以没有捷径可以走,决定继续看书、摸索。
首要任务是完成外文翻译。找了网上很多资料,终于找到了一篇跟单片机通信有关的英文资料,马上开始翻译的工作。本来以为以自己的英语水平不难应付,真正开始的时候才发现翻译科技文章跟平时的英语阅读是两回事,对单片机没有一定的基础知识准备根本不能正确理解文章的意思,一大堆科技词汇让我不得不一边翻书一边对译。外文翻译、调研报告,经过一个月的辛苦摸索,我终于完成了所有知识准备,并且把整个系统的大体构成有了概念,基本上心中有数,当然这些都离不开指导老师和网上资料的帮助。
正式开始写代码的时候我懂得了一个道理,无论做什么事都应该投入,只有完全投入了才有可能做出成果来。在开发的过程中常会遇到一些难题,在这些日子里,我脑子了全是代码,有时连做梦的时候都在思考问题该如何解决,平时稍有一点头绪立刻上网找有关的资料。当然,碰到难题无从下手的时候是最郁闷的,而当一个个问题被突破时那种兴奋和成功感又是难以言语的。在这种高低情绪交错的过程中,我确实学到了很多东西,重要的是,经过了实践获得是真真正正自己的知识,比单纯的理论加考试更灵活、更深刻。
毕业设计是我大学里最后一次的磨练,完成了毕业设计让我更有信心去面对将来的学习与工作,同时我会进一步加强自己对系统设计等方面的知识的学习,让自己更有能力迎接未来的挑战。

参考文献
[1] 张桂涛,隋青美,刘伟洲. 基于MODEM实现单片机与PC机远程串行通信
设计[J]. 电子质量,2003(12):19~21.
[2] 柴继红,随冬梅等. 一种用于远程医疗的Modem数据通信系统[J]. 电子
设计应用,2003.7:22~25.
[3] 吴杰康,龙军. 基于MODEM的单片机俞PC继之间远程通信[J].自动化与
仪器仪表,2001(2):33~35.
[4] 程立敏. 基于MODEM远程监控系统的设计[D]:[硕士学文论文].大连:
大连理工大学,2005.
[5] 求是科技. 单片机典型模块设计实例导航[M]. 北京:人民邮电出版社,2005.310~311.
[6] 国际电子技术网.AT89S51是什么?[EB/OL].

http://info.elec.cc/Article/wclqjszl/dpj/200703/4483.html,2007-03.

[7] 宋浩,田丰. 单片机原理与应用[M]. 北京:清华大学出版社,2005.21~
229.
[8] 电子技术精品网. AT Commands for Central Site Modems[EB/OL].

http://www.mcuwork.com/data/2007/0213/article_16421.htm,2007-05.

[9] 汪晓平,钟军等. Visual Basic网络通信协议分析与应用实现[M]. 北
京:人民邮电出版社,2003.45~49.
[10]51Yanfa.cn. 红外线探测报警电路[EB/OL].

http://www.51yanfa.cn/Diagram/alert/Diagram_4636.shtml,2007-05.

[11]元智大学最佳化设计实验室. 音频放大器LM386简介[EB/OL].

http://designer.mech.yzu.edu.tw/article/articles/technical/file/(2003-04-07)%20%AD%B5%B0T%A9%F1%A4j%BE%B9LM386%C2%B2%A4%B6.pdf,2007-5.

[12]luwenxi. 用8051控制报警产生实例[EB/OL].

http://www.mcuzb.com/XXLR1.ASP?ID=5430,2005-1.

[13]黄淼云,张学忠,王福成. Visual Basic控件应用编程实例教程[M]. 北京:北京希望电子出版社,2002.144~192.