【学习目的和要求】
由于单片机的应用领域很广,控制结构多种多样,不同场合下的技术要求各不相同,因此单片机应用系统的硬件和软件结构差别很大,但系统研制的方法和步骤是基本相同的。本章将针对大多数应用场合,简要介绍单片机应用系统开放的一般步骤,研制方法及其所使用的开放工具。
8.1单片机应用系统设计的一般流程
单片机应用系统是以单片机为核心,配以相应的外围电路和软件,能实现某种功能的的应用系统,它由硬件部分和软件部分组成。硬件是系统的基础,软件是在硬件的基础上对其合理的调配和使用,从而完成应用系统所要完成的任务。
图8-1单片机应用系统设计过程框图
单片机应用系统的研制过程主要包括总体设计、硬件设计、软件设计、仿真调试等几个阶段,图8-1为单片机应用系统设计过程框图。
单片机应用系统一般要求可靠性好、系统具有自诊断功能、操作维修方便、性能价格比较高。这些要求在进行应用系统设计的过程中要根据不同的需要和应用场合予以考虑。
8.1.1总体设计
(1)拟制设计任务书
在设计一台单片机应用系统前,设计者首先应对系统的任务、控制的对象、硬件资源和工作环境作出周密的调查研究,必要时还要勘察工业现场,进行系统实验,明确各项指标的要求,以拟制出完整的设计任务书。不管是工程控制系统还是智能仪器仪表,都必须首先分析和了解项目的总体要求、输入信号的类型和数量、输出控制的对象及数量、辅助外设的种类及要求、使用的环境及工作电源要求、产品的成本、可靠性要求和可维护性及经济效益等因素,必要时可参考同类产品的技术资料,制定出可行的性能指标。
(2)建立数学模型
设计任务书拟制以后,设计者还应对控制对象的物理过程和计算任务进行全面分析,并从中抽象出数学表达式,即建立数学模型。数学模型要能真实描述客观控制过程,要精确而简单。
(3)总体设计
总体设计是在上述基础上进行的。总体设计中最重要的问题有四个:
1)要根据系统的目标、复杂程度、可靠性、精度和速度要求来选择一种性能价格比合理的单片机机型。
现在的单片机品种繁多,包括各种专用功能的单片机,给用户带来了许多好处,起码可以节约很多外接扩展器件。单片机的选型很重要,选择时需考虑其功能是否全部满足规定的要求,例如控制速度、精度、控制端口的数量、驱动外设的能力、存储器的大小、软件编写的难易程度、开发工具的支持程度等。再如要驱动LED显示器,可选用多端口的单片机直接驱动,还可以利用少端口的单片机加扩展电路构成,这就要具体分析选用何种器件有利于降低成本、电路易于制作、软件便于编写等因素。如果要求驱动显示器LCD,也可选用具有直接驱动LCD的单片机,也可使用加外接驱动芯片的办法,这就要求在应用时具体问题具体分析。
2)慎重选购传感器,因为传感器是影响控制系统性能的重要瓶颈,一个设计合理的工业测控系统常因传感器精度和环境条件制约而达不到预定设计指标。
3)设计者必须对所选各部分电路、元器件和各实测点传感器在局部实验基础上进行比较。以选择最佳电路和元器件。
4)研制大型工业测控系统往往多方协作和联合公关,因此总体方案中应当大致规定出接口电路地址、监控程序结构、用户程序要求、上下位机的通讯协议、系统软件的内存驻留区域以及采样信号的缓冲区域等。
应当引起注意的是单片机的应用软件的设计与硬件的设计一样重要,没有控制软件的单片机是毫无用处的,它们紧密联系,相辅相成,并且硬件和软件具有一定的互换性;在应用系统中,有些功能既可用硬件实现,也可以软件完成。多利用硬件,可以提高研制速度、减少编制软件的工作量、争取时间、争取商机,但这样会增加产品的单位成本,对于以价格为竞争手段的产品不宜采用。相反,以软件代替硬件完成一些功能,最直观的可以降低成本,提高可靠性,增加技术难度而给仿制者增加仿制难度;不利的一面是同时也增加了系统软件的复杂性,软件的编制工作量大,研制周期可能会加长,同时系统运行的速度可能也会降低等。因此在总体考虑时,必须综合分析以上因素,合理地制定某些功能硬件和软件的比例。
8.1.2硬件设计
总体设计中确立的功能特性要求,确定单片机的型号、所需外围扩展芯片、存储器、I/O电路、驱动电路,可能还有A/D和D/A转换电路以及其他模拟电路,设计出应用系统的电路原理图。
(1)程序存储器
随着微电子技术的发展,现在可用作程序存储器的类型相当多,各大半导体公司都推出了一系列程序存储器,像EPROM、EEPROM、Flash EEPROM以及OTP ROM等。这些存储器各有特点,互有所长。
现在的单片机普遍都带有程序存储器,容量也分有不同的等级,从几百B到几百KB都有,这为它们的应用提供了更为广阔的前景。
(2)数据存储器
现在的单片机基本上都带有内部数据存储器(RAM),从几十B到几KB都有。对于数据存储器容量的要求,各系统之间差别很大,要求也不尽相同,如80C51/52系列的单片机片内置有128B和256B的RAM,这对于一般中小型应用系统(如实时控制系统和智能仪器仪表)已能满足要求。对于RAM的容量要求稍大一点,可采用如外扩芯片8155这样的芯片,8155可同时扩充数量更多的I/O口线。如果是数据采集系统,对RAM容量要求较大的系统则需要采用更大容量的数据存储器,如果要求数据掉电保护,则需要采用Flash EEPROM作为数据存储器。当然,外扩的RAM也以尽可能少的芯片为原则。
(3)单片机的系统总线
80C51总共有4个8位I/O口,如果使用内置程序存储器的芯片,可用于作为I/O口线的就较多,一般均可满足要求。但如需外接ROM和RAM,P0口为标准的双向数据/地址总线口,P2为高8位地址总线口,即使高8位的地址总线口没有完全使用,余下的I/O口也不能另为他用,否则编程将相当麻烦。这样80C51能作为I/O的端口只有16个。此外,中断、串行口和定时器/计数器口又要占用P3口的6个I/O口,剩下的也只有P1口,这8个I/O口就显得相当宝贵。
P0和P2口作为数据和地址总线,一般可驱动数个外接芯片(视外接芯片要求的驱动电流而异),也即P0和P2口的驱动能力还是有限的。如果外接的芯片过多,负载过重,系统将可能不能正常工作,此时必须加接缓冲驱动器予以解决。通常使用74HC573作为地址总线驱动器,使用74HC245双向驱动器作为数据总线驱动器。
(4)I/O接口
现在的单片机系列中普遍都有多I/O口的型号,对I/O口的使用应从其功能和驱动能力上加以考虑。对于仅需增加少量的I/O口,最好选用价格低廉的TTL或CMOS电路扩展,这样也可提高单片机口线的利用率。
(5)A/D和D/A转换器
现在可使用的A/D转换器数量繁多、品种齐全,各种分辨率、精度及速度的芯片应有尽有。最著名的是美国的模拟数字器件公司(Analog)的一系列转换器,此外还有Motorola和Maxim公司等,这给使用提供了很多便利的条件。还有一种趋势大家都已看到,即现在的各大单片机生产厂商都推出了内带A/D转换器的单片机,这样的芯片性价比一般都较高。由于A/D或D/A转换器与单片机没有外部连线,工作就更可靠,体积也更小了。对转换器的控制均可使用软件的方法实现,使用十分方便。如果能满足要求,建议首选这样的机型,而不要外挂转换器件。当然内置转换器的单片机,转换器一般都在12位以下,对那些有更高要求的应用系统,也只能外接转换器芯片。
8.1.3软件设计
软件设计的任务是在总体设计和硬件设计的基础上确定程序结构,分配单片机内部RAM资源,划分功能模块,然后进行主程序和各模块程序的设计,最后连接起来成为一个完整的应用程序。软件设计的一般步骤如图8-2所示。
图8-2 软件设计的一般步骤
(1)系统定义
1)定义说明各输入/输出口的功能,确定信息交换的方式、与系统接口方式、所占口地址、读取和输出方式等。
2)在程序存储器和数据存储器区域中,合理分配存储空间,其中包括系统主程序、常数表格、数据暂存区域、堆栈区域和入口地址等。
3)对面板控制开关、按键等输入量以及显示、打印等输出量也必须给予定义,以此作为编程依据。
4)针对可能出现的由干扰引起的错误进行容错设计,给出错误处理方案,以达到提高软件可靠性的目的。
5)明确所设计的用户程序应达到的精度、速度指标。
(2)软件结构设计
在单片机应用系统的开发中,软件的设计是最复杂和困难的,大部分情况下工作量都较大,特别是对那些控制系统比较复杂的情况。如果是机电一体化的设计人员,往往需要同时考虑单片机的软硬件资源分配。在考虑一个应用工程项目时就需要先分析该系统完成的任务,明确软硬件哪个承担哪些工作。
程序总体设计包括拟订总体设计方案、确定算法和绘制程序流程图等。
常用的程序设计方法有三种:
◆模块化程序设计
◆自顶向下逐步求精程序设计
◆结构化程序设计
不论采用何种程序设计方法,设计者均应根据系统的总任务和控制对象的数学模型画出程序的总体框图,以描述程序的总体结构。在总体框图基础上,设计者还应结合数学模型确立各子任务的具体算法,并演化成计算机能处理的形式,然后画出子模块的所有流程图。
图8-3 模块化程序设计总体框图
一个优秀的单片机程序设计人员,设计的软件程序结构是合理、紧凑和高效的。同一任务,有时用主程序完成是合理的,但有时需子程序执行效率更高,占用CPU资源最少。对一些要求不高的中断任务或单片机的速度足够高,则可以使用程序扫描查询,也可以用中断申请执行,这也要具体的问题具体分析。对于多中断系统,当它们存在矛盾时,需区分轻重缓急、主要和次要,区别对待,并适当地给予不同的中断优先级别。
在单片机的软件设计中,任务可能很多,程序量很大,在这种情况下一般都需把程序分成若干个功能独立的模块。
对于复杂的多任务实时控制系统,要处理的数据非常庞大,同时又要求对多个控制对象进行实时控制,要求对各控制对象的实时数据进行快速的处理和响应,这对系统的实时性、并行性提出了更高的要求。这种情况下一般要求采用实时任务操作系统,并要求这个系统具备优良的实时控制能力。
(3)数学模型
一个控制系统的研制,明确了各部分需要完成的任务后,设计人员必须进一步分析各输入输出变量的数学关系,即建立数学模型。这个步骤对一般较复杂的控制系统是必不可少的,而且不同的控制系统,它们的数学模型也不尽相同。
(4)程序流程
较复杂的控制系统一般都需要绘制一份程序流程图,可以说它是程序编制的纲领性文件,可以有效地指导程序的编写。
(5)编制程序
上述的工作完成后,就可以开始编制程序了。程序编写时,首先需对用到的参数进行定义,与标号的定义一样,使用的字符必须易于理解,可以使用英文单词和汉语拼音的缩写形式,这对今后自己的辨读和排错都是有好处的。然后初始化各特殊功能寄存器的状态,定义中断口的地址区,安排数据存储区,根据系统的具体情况,估算中断、子程序的使用情况,预留出堆栈区和需要的数据缓存区,接下来就可以编写程序了。
过去单片机应用软件以汇编语言为主,因为它简洁、直观、紧凑,使设计人员乐于接受。而现在高级语言在单片机应用软件设计中发挥了越来越重要的角色,性能也越来越好,C语言已成为现代单片机应用系统开发中较常用的高级语言。但不管使用何种语言,最终还是需要翻译成机器语言,调试正常后,通过烧录器固化到单片机或片外程序存储器中。至此,程序编写即告完成。
8.1.4 系统总体调试
系统调试包括硬件调试、软件调试和软、硬件联调。根据调试环境不同,系统调试又分为模拟调试与现场调试。各种调试所起的作用是不同的,它们所处的时间段也不一样,不过它们的目的都是为了查出用户系统中存在的错误或缺陷。系统调试的一般过程如图8-4。
图8-4 系统调试的一般过程
1)硬件调试
硬件调试可以分为静态调试和动态调试。
◆静态调试
静态调试的主要目的是排除明显的硬件故障。
第一步断电测量,在样机加电之前,先用万用表等工具,根据硬件电路图,仔细检查样机线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求。应特别注意对电源系统的检查,以防止电源的短路和极性错误,并重点检查系统总线(地址、数据和控制)是否存在相互之间的短路或与其他信号线的短路。
第二步加电后检查各插件上引脚的电位,仔细测量各点电平是否正常、尤其应注意CPU插座的各点电位。
第三步是在断电的情况下,除CPU外,插上所有的元器件,并把仿真器的仿真插头插入样机的CPU插座,准备联机方针调试。
◆动态调试
在静态调试中,仅对目标样机硬件进行了初步调试,只是排除了一些明显的静态故障,而样机中的硬件故障(如各部件内部存在的故障和部件之间连接的逻辑错误)主要是靠联机仿真排除的。
2)软件调试
软件调试又可以分为分块调试和系统联调两个阶段。
◆程序的分块调试
根据所调程序功能块的入口参数或变量初值编制一个特殊程序段,并连同被调程序功能块一起汇编成目标代码,装入单片机开发装置后观察运行结果是否正确。如果不正确,改正错误。如果正确,说明该程序已调试完毕,撤消特殊程序段。同样方法,完成所有模块的调试。
◆系统联调
系统联调可以在所研制成的硬件系统上进行,其任务是要把已调好的各程序功能模块按照总体设计要求连成一个完整程序。
3)系统联调
◆软、硬件能否按预定要求配合工作。
◆系统运行中是否有潜在的设计时难以预料的错误。
◆系统的动态性能指标(包括精度、速度参数)是否满足设计要求。
实际上硬件调试和软件调试是不能完全分开的,许多硬件错误是在软件调试的过程中发现和被纠正的。
4)现场调试
出了不同的用户可能提出不同的系统性能要求之外,还要考虑施工现场的特殊环境。施工现场的环境与实验室的环境差别往往很大,一些额外的因素必须加以考虑。比较突出的因素有:雷击、环境温湿度、通信电缆长度、系统运行时长、电磁兼容性等。有时同一单片机应用系统在不同的施工现场,可能具有不同的性能表现。这是必须在原有系统的基础上进行修改或调整,使之适应施工现场条件的变化。如加入防雷击措施,除湿装置,硬件看门狗电路,光电隔离电路等。
8.1.5 程序固化,系统独立运行
至此可将用户程序固化在程序存储器中,然后将程序存储器插入目标样机系统中,目标样机系统可独立运行。目标样机必须在现场环境下,独立运行一段时间,无故障后,可认为整个开放设计过程结束。
特别提示,程序固化与系统在线仿真是有区别的,有时现象甚至完全不同,此时要尤其注意检查晶振、时序以及仿真器I/O与实际单片机I/O性能是否一致等。



