上一篇 | 下一篇

第八章 单片机实用开发步骤(单片机应用教程之课次十八,电子圈原创)

发布: 2008-4-19 07:03 | 作者: feller | 来源: 本站原创 | 查看: 438次

        8.2单片机汇编程序的编辑方法

        单片机的程序设计可以使用机器语言、单片机汇编语言和高级语言三种编程语言。机器语言是CUP唯一能够识别的语言,其他语言必须通过编译后形成机器码供CPU识别;汇编语言是单片机系统设计中最常用的程序设计语言;高级语言通用性好,只要单片机开放系统具有编译的能力,就可以直接用高级语言编写程序。MCS51系列单片机的编译型高级语言有:PL/M51、C51、BASIC51等。

        可以使用单片机仿真器提供的软件包中的编辑器来编写单片机程序,也可以使用PC的编辑程序,例如PC上的EDIT、记事本等编辑软件。然后利用开发系统提供的汇编或编译系统,将源程序编译成可在目标机上直接运行的目标程序。该目标程序可通过PC的串行口或USB口通过编程器直接送到开放系统的可擦写ROM中。本节主要介绍利用单片机仿真器进行51汇编语言程序的编辑方法。

 

        8.2.1伟福仿真器软件包

        单片机应用系统本身并无自开放能力,需要借助于开发系统工具进行软件编辑、汇编和调试。目前国内用于MCS51单片机的开放系统很多,伟福E2000就是其中的一种,本节的内容是结合其软件包,对汇编程序的编辑等进行说明。

        8.2.2汇编源程序的编辑方法

        源程序的编辑可以在开放系统的软件包中进行。下面以一个延时程序为例介绍如何在伟福E2000仿真器的软件包中进行源程序的编辑。

        (1)单击WINDOWS界面的[开始]->[程序]->[WAVE for WINDOWS]->[wave],进入伟福软件仿真器选择界面,单击[好]进入编辑器管理窗口,如图8-5所示。

        (2)单击[文件]->[新建文件]或工具栏的[新建文件]图标,进入程序编辑器,编辑器自动为程序取名为“NONAME1”。

        (3)在编辑器中输入并修改程序,注意,字符可以大写或小写,符号和特殊字符必须为英文状态。

        (4)编辑完成后单击[文件]->[保存文件]->或[文件]->[另存文件]或工具栏的[保存文件]图标,出现保存对话框或另存对话框,输入文件名TIME1.ASM,单击[保存]按钮,完成汇编源文件的保存。如图8-6所示。


图8-5 程序编辑器管理窗口


图8-6 存储窗口

        8.3源程序的编译

        由于单片机只能执行机器语言(目标程序),因此设计者将自己的源程序编写好并以扩展名.ASM保存之后,应将源程序编译成目标程序。在编译过程中,能够检验程序的正确性,并能发现源程序中的语法错误和一般性的逻辑错误,但不能检查结构上的错误。如果有错误,汇编程序会报告,指出错误位置及错误类型。程序错误被纠正后,要重新进行编译调试,直至程序汇编无误为止。

        下面以前面编辑过的程序TIME1.ASM为例说明汇编的过程:

        (1)打开已编辑好的源程序TIME1.ASM

        (2)单击[项目]->[编译]或按F9键或工具栏的[编译]按钮,如图8-7所示。


图8-7 选择编译

        (3)编译器开始对源程序进行编译,如果源程序有错误,那么当编译到错误处时,编译会终止并在提示信息窗口报告错误类型和错误出现的位置,如图8-8所示。第8行出现错误并报告错误类型为331:操作数错。原因就是操作数的“#”使用的是中文格式的“#”。可以直接到编辑窗口修改错误,也可以在信息窗口双击错误提示行,自动转到错误程序行处进行修改(这对于较长的源程序相当有用)。

        (4)将所有符号和特殊字符错误修改完毕后,再重新编译,编译通过后系统将生成一个扩展名为.HEX和一个扩展名为.LST的文件(如图8-9),并自动于源文件放在同一个目录下。.HEX文件为目标程序文件,可以在调试后写入程序存储器,.LST文件为列表文件,将源文件与对应的目标文件组合在一起,以备查验。


图8-8 提示窗口显示编译错误信息


