第七章MCS-51应用系统的研制和调试本章内容MCS-51应用系统的设计方法MCS-51应用系统的调试方法键盘与显示接口设计步进电机应用设计温度控制系统7.1MCS-51应用系统研制方法MCS-51的应用系统随着用途的不同,它们的硬件和软件结构差别很大,但系统研制的方法和步骤是基本相同的。7.1.1确定任务在着手系统设计之前,必须确定系统的技术指标,这是系统设计的依据和出发点,它贯串于系统设计全过程的。不管是老产品改造还是新产品设计,应对产品性能改善的程度、成本、可靠性、可维护性以及经济效益等进行综合考虑,使所设计的产品达到最佳的性能/价格比。确定任务和技术指标之后,下一步便是这个阶段的任务是通过调查研究和查阅资料来完成系统的总体设计。1)机型和元器件选择调研阶段市场的货源选择最熟悉的机种考虑性/价比7.1.2总体设计2)硬件和软件的功能划分硬件和软件具有一定的互换性应用硬件完成某些功能,可以提高工作速度,但增加了硬件成本;若用软件代替某些硬件的功能,可使硬件成本降低,但软件的工作量增加。总体设计时,必须在硬件和软件之间均衡。一般的原则是看所设计的目标系统的生产量,如果成产量比较大,则能用软件实现的功能由软件完成,以便硬件结构简化。7.1.3硬件设计方法1)程序存储器的容量选择单片机时,应从容量、速度和价格方面考虑。在固化设备允许的条件下,宜选用容量大的器件,减少外部扩展的程序存储器,简化硬件逻辑。ATMEL的89CXX系列和WINBOND的W77系列是目前国内最实用的单片机,它不要外接EPROM电路作为存储器。2)数据存储器和I/O接口对于数据存储器的容量需求,系统之间差别比较大。对于常规的智能仪表和实时控制器,8031片上RAM已能满足要求。若需要扩展少量的RAM和/IO,可用扩展器8155。对于单片机系统,如果要求有较大容量的RAM存储器,这时RAM电路选择的原则是尽可能地减小芯片数量。因为存储器容量大的电路性能价格依然高。8031的应用系统一般都需要扩展I/O接口,在选择I/O接口电路时,应从性能、价格和负载等方面考虑。应选用标准I/O接口电路(如8255等),使编程方便,应用灵活,负载小,但它的I/O性和一些功能往往没有被充分利用,造成浪费。选用TTL电路作I/O口,负载较大,同时因一个电路的口线少,利用率会提高,成本也降低。应根据系统总的接口要求来权衡。3)地址译码器MCS—51是根据地址来选择外部扩展电路进行信息交换的。外部的地址由所选择的地址译码来确定。通常采用全地址译码方法或线选法。MCS—51外部数据存储器和I/O接口电路是统一编址的。若系统只扩展少量的RAM和I/O口电路,则可采用线选法。所谓线选法就是把单独的地址线连接到单独的电路选片端,只要这一位地址为低电平,就选中该片电路。图7.2线选法连接示意图器件RAM/IO地址6116F000H~F7FFH8255EFFCH~EFFFH8155RAMDE00H~DEFFHIODF00H~DF05H0832BFFFH08097FFFH表7.1图7.2的地址编码线选法的优点是硬件线路简单,但是地址空间没有被充分利用对于RAM和I/O口容量较大的系统,采用译码寻址,一般用74LS138作地址译码器。11111111×××其他状态0111111111110010111111110100110111111011001110111110010011110111011100111110110101001111110100110011111110000100CBA1G2GA2GB表7.274LS138功能表图7.374LS138逻辑符号图7.4地址译码逻辑4)总线驱动器MCS-51的外部扩展空间很大,电脑扩展总线口(P0P2)和控制信号线的负载能力是有限的。若负载过重,P0口需加双向的数据总线驱动器74LS245,P2口接单向驱动器74LS244。(a)74LS244和P2口的接口(b)74LS245和P0口的接口7.1.4软件设计方法程序有错否?修改程序在线仿真调试固化到EPROM结束开始建立数据模型编写程序软件结构设计独立式按键结构键盘绘制程序流程图汇编1)问题定义问题定义是进一步明确系统对软件的要求,把软件承担的任务明确的定义出来。定义输入/输出。确定对输入数据进行哪些处理。把输入数据转变为输出结果的基本点过程,主取决于对算法的确定。问题定义的基础,是建立在对系统应用环境的正确了解程度和正确的工程判断上的,它对软件设计和硬件设计提供指导。2)软件结构设计在问题定义的基础上,将软件分解为几个相对独立的任务,并根据这些任务的联系和时间关系,设计一个合理的软件结构,使CPU有条不紊地对这些任务进行处理。软件结构设计还包括程序设计技术选择、程序设计技术、模块程序设计、自顶向下的程序设计和结构程序设计等。在单片机的软件设计中,模块程序设计是最常用方法。程序模块的划分没有一定的标准,一般可参考以下原则:每个模块的程序不宜太长;力求使每个模块之间界限明确,而且在逻辑上相对独立;对一些简单的任务不必模块化;尽量地利用现成的模块程序(如仿真机提供MCS-51子程序)。3)程序设计建立数学模型是根据问题的定义,描叙出各个输入变量和输出变量之间的数学关系。在单片机应用系统中,数学模型的正确程度,是系统性能好坏的决定性因素。(1)建立数学模型例如,在直接数字控制系统中,最简单的方法是数字PID控制算法及其改进形式。在测量系统中,从模拟输入通道得到的温度,流量,压力等现场信息与该信号对应的实际值往往存在非线性关系,则需要进行线性处理。为了削弱或消除干扰信号的影响,提高系精度,常采用算平均发,中值法,惯性数字滤波方法等等。(2)绘制程序流程图图7.7查询程序功能流程图功能流程图进行扩充和具体化应对存储器,寄存器,标志位等工作单元作具体的分配和说明,把功能流程图中每一个粗框转变为对具体的存贮单元、工作寄存器或I/O口的操作,绘制出详细的流程图(细框图)。(A)0~3为“0”?开始8279状态字A(A)0为“0”?长度减为“0”?打印数据8255B口置结束标志读8255C口A根据R6,R7取打印选工作寄存器区1选工作寄存器区0修改打印缓冲器指针(A)=27H?读FIFORAMA置“1”停机标志结束读FIFORAM命令8279图7.8查询程序流程图(3)编写程序先分配单片机内部的RAM,指定工作寄存器,配标志位,再估算子程序和中断嵌套的最大级数以及程序中栈操作指令使用情况,指定堆栈区,栈区的大小应留有余量,最后剩下部分作为数据缓冲器。若有扩展RAM存贮器,应把使用频率最高的数据缓冲器设在内部RAM,以利提高处理速度。在充分利用内部RAM基础上,再分配外部的数据存贮器。将MCS—51汇编语言程序编译成MCS—51目标程序(机器码),有手工汇编、交叉汇编和驻留汇编等方法。手工汇编就是对照MCS—51指令编码表,把每一个符号指令翻译成十六进制数表示的机器码指令。单片机开发工具通常提供MCS—51交叉汇编(在PC上实现),或驻留自汇编(如SICE通用单片机在线的仿真器)。使用方法大同小异,具体操作与机器有关。程序的调试和固化方法与所提供的研制工具有关。4)程序的汇编、调试和固化逻辑错误电源故障元器件失效可靠性问题7.2MCS—51应用系统的调试方法7.2.1常见硬件故障分析7.2.2硬件调试方法1)静态调试在样机加电之前,先用万用表等工具,根据硬件逻辑设计图仔细检查样机线路的正确性,核对元器件,核对元器件的型号、规格和安装是否符合要求。应特别注意电源系统检查,以防止电源的短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或和其他信号线短路)。Step2:加电后检查各插件上引脚的电位,仔细测量各电平是否正常,尤其应注意CPU插座的各点电位,若有高压,联机仿真器调试时,将会损坏仿真器的器件。Step3;是在断电情况下,除CPU以外,插上所有的元器件,仿真插头插入样机CPU插座,并和仿真机相连,用万用表检查连接的正确性与可靠性,准备联机仿真调试。2)联机仿真在静态调试中,对目标机硬件进行初步调试,只排除一些明显的静态故障。目标样机中的硬件故障(如各个部件内部存在的故障和部件之间连接的逻辑错误)主要是靠联机仿真来排除的。分别打开样机和仿真器电源后,便开始联机仿真调试。用仿真机读出修改目标样机扩展RAM存贮器的操作命令,将一批数据写入样机的外部RAM存贮器,然后用读样机扩展RAM的命令读出检查,若读出和写入的内容一致(任意的数据写入任意的单元正确),则扩展RAM存贮器没有故障。若存在写不进,读不出现象,则有故障存在。此时编一段循环读写RAM存贮器程序,并用连续方式运行,用示波器观察样机RAM电路的选片信号和读写信号,进一步查明故障点。测试扩展RAM存贮器对于I/O口有输入和输出口之分、,也有可编程接口的差别。应根据系统对I/O口的定义,先用仿真机的I/O写命令,把控制字写入可编程电路(如8255、8155等)的命令控制口,使之具有系统要求的逻辑结构。然后有用仿真机的I/O写命令将数据写入输出口,观察输出口和所连设备的状态。同时用I/O口读或写命令读输入口的状态,观察读出内容和输入设备的状态是否一致(如拨盘开关,键盘等),用这种方法测试I/O接口和所连设备是否存在故障,并对故障进行定位。测试I/O口和I/O设备用仿真机ROM命令,使样机中的EPROM电路作为目标机的程序贮存器。再用I/O口读命令读程序存贮器,根据读出的内容和EPROMM的内容是否一致来判断样机的程序存贮器电路是否存在故障。测试程序存贮器许多仿真机是以单CPU方式开发MCS-51目标系统的,可以用开关选择,使目标机选用仿真机内晶振电路或样机内的晶振电路,通过使用样机内的晶振电路来测试它的功能。按下样机中复位开关(如果存在),正常情况下,系统应被复位。晶振电路和复位电路程序转跳错常见故障进行分析这种错误的现象是程序运行不到指定的地方,或发生死循环,通常是由于错用了指令或设错了标号引起。7.2.3软件调试方法⒈STRT:CLRC⒉MOVA,#0F0H⒊LP1:INCA⒋JNCLP1⒌GON:MOVDPTR,#7FFFH例设计这段程序的目的是为了延迟一段世间。但由于INCA指令执行结果不影响任何标志,所以JNCLOOP1这条指令执行后总是跳转到LP1,结果发生了死循环。我们可以用单拍、跟踪、断点运行方式这一段程序。在STRT,GON处后,目标机从STRT开始带断点进行,碰到GON则停下来。但由于程序发生了死循环,碰不到断点。此时在仿真机终端上按下停止运行键,仿真机中的8031返回监控,屏幕显示出PC、PSW、ACC等状态信息。这种情况下,可发现程序中有死循环现象。输入断点运行命令在STRT,GON。此时可以在终端上观察到PC、PSW、ACC等寄存器内容的动态变化,可以进一步确认程序有死循环。若按下停止运行,则停止跟踪。此时把A修改为FFH,从LP1开始运行一条指令,结果ACC变为0,但进位仍为0,找出错误的原因。再输入跟踪命令可以修改成下面的程序实现时间延迟:STRT:MOVA,#0F0HLP1:INCACJNEA,#00H,LP1GON:MOVDPTR,#7FFFH2)程序错误对于计算程序,经过反复测试后,才能验正它的正确性。例如调试一个双字节的十进制加法程序,该程序的功能为8031内31H、30H和33H、32H单元内的BCD码相加,结果送到34H、33H、32H单元。程序调试:STRT:MOVR0,#32HMOVR1,#30HMOVR7,#02HCLRCL1:MOVA,@R0ADDCA,@R1DAA,MOV@R0,AINCR0INCR1DJNZR7,L1CLRAMOVACC.0,CMOV@R0,AL2:RET调试这个子程序时,先用仿真机的读出修改命令,将数据和被加数写入8031的30H~33H单元内。然后输入断点运行命令:在STRT,L2处,目标机以断点的方式从STRT开始运行