单片机应用系统的硬件调试

🏠 首页 《无线电》杂志 1996年 🔗 第9期 🔗 第28页 分类:无线电技术自学经验交流 🔗 陆小华 🔗, 周振安 🔗

在研制单片机应用系统过程中,完成了系统硬件的原理图设计后,一项重要的工作就是进行系统硬件的调试,通过实验与调试来验证和完善原理图的设计功能。其次,按照原理图,一块新电路板制成后,仍有可能存在某些故障,如连线错误、断线、粘连等,使电路板组装好后不能正常工作,这同样要对系统硬件进行调试检测。因此,掌握系统硬件调试的基本方法对初次接触单片机系统设计的读者来说是十分重要的一环。

与传统的电子线路比较,单片机应用系统电路设计中引进了总线的概念和地址的概念,CPU通过总线将各个单元电路联系起来并进行统一编址,CPU按照地址实现对各单元电路的控制,因此在调试方法上有它自己的特殊性。在调试工具上,除了必要的通用设备如示波器、万用表以外,还要有专用设备,例如要有相应的开发装置,还要有相应调试软件的配合。

一个单片机应用系统,无论其硬件结构多么复杂,它最终总是可以分解成若干个基本的单元电路,我们可以逐个进行单元电路调试,排除故障。只有在各单元电路都正常工作后,才有可能保证整个系统正常工作。下面以一个基本的单片机系统为例,谈谈系统硬件调试的基本方法。

一、单片机控制系统基本结构及其初测

单片机控制系统的硬件结构如图1所示。大致可分解为以下几大部分,即CPU、程序存储器和数据存储器、键盘与显示电路、译码电路、I/O接口电路等。

图1
图1 🔍原图 (564×315)

在进行单元电路调试之前,首先要保证系统电源供电正常,保证用户板内没有电源短路故障。因此一块新制作的电路板初次上电之前,不要急于插入芯片,首先用万用表检查电路板上的电源和地线之间有无短路。这种对系统所进行的初测工作是十分必要的。系统初测大致步骤如下:

1)拔下板上的所有芯片(板上插有芯片时),接通电源,并用电流表监视电源的负载电流大小,一般情况下正常时的负载电流是很小的,其量级可由电路参数估算出来。如果电路中没有接入耗能器件,如电源变换器、发光管等,其电流应趋近于零。如果电流偏大,而电路中又无二极管、三极管等有源器件,说明电路接线有问题,应立即切断电源,检查连线。如果接有二极管或三极管,则应着重检查这些器件的极性是否接反。

2)用电压表测量各芯片插座各个引脚的电位,特别要注意电源脚和接地端的电位,以排除电源端和地端的漏接或短接故障,保证插上芯片后不会烧坏芯片。

3)依次插上各个单元电路的芯片,每插上一个单元电路芯片,接通电源读一下总的负载电流,负载电流应在正常值之内,一般中小规模TTL集成电路静态电流在几毫安到十几毫安范围,大规模TTL集成电路都在几十毫安范围,而CMOS电路的静态电流差不多比同类型的TTL型电路要小一个数量级。如果某个芯片插上之前和插上之后的电流差别较大(超过正常值),则可断定该芯片已坏,应及时更换。如此循环,直到插完所有芯片。这一步骤是完全必要的,可避免将坏芯片插入电路,给后期工作带来不必要的麻烦。

通过以上几个步骤的初测,可排除一些明显的电源接线故障,至于逻辑上的错误,某些时序上的错误,可在各个单元电路的进一步调试时解决。

二、CPU电路的调试

CPU电路包括CPU芯片、时钟电路及复位电路等相关电路。CPU电路的调试,主要是用示波器观察一下系统时钟的波形以及一些相应的时序波形,如MCS-51的ALE地址锁存信号、PSEN信号等,这些信号在系统上电复位后应该出现。

复位电路必须可靠,复位时间常数要大致估算一下,不能太小,太小了不能保证系统可靠复位,一般不小于10毫秒。

总线电路一般属于CPU单元电路范围内,但总线电路不便于单独调试,可在存储器电路调试时一并考虑。

三、译码电路的调试

译码电路的功能实际上是将地址总线和某些控制线通过一定的逻辑电路产生特定的逻辑地址,在整个系统的地址编排上,有将程序存储器、数据存储器、I/O口地址统一编排的,也有将三者独立编址的,这要取决于系统规模的大小。

