首页 理论教育 基于汇编与C语言的单片机调试技术

基于汇编与C语言的单片机调试技术

时间:2023-10-23 理论教育 版权反馈
【摘要】:图9-5系统调试的一般过程9.1.4.1单片机应用系统调试工具当用户样机完成硬件和软件设计,全部元器件安装完毕后,在用户样机的程序存储器中放入编写好的应用程序,系统即可运行。

基于汇编与C语言的单片机调试技术

系统调试包括硬件调试、软件调试和软、硬件系统联调。根据调试环境不同,系统调试又分为模拟调试与现场调试。各种调试所起的作用是不同的,它们所处的时间段也不一样,不过它们的目的都是为了查出用户系统中存在的错误或缺陷。系统调试的一般过程见图9-5。

图9-5 系统调试的一般过程

9.1.4.1 单片机应用系统调试工具

当用户样机完成硬件和软件设计,全部元器件安装完毕后,在用户样机的程序存储器中放入编写好的应用程序,系统即可运行。但应用程序运行一次性成功几乎是不可能的,多少会存在一些软件、硬件上的错误,需借助单片机的系统调试工具进行调试,发现错误并加以改正。最常用的调试工具有单片机开发系统、万用表、逻辑笔、逻辑脉冲发生器与模拟信号发生器、示波器和逻辑分析仪等几种。其中,万用表、示波器及开发系统是最基本的、必备的调试工具。

1.单片机开发系统

单片机开发系统(又称仿真器)的主要作用是:系统硬件电路的诊断与检查;程序的输入与修改;硬件电路、程序的运行与调试;程序在ROM中的固化。

2.万用表

万用表主要用于测量硬件电路的通断、两点间阻值、测试点处稳定电流或电压值及其它静态工作状态。例如,当给某个集成芯片的输入端施加稳定输入时,可用万用表来测试其输出,通过测试值与预期值的比较,就可大致判定该芯片的工作是否正常。

3.逻辑笔

逻辑笔可以测试数字电路中测试点的电平状态(高或低)及脉冲信号的有无。假如要检测单片机扩展总线上连接的某译码器是否有译码信号输出,可编写一循环程序使译码器对一特定译码状态不断进行译码。运行该循环程序后,用逻辑笔测试译码器输出端,若逻辑笔上红、绿发光二极管交替闪亮,则说明译码器有译码信号输出;若只有红色发光二极管亮(高电平输出)或绿色发光二极管亮(低电平输出),则说明译码器无译码信号输出。这样就可以初步确定由扩展总线到译码器之间是否存在故障。

4.逻辑脉冲发生器与模拟信号发生器

逻辑脉冲发生器能够产生不同宽度、幅度及频率的脉冲信号,它可以作为数字电路的输入源。模拟信号发生器可产生具有不同频率的方波正弦波、三角波、锯齿波等模拟信号(不同的信号发生器能够产生的信号波形不完全相同),它可作为模拟电路的输入源。这些信号源在模拟调试中是非常有用的。

5.示波器

示波器可以测量电平、模拟信号波形及频率,还可以同时观察两个或三个信号的波形及它们之间的相位差(双踪或多踪示波器)。它即可以对静态信号进行测试,也可以对动态信号进行测试,而且测试准确性好。它是任何电子系统调试维修的一种必备工具。

6.逻辑分析仪

逻辑分析仪能够以单通道或多通道实时获取与触发事件的逻辑信号,可保存显示触发事件前后所获取的信号,供操作者随时观察,并作为软、硬件分析的依据,以便快速有效地查出软、硬件中的错误。逻辑分析仪主要用于动态调试中信号的捕获。

9.1.4.2 单片机仿真开发系统简介

单片机只是一个芯片,既没有键盘,又没有CRT、LED显示器,无法进行软件的开发(如编辑、汇编、调试程序等),必须借助某种开发工具(也称为仿真开发系统)所提供的开发手段。一般来说,仿真开发工具应具有如下最基本功能:

(1)用户样机程序的输入与修改。

(2)程序的运行、调试(单步运行、设置断点运行)、排错、状态查询等功能。

(3)用户样机硬件电路的诊断与检查。

