图3 Keil Uvision2 IDE 的组成
2.2 Keil uVision2软件的使用步骤 2.2.1.建工程。打开Keil uVision2软件,选择Project/New project…,将弹出一个Creat New Project的对话框,选择要存放的文件夹,输入文件名(不需要加扩展名)。如下图所示。
图4 建立工程
选择SST89E564RD芯片,点击确定。
图5 选择芯片
2.2.2在工程下新建文件。点击File/New 或点击图标入Text1,然后点击File/Save或点击图标
, 出现Text1界面,将程序写
,将弹出如下界面:
图6保存源文件
输入文件名,如果是汇编语言文件名后要加上.asm的扩展名,如果是用c语言编写则扩展名是.c。点击保存。会发现所有关键词变成蓝色,可以用这种方式初步检查程序有无错误。 2.2.3.将文件加入工程中。右键点击左侧的Source Group 1,选择Add Files to Group ‘Source Group 1’.
图7加入文件
选择要添加的源文件,点击Add。完成设置。
2.2.4.设置目标选项。点击工具条中的图标。在“Target”标签下修改“Xtal (Mhz) ”
为单片机的晶体振荡频率,选中Use On-chip ROM。
图8 参数设置窗口
在“Output”标签下,选中“Create HEX file”(生成hex文件用编程器写到目标板的SST89E564RD单片机中)。
图9 设置是否生成.hex目标文件
在“debug”标签中选中“Use keil monitor-51 driver”,此时可以进行串口连接目标电路板进行仿真调试,如果选中“Use Simulator”,则仅仅只进行软件仿真。
图10 调试相关参数设置
用鼠标左键单击“Setting”按键,根据你用的串口用鼠标选择Port,左键单击“ok”按键,选中“Load Application at Start”和“Go till main()”。
图11 串口参数设置 其余可以按默认值不需修改,点击“确定”完成设置。 2.2.5 编译。点击Project/Build target或者
,即完成了编译。在Keil界面的最下面的界
面中会显示Error和Warning.如果源程序中有语法错误,会有错误报告出现,双击该行,可
以定位到出错的位置,对源程序反复修改之后,最终会得到如图6所示的结果,提示获得了名为**.hex的文件,该文件即可被编译器读入并写到芯片中,同时还产生了一些其它相关的文件,可被用于Keil的仿真与调试,这时可以进入下一步调试的工作。
图12 正确编译、连接之后的结果
2.2.6 调试。在对工程成功地进行汇编、连接之后,使用菜单Debug/Start/Stop Debug Session即可进入调试状态,仿真CPU用来模拟执行程序,可以在没有硬件和仿真机的情况下进行程序的调试。进入调试状态后,工具栏会多出一个用于运行和调试的工具条。如图7所示,Debug菜单上的大部分命令可以在此找到对应的快捷按钮,从左到右依次是复位、运行、暂停、单步、过程单步、执行完当前子程序、运行到当前行、下一步状态、打开跟踪、观察跟踪、反汇编窗口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、工具按钮等命令。点击工具条中选项即可以进行调试程序。
图13调试工具条
学习程序调试,必须明确两个重要的概念,即单步执行与全速执行。全速执行是指一行程序执行完以后紧接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果,即最终结果正确还是错误,但如果程序有错,则难以确认出现在哪些程序行。单步执行时每次执行一行程序,执行完该行程序以后即停止,等待命令执行下一行程序,此时可以观察该行程序执行完以后得到的结果,是否与我们写该行程序所想要得到的结果相同,借此可以找到程序中问题所在。程序调试中,这两种运行方式都要用到。使用菜单STEP或相应的命令按钮或使用快捷键F11可以单步执行程序,使用菜单STEP OVER或功能键F10
可以以过程单步形式执行命令,所谓过程单步,是指将 图14 调试窗口 汇编语言中的子程序或高级语言中的函数作为一个语句来全速执行。按下F11键,可以看到源程序窗口的左边出现了一个黄色调试箭头,指向源程序的第一行,如图11所示。每按一次F11,即执行该箭头所指程序行,然后箭头指向下一行,当箭头指向LCALL DELAY行时,再次按下F11,会发现,箭头指向了延时子程序DELAY的第一行。不断按F11键,即可逐步执行延时子程序。
通过单步执行程序,可以找出一些问题的所在,但是仅依靠单步执行来查错有时是困难的,或虽能查出错误但效率很低,为此必须辅之以其他的方法,如本例中的延时程序是通过将D2:DJNZ R6,D2这一行程序执行六万多次来达到延时的目的,如果用按F11六万多次的方法来执行完该程序行,显然不合适,为此,可以采取以下一些方法,第一,用鼠标在子程序的最后一行(ret)点一下,把光标定位于该行,然后用菜单Debug/Run to Cursor line