同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用“工程”
(Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发提供了方便。不管是最简单的 C51程序,还是复杂的多文件 程序都需要以下步骤:
1)先建立新的工程文件;
2)在工程中新建源代码文件,或是将已经存在的源代码文件加入工程;
3)编译;
4)调试,修正错误再编译;
5)将生成的二进制文件*.hex 烧入单片机。 本教程重点介绍上述前 4 个步骤。
二、Keil中新建工程的步骤
1. 单击菜单“Project——New uVision Project……” 出现新建工程对话框:
此时可以看到屏幕左侧的“Project”窗口(工程文件管理器)中,Target1 下面的 Source Group1(源代码文件组 1)为空,即现在新建的工程中还不包含任 何源代码文件。所以,接下来要做的就是新建源代码文件。
4. 将源代码文件加入工程 在屏幕左侧的“Project”窗口(工程文件管理器)中,在 Source Group 1 上单击右键,选择 Add Source File to “Source Group 1”菜单项。
关闭对话框后,可以在“Project”窗口(工程文件管理器)中看到刚才添加 进来的源代码文件:
默认打开的是“Target”选项页,此页面的项目一般保持默认值即可。各个项目的具体含义可参加课本 P35。 单击“Output”打开 Output 选项页:
勾选“CreateHEXFile”项,这样编译后才会生成用来烧录进单片机的二 进制程序文件(相当于 VC 中的 exe 文件),否则只编译而不生成可执行文件.
单击工具栏
第 2 行,左起第 3 个图标 启动编译
此处为提示信息窗口
这里要特别注意的是,如果 Source Group 里有多个源代码文件,就像在 VC 里面一样,会将多个文件分别编译然后连接(Link)成最后的可执行文件。因此, 多个源代码文件中只能有一个 main函数。
经常出现类似这样的错误:在调试完一个程序又调试下一个时,没有新建工 程,而是新建了一个源代码文件并添加到现有的工程中,也没有把刚才调试的源 代码文件移除,这样再编译时便会出错,因为存在 2 个 main 函数。
若不想每次都新建工程,可将调试完毕的源代码文件移除出工程,再新建源 代码文件调试新的代码。或者将调试完成的代码复制出来另外保存,用待调试的 代码覆盖原文件内容即可。
三、基本调试方法
代码中的语法错误可以通过编译器的 error 信息提示,只要没有语法错误即 可通过编译,但只有通过单步执行、设置断点等调试手段,才能快速找出程序中 存在的逻辑错误。掌握基本的调试方法,对于我们观察程序的运行过程,理解程 序算法思想也是非常重要的。
1. 进入与退出调试状态
单击工具栏第 1 行中部,红色 d 字图标(Start/End Debug Session),即可进 入调试状态,再次单击该图标即可退出调试状态,对应的快捷键是 Ctrl+F5。
上图红线上方(第 2 行工具栏即调试工具栏)的前 5 个按钮是最常用的。
第 1 个按钮为“CPU 复位”,相当于按下复位按钮,不管现在程序运行到何 处,马上回到程序开始执行之前的状态。
第 2 个按钮为“全速运行程序”,快捷键 F5,即开始正常运行程序,如果连 接有仿真器或是联机 Proteus 软件仿真(具体方法后面讲),则在硬件设备或者 Proteus 界面上可以看到真实的运行效果(如 LED 的闪烁)。
第 3 个按钮为“Stop”,停止程序的运行。因单片机上的程序主体多为死循 环,一旦启动不会停止,可以通过此按钮结束程序。也可以直接单击上面的红色d 按钮(Ctrl+F5)直接退出调试状态。
第 4 个按钮为“单步执行”,快捷键 F11,第 5 个按键也是单步执行,快捷 键 F10。如果你熟悉 VC 的调试方法,对这两个快捷键一定不会陌生,这里与 VC 里的含义完全相同,F10 会把函数调用语句当成是一行处理,即不会进入函 数内部,如需进入函数内部跟踪调用过程,可按 F11。通过这两个按钮的图标(一 个箭头指向{}内,一个越过{})也可以很直观地区分。
第 6 个按钮(图标为从{}内跳出的箭头)的功能是从被调函数返回主程序, 对应快捷键为 Ctrl+F11,如果单步运行时不想进入函数内部,但误按了 F11,可 可以用这个功能返回。注意按这个按钮时并不是不再执行被调函数内的语句,而 是不再单步执行被调函数内的语句,全速执行完所有剩余的语句,回到调用函数 处。
第 7 个按钮(图标为箭头指向{}),功能是执行到当前光标所在行,快捷键 是 Ctrl+F10,如果单步执行的过程中想全速执行一段代码(如前面有一个需要运 行 1000 次的循环,如果不用全速运行的话,必须按 1000 次 F10,此时可以将光 标定位到该循环的后面,然后按Ctrl+F10)。
3. 监视寄存器、变量及端口的状态 单步执行的目的是为了能跟踪各个变量、寄存器及端口的状态变化,以便找出程序编写中存在的逻辑错误。下面是常用的 3 种方法:
1)单步执行的过程中,鼠标指向代码中相关变量,会提示其当前值。
2)在左侧的“Register”(寄存器状态)窗口中,可以看到部分特殊功能寄 存器的值,如果某个值刚刚被修改,则会高亮显示。
3)打开 Peripherial菜单,可以查看各中断、I/O口、串口及定时/计数器的 状态,这在调试相关程序时非常有用。
这是单击“Port 0”子菜单后,打开的 P0 口各位状态的窗口:
第 1 行显示的是 P0 口端口寄存器的状态,如果执行了对 P0 写的语句(如
P0=0x00),这里的状态就会发生改变。
第 2 行显示的是 P0 端口各对外引脚的状态,默认为全 1,当需要模拟外部 输入的时候,可以通过单击第 2 行的相应位进行输入(有勾表示 1,无勾表示 0)。 如现在想模拟 P0.0 引脚上输入一个低电平,则只需将第 2 行最右端(第 0 位) 的勾去掉。接下来当程序读取 P0.0引脚时,就会读到 0。
4. 设置断点 调试程序时如果仅靠单步执行,则显得过于麻烦。特别是对于一些比较大型
的程序,我们可能只希望对其中一部分代码仔细跟踪观察,此时可以设置断点。 顾名思义,断点就是程序执行到此处就会停下来,这时可以再结合单步执行来仔
细追踪调试。
4 个断点工具按钮
表示此断点当前无效,即运行到此处不会停下来)。
如果想取消断点,只需将光标定位到断点行,然后再次单击这个按钮即可。 取消断点是将断点彻底消除掉,不可恢复;如果想暂时不在断点处停止运行,而不是永久消除断点,可以使用第 2、第 3 个按钮将断点设置为暂时无效。
第 2、第 3 个断点按钮(红色圆点图标后面,分别为单个红色圆圈和两个红 色圆圈)的功能是将当前光标所在行的断点(第 2 个按钮)或所有断点(第 3 个按钮)设置为无效或有效。注意这同样是个乒乓开关,按一下设为无效,再按 一下又恢复为有效。
第 4 个按钮(图标为两个红点和一个黄叉)的功能是删除所有断点,对应的 快捷键是 Ctrl+Shift+F9。
5. 调试状态下的其他窗口
这些按钮对应于各个调试窗口在调试状态下,除了上面所提到的寄存器窗口、代码窗口外,还可以看到很 多其他窗口,这些窗口都可以通过工具栏第 2 行后半部分的各个按钮打开和关闭。
常用的有以下几个:
Disassembly Window(反编译窗口,对应红线上方第 2 个按钮,上图中最右 上方的窗口):该窗口中显示每一行代码对应的汇编语言指令;
Symbol Window(标识符窗口,对应红线上方第 3 个按钮,上图中最右下方 的窗口):该窗口中显示程序中全部变量、常量及函数的数据类型、存储空间、地址及当前值。
Memory Window(存储器窗口,对应红线上方第 7 个按钮),可显示内部 RAM、内部 ROM 及外部 ROM 等存储的信息。在地址前加 D:则显示内部 RAM 中的信息,地址前加 C:则显示内部 ROM(程序存储器)中的信息,地址前加 X:则显示外部 ROM 中的信息。
6. 配置 Keil 与 Proteus 联机仿真
在 Proteus 中绘制好硬件电路图,在 Keil 中调试运行程序,即可在 Proteus 中观察到硬件的运行状态(如 LED 的闪烁、继电器的动作等),这样可以在不需 要实际焊接硬件线路和烧录程序的前提下实现纯软件仿真。
实现 Keil 与 Proteus 联机仿真的设置如下:
(一)计算机系统中应该安装有 TCP/IP 协议(一般操作系统默认安装,任 何能正常上 的计算机都满足这个条件),因为两个软件是通过该协议通信的。 需要注意的是当出现防火墙的拦截提示时,应该选择“解除阻止”,允许其正常 通信。
(二)Keil 端的设置
参见前面设置工程属性(第 5 页)的操作步骤,打开“Options for Targe‘t
1’”菜单,在工程属性窗口中,选择“Debug”标签页:
Target

单击选中红色椭圆中的“Use”前的单选钮,并将其后的下拉菜单设置为
“ProteusVSMSimulator”,若找不到这一项,可以先关闭 Keil,下载一个名为
vdmagdi.exe 的驱动程序并安装后,再次打开 Keil 即可。 其他均保持默认,至此,Keil 端设置完成。
(三)Proteus 端的设置
Proteus 端的设置很简单,只需将“Debug”菜单下的“Use Remote Debug
Monitor”勾选上即可。
完成上面的设置后,在 Keil 里面启动调试,并运行程序(单步或全速均可), 即可在 Proteus 里面看到响应。在 Keil 里停止调试后,Proteus 里的仿真运行也会 自动停止。
文章知识点与官方知识档案匹配,可进一步学习相关知识C技能树首页概览114462 人正在系统学习中 相关资源:2012年下半年软件设计师上午试题及答案-软考等考文档类资源-CSDN…
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!