第5章单片机实用开发步骤5.1单片机应用系统设计的一般流程5.2单片机汇编程序的编辑方法5.3源程序的编译5.4程序的仿真调试(下载源码就到源码网:)单片机应用系统是以单片机为核心,配以相应的外围电路和软件,能实现某种功能的应用系统,它由硬件部分和软件部分组成。硬件是系统的基础,软件则是在硬件的基础上对其合理的调配和使用,从而完成应用系统所要完成的任务。5.1单片机应用系统设计的一般流程单片机应用系统的研制过程主要包括总体设计、硬件设计、软件设计、仿真调试等几个阶段,图5-1为单片机应用系统设计过程框图。单片机应用系统一般要求可靠性好、系统具有自诊断功能、操作维修方便、性能价格比较高。这些要求在进行应用系统设计的过程中要根据不同的需要和应用场合予以考虑。图5-1单片机应用系统设计过程框图1.总体设计(1)总体方案设计、确定技术指标对于一个待开发的单片机应用系统,应收集相关的技术资料,查看过去是否有类似项目、产品。如果有,则可分析这些项目、产品有什么优点、缺点,有什么值得借鉴。如果没有,则应首先从理论上分析、探讨实现的可能方案,根据客观条件如环境、测试手段、仪器设备、资金成本等,选择一种最佳方案。总体方案确定后,对应用对象的工作过程进行深入调查和分析,了解课题的要求、信号的种类和数量、应用环境等。不管是老产品改造还是新产品的设计,都应对产品性能改善的程度、成本、可靠性、可维护性及经济效益等进行综合考虑,提出合理可行的技术指标。主要技术指标是系统设计的依据和出发点,此后的整个设计与开发过程都要围绕如何能达到技术指标的要求来进行。(2)具体方案设计(软硬件功能划分)具体方案设计是将总体设计方案具体化、细化。画出各部分功能框图,大致给出各框图的实现方法,明确哪些部分由软件完成,哪些部分由硬件完成。系统的硬件配置和软件的设计是紧密地联系在一起的,且硬件和软件具有一定的互换性。多用硬件完成一些功能,可以提高工作速度,减少软件研制工作量,但增加了硬件成本。若用软件替代某些硬件的功能,可使硬件成本降低,但增加了软件的复杂性,而且降低了系统的工作速度。因此,总体设计时,应综合考虑以上因素,合理搭配软硬件的比重。(3)机型和器件选择在选择机型和器件时应考虑以下几点。①货源充足稳定,便于批量生产。②在考虑性能/价格比的前提下,选择最容易实现应用系统技术指标的机种。③所选机型功能强、性能价格比好、有便于使用的开发装置。④要选择设计者最熟悉的机种和元器件,以缩短研制周期。⑤按照系统的精度、速度和可靠性等方面的要求合理选择包括传感器、模拟电路、输入输出电路和存储器等器件。2.硬件设计硬件设计的任务是根据总体设计要求,确定系统扩展所需的扩展部分和各功能模块,包括存储器(EPROM、E2PROM、FLASHROM和RAM)的扩展、I/O电路、A/D、D/A电路以及有关外围电路(键盘、显示器、打印机)等,然后设计出系统的硬件电路原理图。(1)程序存储器可作为程序存储器的芯片有EPROM、E2PROM及FLASHROM等。从性能和价格方面考虑,对于大批量生产已成熟的应用系统宜选用EPROM、FLASHROM。调试阶段以及样机的研制可选用FLASHROM、E2PROM。(2)数据存储器和I/O接口对于数据存储器的容量需求,各个系统之间差别较大,对于常规的智能仪器和实时控制系统,MCS-51单片机片内RAM已能满足要求。若需要扩充少量RAM,可以考虑选用RAM/IO扩展芯片8155,不仅扩充了RAM,而且增加输入输出接口。对于数据采集系统,往往需要有较大容量的RAM存储器,这时RAM芯片的选择原则是尽可能减少芯片的数量。在选择I/O接口电路时,应从体积、价格、功能、负载等方面考虑。标准的可编程接口电路8255、8155接口简单,使用方便,对总线负载小,可优先选用,但对要求口线扩充较少的系统,则可用TTL或CMOS电路,以提高口线的利用率。需要注意的是,CPU的I/O口负载能力有限,扩展以后,不宜满载,应留有余量,否则会降低系统抗干扰能力。对于A/D和D/A电路芯片的选择原则,应根据系统对它的速度、精度和价格的要求来确定。外围模拟电路应根据系统的要求,在速度、精度和价格等方面选用,同时还应注意它们与传感器等的匹配问题。(3)总线驱动MCS-51系列单片机的外部扩展空间可达64KB,但扩展总线口(P0、P2)的负载能力有限(P0口为8个LSTTL电路,P2口为4个LSTTL电路)。若负载过重,系统便不能可靠地工作,这时可在P0口增加双向三态缓冲器74LS245,在P2口加单向三态缓冲器74LS244。3.软件设计软件设计的任务是在总体设计和硬件设计的基础上确定程序结构,分配单片机内部RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整的应用程序。软件设计的一般步骤如图5-2所示。图5-2软件设计步骤(1)系统定义系统定义是在进行软件设计前明确软件承担的任务,然后结合硬件结构进一步确定软件所承担任务的细节。细节如下:①定义说明各输入输出口的功能,确定信息交换的方式、系统接口方式、占有口地址、读取和输出方式等。②在程序存储器和数据存储器区域中(注意考虑是否有断电保护措施)合理分配存储空间,包括系统主程序、常数表格、数据暂存区域、堆栈区域、入口地址等。③对面板、控制开关、按键等输入量以及显示、打印等输出量也必须给予定义,作为编程的依据。(2)软件结构设计设计出合理的软件结构是设计性能优良的单片机应用系统软件的基础。常用的程序设计方法有3种:模块化程序设计;自顶向下逐步求精程序设计;结构化程序设计。MCS-51应用系统的软件设计一般采用模块化程序设计。为了便于编程和调试,应先进行软件结构设计,根据系统要求的功能,把软件分为不同的“模块”,明确各模块应完成的功能,以及各模块之间的关系,主要是要指定哪些任务由主程序完成,哪些任务由中断服务程序完成,以便进行模块化的程序设计。模块化程序设计是单片机应用系统软件设计中最常用的方法。这种设计方法是把一个完整的程序分成若干个功能相对独立的较小的程序模块,各个程序模块分别进行设计、编制程序和调试,最后将调试好的程序模块连接起来。模块程序设计的优点是:单个程序模块设计和调试比较方便、容易完成,一个模块可以被多个任务共用。(3)建立数学模型根据问题的定义,描述出各个输入变量和各个输出变量之间的数学关系,称为建立数学模型。数学模型随系统任务的不同而不同。例如在直接数字控制系统中,可采用数字(proportionalintegralanddifferentialcontroller,比例积分与微分控制器)控制算法或其改进形式;在测量系统中,从模拟输入通道得到的温度、流量、压力等现场信息与该信号对应的实际值往往存在非线性关系,需要进行非线性补偿。(4)绘制程序流程图通常是根据系统功能及操作过程和软件的结构,先列出程序的简单功能流程图,再对该图进行扩充和具体化,把简单功能流程图中每一部分转变成具体的存储单元、寄存器和I/O口的操作,从而绘制出详细的程序流程图。(5)编写程序在完成流程图设计以后,依据流程图编写程序。(6)汇编程序编写完后用开发系统或仿真器的汇编程序将所编写的用户程序汇编成MCS-5l单片机的机器码。(7)在线仿真调试通过单片机的开发系统,将所编写的程序进行在线仿真调试,完成单片机应用系统的各种功能,完成系统软件设计。4.联机在线仿真调试、修正软硬件错误主要包括用户软件程序的调试和目标系统的硬件调试。(1)用户软件程序的调试用户软件程序的调试可分为以下几个步骤:①建立用户源程序。②在单片机开发系统上,对用户源程序进行编译,如果编译有错误,则要进行修改,再进行编译,直至错误全部纠正为止。③动态在线调试。用户程序中分为内部服务程序以及与外部的接口程序。内部服务程序是指与用户样机硬件无联系的用户程序,例如计算程序,虽然经编译后已经没有语法错误,但可能有逻辑错误,必须借助于动态在线调试手段,如单步运行、设置断点等,发现逻辑错误,然后进行修改。对于外部接口程序,一定要先把硬件故障排除以后,再对用户程序进行动态在线调试,如果有错误,则进行修改。在调试这一类程序时,硬件调试与软件调试是不能完全分开的,许多硬件错误是通过对软件的调试从而发现和纠正的。④将调试完毕的用户程序通过专用编程器固化在EPROM中。(2)用户样机硬件调试①静态调试。对用户样机进行调试,首先要进行静态调试,静态调试的目的是排除明显的硬件故障。第一步断电测量,在样机加电之前,先用万用表等工具,根据硬件电路图,仔细检查样机线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求。应特别注意对电源系统的检查,以防止电源的短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间的短路或与其他信号线的短路。第二步加电后检查各插件上引脚的电位,仔细测量各点电平是否正常、尤其应注意8051插座的各点电位。第三步是在断电情况下,除CPU外,插上所有的元器件,并把仿真器的仿真插头插入样机上的CPU插座,准备联机仿真调试。②联机仿真、在线动态调试。在静态调试中,仅对目标样机硬件进行了初步调试,只是排除了一些明显的静态故障,而样机中的硬件故障(如各部件内部存在的故障和部件之间连接的逻辑错误)主要是靠联机仿真排除的。分别打开样机和仿真器电源后,便可开始联机仿真调试,排除硬件的故障。上面已经谈到,硬件调试和软件调试是不能完全分开的,许多硬件错误是在软件调试中发现和被纠正的。因此,在上面介绍的软件在线调试中,也包括联机仿真、硬件在线动态调试以及硬件故障的排除。5.程序固化,系统独立运行至此可将用户程序固化在程序存储器中,然后将程序存储器插入目标样机系统中,目标样机系统可独立运行。目标样机系统独立运行一段时间无故障后,可认为整个设计开发过程结束。单片机的程序设计可以使用机器语言、单片机汇编语言和高级语言三种编程语言。机器语言是CPU惟一能够识别的语言,其他语言必须通过编译后形成机器码供CPU识别;汇编语言是单片机系统设计中最常用的程序设计语言;高级语言通用性好,只要单片机开发系统具有编译的能力,就可以直接用高级语言编写程序。MCS-51系列单片机的编译型高级语言有:PL/M51、C-51、MBASIC-51等。5.2单片机汇编程序的编辑方法可以使用单片机仿真器提供的软件包中的编辑器来编写单片机程序,也可以使用PC的编辑程序编写程序,例如PC上的EDIT、PE等编辑软件。然后利用开发系统提供的汇编或编译系统,将源程序编译成可在目标机上直接运行的目标程序。该目标程序可通过PC的串行通信接口直接传送到开发系统的RAM中。本节主要介绍利用单片机仿真器进行51汇编语言程序的编辑方法。单片机应用系统本身并无自开发能力,需要借助于开发工具进行软件编辑、汇编和调试。目前国内用于MCS-51型单片机的开发系统很多,伟福E2000系列仿真器属于新型的专用开发系统,本节内容是结合其软件包,对汇编程序的编辑等进行说明。5.2.1伟福仿真器软件包源程序的编辑可以在开发系统的软件包中进行。下面以一个延时程序为例介绍如何在伟福E2000仿真器的软件包中进行源程序的编辑。(1)单击WINDOWS界面的[开始]|[程序]|[WAVEforWINDOWS]|[wave],进入伟福软件模拟器选择界面,单击[好]进入编辑器管理窗口。如图5-3所示。5.2.2汇编源程序的编辑方法图5-3程序编辑器管理窗口(2)单击[文件]|[新建文件]或工具栏的[新建文件]图标,进入程序编辑器,编辑器自动为程序取名为“NONAME1”。(3)在编辑器中输入并修改程序,注意,字符可以大写或小写,符号和特殊字符必须为英文状态。(4)编辑完成后单击[文件]|[保存文件]或[文件]|[另存文件]或工具栏的[保存文件]图标,出现保存对话框或另存对话框,输入文件名TIME1.ASM后,单击[保存]按钮,完成汇编源文件的保存。如图5-4所示。图5-4存储窗口由于单片机只能执行机