在单片机应用系统中,译码电路的输出脉冲相当于CPU对系统各单元发出的一系列指令,在这些指令的作用下,系统各单元按照一定的顺序,按步就班地工作。因此译码电路是否正常会影响到系统各单元能否正常工作。下面以74LS138译码器芯片为例,介绍译码电路的调试方法。

译码单元的电路结构如图2所示。

图2
图2 🔍原图 (714×444)

图中P1.7为单片机8031的一条I/O口线,当P1.7为高电平,且CPU产生读写脉冲(作读/写操作)时,译码器芯片74LS138被选通,此时地址线A7,A6,A5的不同编码决定了选中的译码地址。

Y0至Y7的译码地址分别如下:

A15 A14-A8 A7 A6 A5 A4-A0 译码信号 地址

1 XX-XX 0 0 0 XX-XX Y0 8000H-0FF1FH

1 XX-XX 0 0 0 XX-XX Y1 8020H-0FF3FH

1 XX-XX 0 1 0 XX-XX Y2 8040H-0FF5FH

1 XX-XX 0 1 1 XX-XX Y3 8060H-0FF9FH

1 XX-XX 1 0 0 XX-XX Y4 8080H-0FFBFH

1 XX-XX 1 0 1 XX-XX Y5 80A0H-0FFBFH

1 XX-XX 1 1 0 XX-XX Y6 80C0H-0FFDFH

1 XX-XX 1 1 1 XX-XX Y7 80E0H-0FFFFH

译码电路的调试实际上就是用示波器来观察这些译码脉冲能否正常给出。调试时,先编写出一小段程序进入仿真器或单板机,程序分别以Y0~Y7为目标地址作循环读写操作,然后用示波器观察74LS138的相应引脚的输出波形,正常情况下能够看到清晰的波形,调试软件框图如图3所示。

图3
图3 🔍原图 (301×641)

软件中给出适当的延时,可以控制译码脉冲出现的频率,便于示波器观察。

按照上述操作可能观察到以下几种情形:

1)输出波形完全正常;

2)Y0~Y7引脚中有个别观察不到输出脉冲,而其它引脚均有正常输出;

3)完全观察不到输出脉冲。

第一种情形是我们预期的结果,第二种情形则说明译码器芯片损坏,或者有可能是该输出引脚被钳位。如果出现第三种情形则仍须进一步检查译码器的输入端接线,逐级向前追踪检查,直到输出正常。

四、数据存储器的调试

数据存储器芯片的引脚除了地址总线和数据总线以外,还有三条控制线,即片选线(6264芯片有两条片选线)CS,读/写控制线RD/WR。存储器单元在控制信号的作用下按照地址线指定的存储单元将数据总线上的数据写入存储器或者将数据读出到数据总线上,如图4所示。

图4
图4 🔍原图 (405×341)

存储器的调试方法如下:首先将用户板与仿真器或单板机接好,然后将事先准备好的调试程序输入仿真器或单板机。程序的基本功能是对RAM中的某个单元或某些连续单元送入固定数据,然后再读出并与输入的数据进行比较,若完全一样则说明RAM工作正常。若不一样,则有两种可能的表现形式:一种可能是读出的数据完全是随机的,与输入的数据无关;另一种可能是读出的数据与输入虽不一样,但差别仅固定在某一位。

出现第一种情况时应着重检查一下几条控制线逻辑是否正确,是否存在片选信号和读/写脉冲,若这些信号都正常,可更换一片存储器芯片再试试。当出现第二种情形时,则应着重检查数据总线是否错接或粘连,具体操作时可通过反复改变输入数据并不断读出数据,每输入一次数据后紧跟着读出一次进行比较,找出错误规律,从而确定故障位置。

还有一种可能是无论输入什么数据,读出的数都无变化,这有很大可能是没有写脉冲,输入的数据根本就没有写进。

五、I/O口的调试

I/O口即输入/输出接口电路是CPU与各种应用电路相连接的中间媒介。I/O与CPU的连接方式有查询式和中断式两种,一种比较简单的连接方法是由数据总线和译码地址脉冲来实现I/O口的输入/输出操作。

I/O接口电路的调试方法实际上是用示波器检查CPU输出到接口的状态信息,或检查CPU读取的信息正确与否。

I/O口一般分为缓冲型I/O口,锁存型I/O口及可编程型I/O口三类。不同类型的接口电路,其调试方法也不一样,下面分别叙述。

1)缓冲型I/O口的调试

缓冲口的特点是其数据在输出端停留的时间是瞬间的,常用的缓冲型接口芯片有74LS244、74LS245等。缓冲型I/O口实际上就是一组三态门,三态门的控制端由译码地址线来控制。