(4)有较全的开发软件。用户可用汇编语言或C语言编制应用程序,由开发系统编译连接生成目标文件、可执行文件。配有反汇编软件,能将目标程序转换成汇编语言程序;有丰富的子程序可供用户选择调用。

(5)将调试正确的程序写入到程序存储器中。目前国内使用较多的仿真开发系统大致分为如下两类:

1)通用机仿真开发系统。目前设计者使用最多的一类开发装置,是一种通过PC机的并行口、串行口或USB口,外加在线仿真器的仿真开发系统,如图9-6所示。

图9-6 通用机仿真开发系统

在线仿真器一侧与PC机的串口(或并口、USB口)相连。在线仿真器另一侧的仿真插头插入到用户样机的单片机插座上,对样机的单片机进行“仿真”。从仿真插头向在线仿真器看去,看到的就是一个“单片机”。这个“单片机”是用来“代替”用户样机上的单片机。但是这个“单片机”片内程序的运行是由PC机上的软件控制的。由于在线仿真器有PC机及其仿真开发软件的强大支持,可以在PC机的屏幕上观察用户程序的运行情况,可以采用单步、设断点等手段逐条跟踪用户程序并进行修改和调试,以及查找软、硬件故障。

在线仿真器除了“出借”单片机外,还“出借”存储器,即仿真RAM。就是说,在用户样机调试期间,仿真器把开发系统的一部分存储器“变换”成为用户样机的存储器。这部分存储器与用户样机的程序存储器具有相同的存储空间,用来存放待调试的用户程序。在调试用户程序时,仿真器的仿真插头必须插入用户样机空出的单片机插座中。当仿真开发系统与PC机联机后,用户可利用PC机上的仿真开发软件,在PC机上编辑、修改源程序,然后通过交叉汇编软件将其汇编成机器代码,传送到在线仿真器中的仿真RAM中。这时用户可用单步、断点、跟踪、全速等方式运行用户程序,系统状态实时地显示在屏幕上。程序调试通过,再使用编程器,把调试完毕的程序写入到单片机内的Flash存储器中或外扩的ROM中。此类仿真开发系统是目前最流行的仿真开发工具。配置不同的仿真插头,可以仿真开发各种单片机。(www.xing528.com)

通用机仿真开发系统中还有另一种仿真器:独立型仿真器。该类仿真器采用模块化结构,配有不同外设,如外存板、打印机、键盘/显示器等,用户可根据需要选用。在工业现场,往往没有PC机的支持,这时使用独立型仿真器也可进行仿真调试工作,只不过要输入机器码,稍显麻烦一些。

2)软件仿真开发工具Proteus。它是一种完全用软件手段对单片机应用系统进行仿真开发的。软件仿真开发工具与用户样机在硬件上无任何联系。通常这种系统是由PC机上安装仿真开发工具软件构成,可进行应用系统的设计、仿真、开发与调试。

在使用Proteus软件进行仿真开发时,编译调试环境可选用Keil C51μVision 4软件。该软件支持众多不同公司的MCS-51架构的芯片,集编辑、编译和程序仿真等于一体,同时还支持汇编和C语言的程序设计,界面友好易学,在调试程序、软件仿真方面有很强大的功能。用Proteus软件调试不需任何硬件在线仿真器,也不需要用户硬件样机,直接就可以在PC机上开发和调试单片机软件。调试完毕的软件可以将机器代码固化,一般能直接投入运行。

尽管Proteus软件具有开发效率高,不需要附加的硬件开发装置成本。但是软件模拟器是使用纯软件来对用户系统仿真,对硬件电路的实时性还不能完全准确地模拟,不能进行用户样机硬件部分的诊断与实时在线仿真。因此,在系统开发中,一般是先用Proteus设计出系统的硬件电路,编写程序,然后在Proteus环境下仿真调试通过。然后依照仿真的结果,完成实际硬件设计。再将仿真通过的程序烧录到编程器中,然后安装到用户样机硬件板上去观察运行结果,如有问题,再连接硬件仿真器去分析、调试。

9.1.4.3 硬件调试

