第八章 单片机应用系统设计.docx
- 文档编号:9872904
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:17
- 大小:77.15KB
第八章 单片机应用系统设计.docx
《第八章 单片机应用系统设计.docx》由会员分享,可在线阅读,更多相关《第八章 单片机应用系统设计.docx(17页珍藏版)》请在冰点文库上搜索。
第八章单片机应用系统设计
(此文档为word格式,下载后您可任意编辑修改!
)
第八章单片机应用系统的研制和调试
教学内容:
1、单片机应用系统研制方法
2、单片机应用系统的调试方法
3、应用举例
本章重点:
单片机应用系统研制和调试方法
教学要求:
1、通过本章的学习,应掌握单片机应用系统的研制和调试方法。
2、通过应用实例了解单片机应用系统开发过程。
3、通过本章的学习,结合单片机原理与编程方法,能进行简单的单片机应用系统的开发与研究。
教案:
第一节单片机应用系统研制方法
单片机应用系统随着用途的不同,它们的硬件和软件结构差别很大,但系统研制的方法和步骤是基本相同的,其研制过程可以用图1表示。
1、确定任务
如同任何一个新产品设计一样,单片机应用系统的研制过程也是从确定目标系统的任务开始的。
在着手系统设计之前,必须确定系统的技术指标,这是系统设计的依据和出发点,它贯串于系统设计全过程的。
不管是老产品改造还是新产品设计,应对产品性能改善的程度、成本、可靠性、可维护性以及经济效益等进行综合考虑,参考国内外同类产品的资料,提出比较合理的技术指标。
使所设计的产品达到最佳的性能/价格比。
应该指出,技术指标在设计过程中还需调整。
2、总体设计
一般而言,任务和技术指标确定以后,下一步便是调研阶段。
这个阶段的任务是通过调查研究和查阅资料来完成系统的总体设计。
1)机型和元器件选择
选择机型的出发点有以下几方面:
·市场的货源:
设计者只能在市场上能提供的几个机型中挑选。
特别是将作为产
图1单片机应用系统研制过程
品生产的系统,所选机种必须有稳定充足的货源。
·在研制任务重、时间短的情况下,应选择最熟悉的机种,这样可以缩短研制周期。
·选择最容易实现技术指标的机种。
一般说来,从性能/价格比考虑,MCS-51系列中的AT89C51单片机最适合于国内控制型应用领域。
还应考虑是否有现成的开发工具。
因为开发工具的优劣,往往是产品研制周期长短的决定性因素。
元器件的选择应包括传感器、模拟电路、I/O电路等。
这些元器件在总体设计阶段,只需了解大体的市场情况,待硬件设计时最后确定。
2)硬件和软件的功能划分
一般来说,硬件和软件具有一定的互换性。
有些由硬件实现的功能依然可以由软件来完成,反之亦然。
多用硬件完成一些功能,可以提高工作速度。
但增加了硬件成本;若用软件代替某些硬件的功能,可使硬件成本降低,但软件的工作量增加。
总体设计时,必须在硬件和软件之间均衡。
一般的原则是看所设计的目标系统的生产量,如果成产量比较大,则能用软件实现的功能由软件完成,以便硬件结构简化。
3、硬件设计方法
单片机系统的各个模块(如存储器、I/O电路)加上模拟电路、传感器等构成硬件电路。
前几章对单片机的结构及其功能模块作了介绍,本节重点讨论硬件方案设计。
1)程序存储器的容量
选择单片机时,应从容量、速度和价格方面考虑。
目前市场上不同存储器容量的单片机价格相差不大。
所以在固化设备允许的条件下,宜选用容量大的器件,减少外部扩展的程序存储器,简化硬件逻辑。
ATMEL的89CXX系列和WINBOND的W77系列是目前国内最实用的单片机,它不要外接EPROM电路作为存储器。
2)数据存储器和I/O接口
对于数据存储器的容量需求,各个系统之间差别比较大。
对于常规的智能仪表和实时控制器,80C51片上RAM已能满足要求。
若需要扩展少量的RAM和/IO,可用扩展器8155。
如前所述,8155功能强,接口方便,适用于单片机系统。
对于单片机系统,如果要求有较大容量的RAM存储器,这时RAM电路选择的原则是尽可能地减小芯片数量。
因为存储器容量大的电路性能价格依然高。
如32K字节的62256和同样的四片6264相比,前者的价格低于后者。
80C51的应用系统一般都需要扩展I/O接口,在选择I/O接口电路时,应从性能、价格和负载等方面考虑。
应选用标准I/O接口电路(如8255等),使编程方便,应用灵活,负载小,但它的I/O性和一些功能往往没有被充分利用,造成浪费。
选用TTL电路作I/O口,负载较大,同时因一个电路的口线少,利用率会提高,成本也降低。
应根据系统总的接口要求来权衡。
模拟电路应根据系统对它的速度、精度和价格来选择。
同时还需要和传感器、放大器等匹配。
3)地址译码器
80C51是根据地址来选择外部扩展电路进行信息交换的。
外部的地址由所选择的地址译码来确定。
通常采用全地址译码方法或线选法。
80C51外部数据存储器和I/O接口电路是统一编址的。
若系统只扩展少量的RAM和I/O口电路,则可采用线选法。
所谓线选法就是把单独的地址线连接到单独的电路选片端,只要这一位地址为低电平,就选中该片电路。
图2给出了线选法的例子。
图中6116、8255、8155、0809、0832的地址编码如表1所示。
图2线选法连接示意图
器件
RAM/IO地址
器件
RAM/IO地址
6116
F000H~F7FFH
8255
EFFCH~EFFFH
8155
RAM
DE00H~DEFFH
0832
BFFFH
IO
DF00H~DF05H
0809
7FFFH
表1图2的地址编码
线选法的优点是硬件线路简单。
但由于所用的选片信号线都是高位地址线,它们的权植比较大,因此地址空间没有被充分利用,芯片之间的地址出现不邻接的现象。
对于RAM和I/O口容量较大的系统,当芯片所需的选片信号多于可利用的地址线时就需采用译码寻址的方法。
将低位地址线作为芯片的地址线,用一片译码器对高位地址进行译码,译出的信号作为选片线。
一般用74LS138作地址译码器,它的逻辑符号如图3所示,功能如表2所示。
以74LS138作地址译码器逻辑如图4所示,图中Y0~Y7非分别对应一个8K字节的地址空间。
程序存储器往往采用一片EPROM电路,故把它的选片端接地即可。
表274LS138功能表
1G2GA2GB
CBA
100
000
11111110
100
001
11111101
100
010
11111011
100
011
11110111
100
100
11101111
100
101
11011111
100
110
10111111
100
111
01111111
其他状态
×××
11111111
图374LS138逻辑符号图4地址译码逻辑
4)总线驱动器
80C51的外部扩展空间很大,电脑扩展总线口(P0P2)和控制信号线的负载能力是有限的(P0口为8个STTL电路,P2口为4个LSTTL)。
若负载过重,P0口需加双向的数据总线驱动器74LS245,P2口接单向驱动器74LS244,其接口方法如图5所示。
(a)74LS244和P2口的接口(b)74LS245和P0口的接口
图5总线扩展
5)可靠性设计
工作于恶劣环境下的应用系统,设计时应采取措施,提高系统的可靠性。
4、软件设计方法
应用系统工作程序(监控软件)的设计,是系统研制中最重要的也是最困难的任务。
软件设计的过程如图6所示。
1)问题定义
问题定义是进一步明确系统对软件的要求,把软件承担的任务明确的定义出来。
首先是定义输入/输出。
应用系统通过输入/输出通路和外界发生联系,必确定信息交换的方式,输入/输出的速度以及状态信号等。
对系统输入/输出的要求,是问题定义的依据。
其次,必须确定对输入数据进行哪些处理。
把输入数据转变为输出结果的基本点过程,主取决于对算法的确定。
就实时控制系统来说,往往对于控制顺序和时间有明确的要求,例如何时发送数据,何时接收数据,有多少延迟等。
另外在问题的定义阶段,必须考虑到能发生什么错误,其中最经常发生的是哪种错误等这样一类的问题。
并应该弄清哪些错误系统是不能立刻发现的,以及如何排除这种错误。
问题定义的基础,是建立在对系统应用环境的正确了解程度和正确的工程判断上的,它对软件设计和硬件设计提供指导。
图6软件设计过程
2)软件结构设计
在问题定义的基础上,将软件分解为几个相对独立的任务,并根据这些任务的联系和时间关系,设计一个合理的软件结构,使CPU有条不紊地对这些任务进行处理。
对于简单的系统,通常用中断方法分配CPU的时间,指定哪些任务由主程序处理,哪些任务由中断服务程序处理,并指定各中断源的优先级别。
只要处理恰当,就不会发生时间冲突和任务的相关性矛盾。
对于复杂的实时控制系统,应采用实时多任务操作系统,采取合理的调度策略,才能取得满意的效果。
软件结构设计还包括程序设计技术选择、程序设计技术、模块程序设计、自顶向下的程序设计和结构程序设计等。
在单片机的软件设计中,模块程序设计是最常用方法。
模块程序设计方法是把一个完整的程序分成若干个功能相对独立的较小的程序模块,各个程序模块分别进行设计,编制程序和调试,最后将调试好的程序模块联起来。
模块程序设计的优点是,单个(功能明确的)程序模块设计和调试比较方便,容易完成。
程序模块的划分没有一定的标准,一般可参考以下原则:
·每个模块的程序不宜太长;
·力求使每个模块之间界限明确,而且在逻辑上相对独立;
·对一些简单的任务不必模块化;
·尽量地利用现成的模块程序(如仿真机提供80C51子程序)。
3)程序设计
(1)建立数学模型
建立数学模型是根据问题的定义,描叙出各个输入变量和输出变量之间的数学关系。
在单片机应用系统中,数学模型的正确程度,是系统性能好坏的决定性因素。
数学模型是随系统任务的不同而不同的。
例如,在直接数字控制系统中,最简单的方法是数字PID控制算法及其改进形式。
在测量系统中,从模拟输入通道得到的温度,流量,压力等现场信息与该信号对应的实际值往往存在非线性关系,则需要进行线性处理。
为了削弱或消除干扰信号的影响,提高系精度,常采用算平均发,中值法,惯性数字滤波方法等等。
(2)绘制程序流程图
通常在编写程序之前先绘制流程图。
程序流程图以简明,直观的方式对任务进描述,并很容易由此编写出具体的程序,故它对初学者来说,尤其适用。
所谓程序流程图,就是把程序应完成的各种分立操纵,表示在不同的框中,并按一定的顺序用图7查询程序功能流程图
连接起来,这种互相联系的框图称为流程图。
在设计过程中,先画出简单的功能流程图,图7给出了一个查询程序的功能流程图。
接下来对功能流程图进行扩充和具体化。
(3)编写程序
在完成了流程图设计以后,只要熟悉80C51的指令系统,编写程序是比较方便的。
首先应对数据存贮器进一步详细分配。
先分配单片机内部的RAM,指定各模块使用的工作寄存器,分配标志位(20H~2FH的位寻址区),再估算子程序和中断嵌套的最大级数以及程序中栈操作指令使用情况,在此基础上指定堆栈区,栈区的大小应留有余量,最后剩下部分作为数据缓冲器。
若有扩展RAM存贮器,应把使用频率最高的数据缓冲器设在内部RAM,以利提高处理速度。
在充分利用内部RAM基础上,再分配外部的数据存贮器。
在编写程序过程中,应按51汇编语言的符号和格式书写,必要时做若干功能性注释。
4)程序的汇编、调试和固化
将80C51汇编语言程序在专用的编译软件译成80C51目标程序(机器码),然后采用专用的工具将程序下载到芯片中。
第二节单片机应用系统的调试方法
单片机应用系统调试分硬件调试和软件调试。
1、常见硬件故障分析
1)逻辑错误
样机硬件的逻辑错误是由于设计错误和加工过程中的工艺性错误所造成的。
这类错误包括错线、开路、短路,其中短路是最常见也是最难于排除的故障。
单片机系统的体积往往要求很小、,印刷板的布线密度很高,由于工艺原因经常造成引线与引线之间的短路。
开路常常是由于金属化孔不好,或接插件接触不良所造成的。
2)元器件失效
元器件失效的原因有两个方面,一是元器件本身损坏或性能差,诸如电阻、电容的型号参数选择不正确,集成电路损坏,或速度、功耗等技术参数不合格等。
第二方面是组装错误造成的元器件失效,诸如电容、二极管、三极管的极性错误,集成块安装方向颠倒等。
3)可靠性问题
系统不可靠的因素很多,如:
金属化孔、开关或插件的接触不良所造成的时好时坏;内部和外部的干扰;电源滤波电路不完善;器件负载超过额定值造成的逻辑不稳定;地线电阻大;电源质量差,电网干扰大等等。
4)电源故障
若样机中存在着电源故障,则加电后将造成元器件损失。
因此应特别引起注意。
电源故障包括:
电压数值不符合设计要求或超出器件工作电源正常值,电源极性错误,或电源之间的错误,或电源质量指标不合格(包括稳定性、纹波等技术指标)。
2、硬件调试方法
单片机系统的硬件调试和软件调试是不能完全分开的,许多硬件错误是在软件调试中发现和被纠正的。
但通常是先排除明显的硬件故障以后,再和软件结合起来调试。
1)静态调试
在样机加电之前,先用万用表等工具,根据硬件逻辑设计图仔细检查样机线路的正确性,核对元器件,核对元器件的型号、规格和安装是否符合要求。
应特别注意电源系统检查,以防止电源的短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或和其他信号线短路)。
第二步是加电后检查各插件上引脚的电位,仔细测量各电平是否正常,尤其应注意CPU插座的各点电位,若有高压,联机仿真器调试时,将会损坏仿真器的器件。
第三步是在断电情况下,除CPU以外,插上所有的元器件,仿真插头插入样机CPU插座,并和仿真机相连,用万用表检查连接的正确性与可靠性,准备联机仿真调试。
2)联机仿真
在静态调试中,对目标机硬件进行初步调试,只排除一些明显的静态故障。
目标样机中的硬件故障(如各个部件内部存在的故障和部件之间连接的逻辑错误)主要是靠联机仿真来排除的。
分别打开样机和仿真器电源后,便开始联机仿真调试。
(1)测试扩展RAM存贮器
用仿真机读出修改目标样机扩展RAM存贮器的操作命令,将一批数据写入样机的外部RAM存贮器,然后用读样机扩展RAM的命令读出检查,若读出和写入的内容一致(任意的数据写入任意的单元正确),则扩展RAM存贮器没有故障。
若存在写不进,读不出现象,则有故障存在。
此时编一段循环读写RAM存贮器程序,并用连续方式运行,用示波器观察样机RAM电路的选片信号和读写信号,进一步查明故障点。
(2)测试I/O口和I/O设备
对于I/O口有输入和输出口之分、,也有可编程接口的差别。
应根据系统对I/O口的定义,先用仿真机的I/O写命令,把控制字写入可编程电路(如8255、8155等)的命令控制口,使之具有系统要求的逻辑结构。
然后有用仿真机的I/O写命令将数据写入输出口,观察输出口和所连设备的状态(如显示器是否被点亮、继电器、打印机是否被驱动等)。
同时用I/O口读或写命令读输入口的状态,观察读出内容和输入设备的状态是否一致(如拨盘开关,键盘等),用这种方法测试I/O接口和所连设备是否存在故障,并对故障进行定位、。
(3)测试程序存贮器
用仿真机ROM命令,使样机中的EPROM电路作为目标机的程序贮存器。
再用I/O口读命令读程序存贮器,根据读出的内容和EPROMM的内容是否一致来判断样机的程序存贮器电路是否存在故障。
(4)晶振电路和复位电路
许多仿真机是以单CPU方式开发单片机目标系统的,可以用开关选择,使目标机选用仿真机内晶振电路或样机内的晶振电路,通过使用样机内的晶振电路来测试它的功能。
按下样机中复位开关(如果存在),正常情况下,系统应被复位。
3、软件调试方法
在基本上排除了目标样机的硬件故障以后,就可以进入软硬件综合调试阶段,这个阶段的任务主要是排除软件错误,也解决硬件的遗留问题。
软件调试可以一个一个模块地进行。
下面我们对常见故障进行分析。
1)程序转跳错
这种错误的现象是程序运行不到指定的地方,或发生死循环,通常是由于错用了指令或设错了标号引起。
例如:
STRT:
CLRC
MOVA,#0F0H
LP1:
INCA
JNCLP1
GON:
MOVDPTR,#7FFFH
END
设计这段程序的目的是为了延迟一段时间。
但由于INCA指令执行结果不影响任何标志,所以JNCLOOP1这条指令执行后总是跳转到LP1,结果发生了死循环。
我们可以用单拍、跟踪、断点运行方式这一段程序。
输入断点运行命令:
在STRT,GON处后,目标机从STRT开始带断点进行,碰到GON则停下来。
但由于程序发生了死循环,碰不到断点。
此时在仿真机终端上按下停止运行键,仿真机中的8031返回监控,屏幕显示出PC、PSW、ACC等状态信息。
这种情况下,可发现程序中有死循环现象。
再输入跟踪命令:
在STRT,GON。
此时可以在终端上观察到PC、PSW、ACC等寄存器内容的动态变化,可以进一步确认程序有死循环。
若按下停止运行,则停止跟踪。
此时把A修改为FFH,从LP1开始运行一条指令,结果ACC变为0,但进位仍为0,找出错误的原因。
可以修改成下面的程序实现时间延迟:
STRT:
MOVA,#0F0H
LP1:
INCA
CJNEA,#00H,LP1
GON:
MOVDPTR,#7FFFH
2)程序错误
对于计算程序,经过反复测试后,才能验正它的正确性。
例如调试一个双字节的十进制加法程序,该程序的功能为8051内31H、30H和33H、32H单元内的BCD码相加,结果送到34H、33H、32H单元。
程序错误还有一种情况就是程序的地址超出了程序存储器的范围。
程序调试:
STRT:
MOVR0,#32H
MOVR1,#30H
MOVR7,#02H
CLRC
L1:
MOVA,@R0
ADDCA,@R1
DAA,
MOV@R0,A
INCR0
INCR1
DJNZR7,L1
CLRA
MOVACC.0,C
MOV@R0,A
L2:
NOP
RET
调试这个子程序时,先用仿真机的读出修改命令,将数据和被加数写入8031的30H~33H单元内。
然后输入断点运行命令:
在STRT,L2处,目标机以断点的方式从STRT开始运行这个子程序,碰到断点L2后,仿真机中的8031从目标状态返回监控状态。
输入读目标系统8031内部RAM的命令,8031内部RAM状态显示在终端上,观察34H~32H的内容,是否等于加数和被加数之和。
若对任意的二个数相加,所得结果都正确,则程序是正确的。
若存在错误,再用单拍方式从STRT开始一条一条指令运行,并不断监察8031的状态变化,进一步查出错误原因。
计算类子程序错误可归为二类:
一类是计算方法错误,这是一种根本性错误,必须通过重新设计算法和编制程序来纠正;另一类是编码错误,是由于错误指令造成的,这种错误可以修改局部程序来纠正。
3)输入/输出错误
这类错误包括数据传送出错,外围设备失控,没有响应外部中断等。
这类错误通常也是固定性的,而且硬件错误和软件错误常常交织在一起。
例如图8所示的A/D转换器7135接口电路,若8031没有响应AD中断,则读不到A/D的数据。
设中断0服务程序为:
PIN0:
MOVDPTR,#7F01H;读8155AD数据
MOVXA,@DPTR
…………..
RETI
先测试8051是否会执行外部中断0的服务次序,读取A/D结果。
在MAIN,PINO处输入断点运行命令,即把断点设在中断服务程序的入口,从主程序开始带断点运行,若能碰到断点,证明8051能响应外部中断0请求,再用单步运行命令或断点运行命令,进一步测试中断服务程序的正确性。
若碰不到PIN0这个断点地址。
说明8051不响应外部0中断。
这时先用示波器测试8155定时器的输出波形(7135的时钟),7135的STROBE信号和8155AD的中断请求输出线(PC0)的电平,若发现异常,则从二方面查找原因。
首先,检查硬件逻辑,其次检查对8155的初始化编程,直至各点波形正常为止。
若为低电平时,8051仍不响应中断0请求,则需要进一步检查8031的中断系统初始化编程是否有错误。
这样从硬件和软件二个方面来诊断和排除系统的输入输出故障。
4)动态错误
用单拍、断点仿真运行命令,一般只能测试目标系统的静态功能,目标系统的动态性能要全速仿真命令来测试,这时应选目标机中的晶振电路工作。
系统的动态性能范围很广,如控制系统的实时响应速度,显示器的亮度,定时器的精度,波形发生器的频率,CPU对个中断请求的响应速度等等。
若动态性能没有达到系统设计指标,有的是由于元器件速度不够造成的,更多的是由于多个任务之间的关系处理不恰当引起的。
调试时应从两方面来考虑。
5)上电复位电路错误
在联机调试是排除了硬件和软件的一切错误保障,并将程序固化到EPROM插入样机后,也能正常地运行,此时联机仿真告一段落。
一般情况下,脱机后插上CPU,目标系统便研制完成。
在个别情况下,脱机以后目标机工作不正常。
这主要由于上电复位电路故障造成的。
脱机加电后,若8051没有初始复位。
则系统不会正常运行。
这种错误联机时没有测试出来,因为单CPU仿真器,上点后的8051有仿真器中的复位电路复位。
第三节单片机应用系统研究实例
课题:
高楼水塔水位控制
设计任务:
实现水塔水位自动控制(水位自动维持在一个正常的范围之内)
设计要求:
当水位到最高极限位置时自动关闭抽水机,当水位到到低水位极限时自动开抽水设备,当水位接近低水位时发生报警信号。
应用系统设计
1、控制对象模型:
根据要求,建立如图9所示的控制对象模型。
高楼水塔模型由水位传感器、水塔、控制器三部分组成。
A点、B点、C点分别为水位的最低点、中点和最高点。
水位的测量采用三根导电棒放在水中的A、B、C三个位置,则当水位
到达B点以下时,在B=0、C=0,两点输出低电平,图9高楼水塔模型
当水位到达C点时,B=1、C=0。
2、电气控制要求:
水位与电气控制的关系如表3所示
表3水位状态与电气控制关系
C
B
操作
0
0
电机运转
0
1
维持原状
1
0
低水位报警
1
1
电机停转
3、系统资源分配
单片机输入/输出点分配:
P1.0、P1.1作为传感器状态输入;
P1.2作为启停电机的控制信号;
P1.3作为报警输出;
4、电路设计
电路如图所示(复位电路、晶振等电路略):
图10高塔水位控制电路图
5、程序设计
程序流程如图11,程序如下
ORG0000H
AJMPLOOP
LOOP:
ORLP1,#03H
MOVA,P1
JNBACC.0,ONE
JBACC.1,TWO
BACK:
ACALLDS01
SJMPLOOP
ONE:
JNBACC.1,THREE
CLR93H
SETB92H
FOUR:
SJMPFOUR
THREE:
CLR92H
SJMPBACK
TWO:
SETB92H
SJMPBACK
子程序DS01省略:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第八章 单片机应用系统设计 第八 单片机 应用 系统 设计