图8-9 编译通过后的提示窗口

        8.4程序的仿真调试

        对源程序编译形成目标程序,只是排除了语法错误和一般性的逻辑错误,只有将目标程序应用到目标样机中,经过仿真调试满足功能要求才能最后写到程序存储器中。仿真调试是对程序功能是否实现所做的最后检查。

        8.4.1仿真调试的一般步骤

        对于模块结构程序,要逐个模块分别调试。调试模块时,一定要符合现场环境,即符合入口条件和出口条件。调试的手段可采用单步运行方式和断点运行方式,通过检查用户系统CPU内部资源状态、RAM的内容和I/O的状态,检查程序执行结果是否符合设计要求。

        通过检查,可以发现程序中的死循环错误、转移地址错误、用户系统中的硬件故障、软件算法及硬件设计的错误。在调试过程中不断调整用户系统的软件和硬件,逐步通过各个程序模块。各个程序模块通过后,可以把有关的功能模块联合起来一起进行整体程序的综合调试。若在这阶段发生故障,可以考虑各个子程序在运行时是否破坏现场、缓冲单元是否发送冲突、标志位的建立和清除在设计上是否有失误、堆栈区域是否有溢出、输入设备的状态是否正常,等等。单步和断点调试后,还应进行程序连续运行调试。这是因为单步运行只能检验程序的正确与否,而不能确定定时精度和CPU的实时响应等问题。待全部调试完成后,应反复运行多次。此时,除了观察稳定性外,还要观察用户系统的操作是否符合原始设计要求以及安排的用户操作是否合理等,必须时还要做适当修正。

        实时多任务控制系统的调试方法与上述方法有很多相似之处,只是实时多任务控制系统的应用程序是由若干个任务程序组成,一般是逐个任务进行调试。逐个任务调试好以后,在使各个任务同时运行。如果控制系统中没有错误,一般情况下系统就能正常运转。

        伟福仿真器提供两种仿真手段:一是软件模拟仿真,即不需要仿真器而只是通过软件包对程序进行模拟仿真调试;二是硬件仿真,即通过仿真器直接对目标样机进行仿真调试。对程序进行仿真调试时,这两种方法的使用是一样的。仿真调试的一般步骤:

        1)编写程序。

        2)汇编、修改直至汇编无误,这时可直接进行仿真调试。

        3)也可以单击[文件]->[调入目标文件]将目标程序加载到软件包,这时就可以进行模拟仿真调试了。进行仿真调试时,在状态栏中可以观察PC、DPTR、A、PSW、SP中的值的变化,还可以观察执行至当前指令所用的时间。

        4)利用单片或跟踪逐条执行程序,并观察内部RAM、各寄存器、定时器以及外部口线的状态值是否正确。观察状态可以利用状态栏的显示、CPU窗口显示或数据窗口的显示进行,如图8-10所示。在CPU窗口或程序窗口中的任意一行中单击鼠标左键,则立即显示出该行程序中操作数的地址和内容或程序转移的地址。


图8-10 加载窗口

        5)设置一系列断点,然后运行程序,看程序能否正常地运行至断点出,同时观察RAM、各寄存器、定时器以及外部口线的状态值是否正确。断点一般设在跳转指令、跳转目的处指令、子程序入口、返回指令以及对程序的运行有重要影响的指令处。断点的设置情况如图8-11所示。

        6)在上面步骤完毕后,单击[执行]->[全速执行],全速运行程序以观察定时器和计数器的工作是否符合要求。

        8.4.1仿真调试的一般命令

        现对伟福仿真软件包的仿真命令说明如下:

        在模拟软件仿真器窗口中单击[执行]菜单,出现如图8-12所示的下拉菜单。


图8-11 断点设置


图8-12 执行菜单

执行 | 全速执行

        运行程序

  执行 | 跟踪

        跟踪程序执行的每步,观察程序运行状态。

  执行 | 单步

        单步执行程序,与跟踪不同的是,跟踪可以跟踪到函数或过程的内        部,而单步执行则不跟踪到程序内部。

  执行 | 执行到光标处

        程序从当前PC位置,全速执行到光标所在的行。如果光标所在行没        有可执行代码。则提示“这行没有代码”

  执行 | 暂停

        暂停正在全速执行的程序。

  执行 | 复位

        终止调试过程,程序将被复位。如果程序正在全速执行,则应先停        止。

  执行 | 设置PC

        将程序指针PC,设置到光标所在行。程序将从光标所在行开始执行。

  执行 | 编辑观察项

        观察变量或表达式的值,可以将需要检查和修改的值或表达式放到观察窗口里,以便检查和修改。  (图8-13:观察项对话框)


图8-13 编辑观察项

    [表达式]:  用于输入用户所要求值的表达式。

    [重复次数]:如果表达式为某一存储变量,重复次数表示以此变量开始的连续N个地址的值。

    [显示格式]:指定用何种方式显示表达式的值。

    [存贮区域]:指明变量所在的区域。

    [显示类型]:指定表达式为何种类型的变量。

    [缺省方式显示]: 按照高级语言定义的方式显示。

    [存贮器内容]:以内存方式显示观察内容,也就是按地址顺序显示变量值,与变量类型无关。

    [求值]:对表达式求值,并按显示格式显示在窗口内。

    [加入观察]:将表达式加入观察窗口中,以便随时察看。

    [编辑观察]:当修改过窗口内容后,按此键后,替代观察窗口中的原观察项,如果选择。

    [加入观察],则会在观察窗口中另加一个变量的观察项,以两种格式观察              一个变量。

    [取消]:关闭编辑观察项窗口。

 执行 | 设置/取消断点

        将光标所在行设为断点,如果该行原来已为断点,则取消该断点.

        四种方法可以在光标处设置/取消断点:

        1)将光标移到编辑窗口内,行左边的空白处,光标变成右上指箭头,双击鼠标左键,可以设置/取消断点。

        2)使用Ctrl-F8快捷键,可以在光标所在行设置/取消断点。

        3)右击鼠标, 弹出菜单,选择 [设置/取消断点]。

        4)主菜单 [执行/设置取消断点],也可以用Alt-R / B 菜单快捷设置取消断点。

        断点设置好后,当前行左空白处出现X图.如果断点有效,则当前行背景色为红,如果背景色为绿,说明当前程序行不产生代码,断点无效.

执行 | 清除全部断点

       清除程序中所有的断点。让程序全速执行

TAG: 单片机 电子 教程 开发 应用

字号: | 推荐给好友

 

评分:0

我来说两句