单片机应用系统的软硬件调试是分不开的,通常是先排除明显的硬件故障后再和软件结合起来进行调试。常见的硬件故障有逻辑错误、元器件失效、可靠性差和电源故障等。

硬件调试可分静态调试与动态调试两步进行。其中,静态调试是在用户系统未工作时的一种硬件检查;动态调试是在用户系统工作的情况下发现和排除用户系统硬件中存在的器件内部故障、器件间连接逻辑错误等的一种硬件检查。由于单片机应用系统的硬件动态调试是在开发系统的支持下完成的,故又称为联机仿真或联机调试。

在进行硬件调试时先进行静态调试,用万用表等工具在样机加电前根据原理图装配图仔细检查线路,核对元器件的型号、规格和安装是否正确,然后加电检查各点电位是否正常,接下来再借助仿真器进行联机调试,分别测试扩展的RAM、I/O口、I/O设备、程序存储器以及晶振和复位电路,改正其中的错误。

9.1.4.4 软件调试

软件调试就是排查系统软件中的错误。常见的软件错误有程序失控、中断错误(不响应中断或循环响应中断)、输入/输出错误和处理结果错误等类型。

通常是把各个程序模块分别进行调试,通过后再组合到一块进行综合调试。达到预定的功能技术指标后即可将软件固化。

1.先独立后联机

宏观来说,单片机应用系统中的软件与硬件是密切相关、相辅相成的。软件是硬件的灵魂,没有软件,系统将无法工作;同时,大多数软件的运行又依赖于硬件,没有相应的硬件支持,软件的功能便荡然无存。因此,将两者完全孤立开来是不可能的。然而,并不是用户程序的全部都依赖于硬件,当软件对被测试参数进行加工处理或作某项事务处理时,往往是与硬件无关的,这样,就可以通过对用户程序的仔细分析,把与硬件无关的、功能相对独立的程序段抽取出来,形成与硬件无关和依赖于硬件的两大类用户程序块。这一划分工作在软件设计时就应充分考虑。

2.先分块后组合

如果用户系统规模较大、任务较多,即使先行将用户程序分为与硬件无关和依赖于硬件两大部分,但这两部分程序仍较为庞大的话,采用笼统的方法从头至尾调试,既费时间又不容易进行错误定位,所以常规的调试方法是分别对两类程序块进一步采用分模块调试,以提高软件调试的有效性。

在调试时所划分的程序模块应基本保持与软件设计时的程序功能模块或任务一致。除非某些程序功能块或任务较大才将其再细分为若干个子模块。但要注意的是,子模块的划分与一般模块的划分应一致。

3.先单步后连续

调试好程序模块的关键是实现对错误的正确定位。准确发现程序(或硬件电路)中错误的最有效方法是采用单步加断点运行方式调试程序。单步运行可以了解被调试程序中每条指令的执行情况,分析指令的运行结果可以知道该指令执行的正确性,并进一步确定是由于硬件电路错误、数据错误还是程序设计错误等引起了该指令的执行错误,从而发现、排除错误。

9.1.4.5 系统联调

系统联调主要解决以下问题:

(1)软、硬件能否按预定要求配合工作,如果不能,那么问题出在哪里,如何解决?

(2)系统运行中是否有潜在的设计时难以预料的错误。如硬件延时过长造成工作时序不符合要求,布线不合理造成有信号串扰等。

(3)系统的动态性能指标(包括精度、速度参数)是否满足设计要求?

9.1.4.6 现场调试

一般情况下,通过系统联调后,用户系统就可以按照设计目标正常工作了。但在某些情况下,由于用户系统运行的环境较为复杂(如环境干扰较为严重、工作现场有腐蚀性气体等),在实际现场工作之前,环境对系统的影响无法预料,只能通过现场运行调试来发现问题,找出相应的解决方法;或者虽然已经在系统设计时考虑到抗干扰的对策,但是否行之有效,还必须通过用户系统在实际现场的运行来加以验证。另外,有些用户系统的调试是在用模拟设备代替实际监测、控制对象的情况下进行的,这就更有必要进行现场调试,以检验用户系统在实际工作环境中工作的正确性。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