由于缓冲口输出的信息是瞬间的,要想用示波器观察出输出信息,调试软件也必须循环操作,其具体操作过程可参考RAM的调试步骤。

一般来说,只要译码脉冲输出正常,该输出口即正常,除非该I/O芯片损坏,或该芯片的输出端被嵌位。因为数据总线经过存储器调试这一环节后一般不会再有故障。

74LS245实际上是一组双向三态门,其中有一条控制线是用来控制数据传递方向的,因此74LS245可以由程序控制输入或输出,74LS245通常用作数据总线驱动器。

2)锁存型I/O口的调试

带锁存的I/O接口芯片一般用作输出口,常用的芯片有74LS273、74LS373等,其内部一般由D触发器组成,其特征是撤去输入数据,输出数据依然存在,直到下一次被修改。根据这一特征,调试时只要将该口各位分别输出高电平或低电平,然后用电压表读出并进行比较就可判断出该口是否正常。

3)可编程I/O接口的调试

可编程I/O接口芯片一般为大规模集成电路芯片,如8155、8255、PIO等。由于这些接口芯片的I/O口可由软件来控制编程,要想正确使用,必须要对芯片的工作原理有所了解,特别是对芯片的各个控制字的各位的定义要十分清楚,才能用好这类芯片。

正确使用可编程I/O口的关键是对这些芯片进行正确的初始化,即由程序送入正确的控制字。介绍可编程接口芯片的使用方面的资料很多,笔者也曾多次在《无线电》上介绍过,这里就不再赘述,下面仅就与调试相关的问题作一介绍。

对初学者来说,第一次使用这类芯片最好参考一下相近的使用资料,用程序对芯片写入控制字,然后进行输入输出操作,一般来说,重复别人使用过的电路,只要接线没有差错,都会成功的,剩下的工作就是逐渐修改控制字,看看CPU输出或读入的信息是否与你所期的结果相一致,直到最终与自己的设计目标一致为止。

六、键盘/显示电路的调试

键盘/显示电路实际上是I/O接口的具体应用。比较典型的键盘接口电路采用矩阵式结构,如图5所示为四乘四矩阵结构。

图5
图5 🔍原图 (588×398)

其工作过程是这样的:首先由锁存型输出口依次将各位都置为低电平(其余位为高),然后随即由输入口读取各位,如果读取的各位为全高,则说明无键按下,若其中某位为低,则该行有键按下,根据输出为低电平的行号就能确定所按下的键。

调试时应注意键号与行列号的对应关系。

基本调试步骤如下:

1)由程序控制输出口的第一行为低(或手动使第一行为低);

2)依次按下第一行的各键;

3)由输入口读取各列状态,此时相应各列应为低;

4)依次二、三、四各行,直到所有按键的键号都与行列号一一对应。

键盘电路调试过程中常见的几种故障现象及其处理:

1)输出口各位都不能动作,此时应检查输出口的片选线,是否有片选脉冲(检查方法可参照译码电路的调试步骤)。

2)输出口的某个位恒为低或恒为高。首先应检查该输出线是否与地或与电源短接,如果这一步骤正常,继续检查该接口的输入线(即数据总线的相应位)。

3)同时出现两条以上的输出口线为低,此时最大可能是有多条数据线粘连在一起。

4)某些键按下的输入口读取的数不对,或者说程序对该键没有反应。可能是该键接触不好,可用短路线将其直接短路试试。

5)任意一个键按下时,输入口都没有反应,此时问题出在输入口,应着重检查输入口片选线的片选脉冲,若片选脉冲正常,可换一片接口芯片再试试。

必须强调,上述步骤只解决键盘电路的硬件故障,要使键盘电路正常工作,还必须要有软件的配合。有关键盘管理软件的编写问题笔者也曾经在《无线电》杂志上有过详细介绍,这里从略。

显示电路的调试也可归结为输出口的调试,其调试步骤与键盘电路的调试相接近,所要注意的是,显示器耗电较大,要注意各口线的驱动能力。

最后我们再简单说一下,即使系统各单元都没有了硬件故障,软件的各个功能也都正常,整个系统仍有可能工作不正常。此时应注意以下几个问题:

1)认真检查硬件有无虚焊;

2)接插件连接是否可靠;

3)键盘/显示的扫描延时时间的选择是否合理;

4)一些片选线,中断源的脉冲边沿问题,是上升沿动作还是下降沿动作,如果逻辑不对,可插入反门;

5)各个片选脉冲的时间顺序问题。(周振安 陆小华)