本节书摘来自异步社区《51单片机应用开发从入门到精通》一书中的第1章,第1.5节,作者 张华杰,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.5 测试方法和工具
完成一个用户样机,首先要完成硬件组装工作,然后进入软件设计、调试和硬件调试阶段。硬件组装就是在设计、制作完毕的印制板上焊好元件与插座,然后就可用仿真开发工具进行软件设计、调试和硬件调试工作。
1.用户样机软件的设计、调试
用户样机软件设计、调试的过程如图1-25所示,可为以下几个步骤。
第一步,建立用户源程序。用户通过开发系统的键盘、CRT显示器及开发系统的编辑软件,按照所要求的格式、语法规定,把源程序输入到开发系统中,并存在磁盘上。
第二步,在开发系统机上,利用汇编软件对第一步输入的用户源程序进行汇编,变为可执行的目标代码。在汇编过程中,如果用户源程序有语法错误,则在CRT上显示出来,然后返回到第一步进行修改,再进行汇编,直至语法错误全部纠正为止。如无语法错误,则进入下一个步骤。
第三步,动态在线调试。这一步对用户源程序进行调试。上述的第一步、第二步是一个纯粹的软件运行过程,而在这一步,必须要有在线仿真器配合,才能对用户源程序进行调试。用户程序中分为与用户样机硬件无联系的程序以及与及样机硬件紧密关联的程序。
对于与用户样机硬件无联系的用户程序,例如计算机程序,虽然已经没有语法错误,但可能有逻辑错误,使计算结果不正确,这样必须借助于动态在线调试手段,如单步运行、设置断点等,发现逻辑错误,然后返回到第一步修改,直至逻辑错误纠正为止。
对于与用户样机硬件紧密相关的用户程序,如接口驱动程序,一定要先把硬件故障排除以后,再与硬件配合,对用户程序进行动态在线调试,如果有逻辑错误,则返回到第一步进行修改,直至逻辑错误消除为止。在调试这一类程序时,硬件调试与软件调试是不能完全分开的。许多硬件错误是通过对软件的调试而发现并纠正的。
第四步,将调试完毕的用户程序通过EPROM编程器(也称EPROM写入器)固化在EPROM中。
2.用户样机硬件调试
对用户样机进行调试,首先要进行静态调试,静态调试的目的是排除明显的硬件故障。
(1)静态调试
静态调试工作分为两步。
第一步是在样机加电之前,先用万用表等工具,根据硬件逻辑设计图,仔细检查样机线路是否连接正确,并核对元器件的型号、规格和安装是否符合要求,应特别注意电源系统的检查,以防止电源的短路和极性错误,并重点检查系统总线(地址总线、数据总线和控制总线)是否存在相互之间短路或与其他信号线的短路。
第二步是加电后检查各插件上引脚的电位,仔细测量各点电位是否正常,尤其应注意8031插座的各点电位,若有高压,与仿真器联机调试时将会损坏仿真器的器件。
具体步骤如下:
① 电源检查。
当用户样机板连接或焊接完成之后,先不插主要元器件,通上电源。通常用 + 5V直流电源(这是TTL电源),用万用表电压挡测试各元器件插座上相应电源引脚电压数值是否正确,极性是否符合。如有错误,要及时检查、排除,使每个电源引脚的数值都符合要求。
② 各元器件电源检查。
断开电源,按正确的元器件方向插上元器件。最好是分别插入,分别通电,并逐一检查每个元器件上的电源是否正确,以至最后全部插上元器件,通上电源后,每个元器件上电源正确无误。
③ 检查相应芯片的逻辑关系。
检查相应芯片逻辑关系通常采用静态电平检查法。即在一个芯片信号输入端加入一个相应电平,检查输出电平是否正确。单片机系统大都是数字逻辑电路,使用电平检查法可首先检查出逻辑设计是否正确。选用的元器件是否符合要求,逻辑关系是否匹配,元器件连接关系是否符合要求等。
(2)联机仿真、在线动态调试
在静态调试中,对目标样机硬件进行初步调试,只是排除了一些明显的静态故障。
用户样机中的硬件故障(如各个部件内部存在的故障和部件之间连接的逻辑错误)主要是靠联机仿真来排除的。
在断电情况下,除8031外,插上所有的元器件,并把仿真器的仿真插头插入样机上8031的插座,然后与开发系统的仿真器连接,分别打开样机和仿真器电源后,便可开始联机仿真调试。
前面已经讲到,硬件调试和软件调试是不能完全分开的,许多硬件错误是在软件调试中发现和被纠正的。所以说,在上面介绍的软件设计过程中的第三步动态在线调试中,也包括联机仿真、硬件在线动态调试以及硬件故障的排除。
开发系统的仿真器是一个与被开发的用户样机具有相同单片机芯片的系统,它是借助开发系统的资源来模拟用户样机的单片机,对用户样机系统的资源(如存储器、I/O接口)进行管理。同时仿真开发机还具有跟踪功能,它可将程序执行过程中的有关数据和状态在屏幕上显示出来,这给查找错误和调试程序带来了方便。同时,其程序运行的断点功能、单步功能可直接发现硬件和软件的问题。
下面介绍在仿真开发机上如何利用简单调试程序检查用户样机电路。
利用仿真开发机对用户样机的硬件检查,常常按其功能及I/O通道分别编写相应简短的实验程序,来检查各部分功能及逻辑是否正确,下面作以简单介绍。
① 检查各地址译码输出
通常,地址译码输出是一个低电平有效信号。因此在选到某一个芯片时(无论是内存还是外设)其片选信号用示波器检查应该是一个负脉冲信号。由于使用的时钟频率不同,其负脉冲的宽度和频率也有所不同。注意在使用示波器测量用户板的某些信号时,要将示波器电源插头上的地线断开,这是由于示波器测量探头一端连到外壳,在有些电源系统中,保护地和电源地连在一起,有时会将电源插座插反,将交流220V直接引到测量端而将用户样机板全部烧毁,并且会殃及开发机。
下面来讨论如何检查地址译码器的输出,例如,一片6116存储芯片地址为2000 ~ 27FFH,则可在开发机上执行如下程序:
LP: MOV DPFR,#2000H
MOVX A,@DPTR
SJMP LP
程序执行后,就应该从6116存储器芯片的片选端看到等间隔的一串负脉冲,就说明该芯片片选信号连接是正确的,即使不插入该存储器芯片,只测量插座相应片选引脚也会有上述结果。
用同样的方法,可将各内存及外设接口芯片的片选信号都逐一进行检查。如出现不正确现象,就要检查片选线连线是否正确,有无接触不良或错线、断线的现象。
② 检查RAM存储器
检查RAM存储器可编一程序,将RAM存储器进行写入,再读出,将写入和读出的数据进行比较,如发现错误则立即停止。将存储器芯片插上,执行如下程序:
MOV A,#00H
MOV DFFR,#RAM首地址
LP: MOVX @DPTR,A
MOV R0,A
MOVX A,@DFFR
CLR C
SUBB A,R0
JNZ LPl
INC DPTR
MOV A,R0
INC A
SJMP LP
LPl: 出错停止
如一片RAM芯片的每个单元都出现问题,则有可能某些控制信号连接不正确,如一片RAM芯片中一个或几个单元出现问题,则有可能这一芯片本身是不好的,可换一片再测试一下。
③ 检查I/O扩展接口
对可编程接口芯片(如8155、8255),要首先对该接口芯片进行初始化,再对其I/O端口进行I/O操作。初始化要按系统设计要求进行,这个初始化程序调试好后就可作为正式编程的相应内容。程序初始化后,就可对其端口进行读写。对开关量I/O来讲,在用户样机板可利用钮子开关和发光二极管进行模拟,也可直接接上驱动板进行检查。一般情况下,用户样机板先调试,驱动板单独进行调试,这样排除故障更方便些。
如用自动程序检查端口状态不易观察时,就可用开发系统的单步功能单步执行程序,检查内部寄存器的有关内容或外部相应信号的状态,以确定开关量输入输出通道连接是否正确。
若外设端口连接一片8255,端口地址为B000 ~ B003H,A口为方式0输入,B口、C口都为方式0输出,则可用下述程序进行检查:
MOV DPTR,#0B003H
MOV A,#90 ;90H为方式控制字
MOVX @DPTR,A
NOP
MOV DPTR,#0B000H
MOVX A,@DPTR ;将A口输入状态读入A,单步执行完此步后,
可暂停,检查PA
;口外部开关状态同A中相应位状态是否一致
CLR C
MOV A,#01H
INC DPTR
LP: MOVX @KPTR,A ;将01H送B口,此指令执行完后,暂停。看
B口连接的发光状态
;二极管状态,第0位是否是高电平
RLC A ;将1从第0位移到第1位
JNZ LP
INC DPTR
RLC A
LP1: MOVX @DPTR,A ;将01H送C口,此指令执行完后,看C口第0
位的输出状态
RLC A
JNZ LP1
如使用同步I/O口,例如常用的锁存器和缓冲器,可直接对端口进行读写,不存在初始化过程。
通过上面介绍的开发系统调试用户样机的过程,可以体会到离开了开发系统就根本不可能进行用户样机的调试,而调试的关键步骤——动态在线仿真调试,又完全依赖于开发系统中的在线仿真器。所以说开发系统性能的优劣,主要取决于在线仿真器性能的优劣,在线仿真器所能提供仿真开发的手段,直接影响设计者的设计、调试工作的效率。所以,它对于一个设计者来说,在了解了目前的开发系统的种类和性能之后,选择一个性能/价格比高的开发系统,并能够熟练的使用它调试用户样机是十分重要的。