找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 4912|回复: 1
收起左侧

Keil C51单片机集成开发环境编程与调试教程

[复制链接]
ID:701237 发表于 2020-3-2 16:30 | 显示全部楼层 |阅读模式
作者:刘新阳
同 VC 之类的通用 C 语言集成开发环境(IDE)一样,Keil 也采用“工程”

(Project)的方式管理源代码及相关文件,这种管理方式为由多个源代码文件组 成的大型程序开发提供了方便。不管是最简单的 C51程序,还是复杂的多文件 程序都需要以下步骤:

1)先建立新的工程文件;
2)在工程中新建源代码文件,或是将已经存在的源代码文件加入工程;
3)编译;
4)调试,修正错误再编译;

5)将生成的二进制文件*.hex 烧入单片机。 本教程重点介绍上述前 4 个步骤。

二、Keil中新建工程的步骤
1. 单击菜单“Project——New uVision Project……” 出现新建工程对话框:


在此对话框中选择存放工程各类文件的路径和文件夹,然后为工程的主文件

取个名字,以后单击该主文件即可打开这个工程项目。

2. 选择单片机型号 上个窗口关闭后,马上会呈现下面这个窗口,在这里我们要选择所使用的单

片机型号。

具体到这里,我们选择 Atmel 文件夹下的 AT89C51。(也可以选择下面的
AT89C52、AT89S51 或 AT89S52)


注意:单击 OK 后会出现下面这个提示信息:

这里一定要选“否”,即:不需要自动添加起始代码。

完成后,即可看到 Keil 主界面:


此时可以看到屏幕左侧的“Project”窗口(工程文件管理器)中,Target1 下面的 Source Group1(源代码文件组 1)为空,即现在新建的工程中还不包含任 何源代码文件。所以,接下来要做的就是新建源代码文件。

3. 新建源代码文件 单击菜单“File——New……”之后,即可在编辑区看到新建了一个名为 text1

的文本文件。 单击工具栏上的“保存”(图标为磁盘)按钮,可以在保存文件对话框中选

择这个文本文件的保存位置(一般和工程文件保存在同一级文件夹)和文件的主 名及扩展名。如果只有一个源代码文件,一般主名命名为工程名,若是 C 语言 源代码,扩展名设置为.c 即可。设置为.c 扩展名的目的,是为了告诉系统这是 C 语言源代码,Keil 会进行语法着色。

4. 将源代码文件加入工程 在屏幕左侧的“Project”窗口(工程文件管理器)中,在 Source Group 1 上

单击右键,选择 Add Source File to “Source Group 1”菜单项。



在随后弹出的对话框中选择刚才建立的源文件。


注意,这里选中文件单击“Add”后对话框并不消失,可以继续添加多个文 件,添加完成后要单击“Close”才能将对话框关闭。

关闭对话框后,可以在“Project”窗口(工程文件管理器)中看到刚才添加 进来的源代码文件:



此时,就可以在右侧的编辑区进行代码的编写了。也可以将已经编写好的代

码粘贴进来。

同理,利用“Source Group 1”上的右键菜单也可以将某个文件移除出工程, 移除并不是彻底删除掉文件(文件还保留在磁盘上原来的位置),只是将文件排 除出工程的编译范围,该文件就不会参与编译了。

5. 设置工程属性
1)单击“Project”窗口中的“Target 1”图标,使其高亮显示(蓝底白字)。

2)单击 Project——Options for Target ‘Target 1’ 打开如下窗口。 注意一定要确保步骤 1),如果是其他部分处于高亮,则找不到 2)中的菜

单项。


默认打开的是“Target”选项页,此页面的项目一般保持默认值即可。各个

项目的具体含义可参加课本 P35。 单击“Output”打开 Output 选项页:

勾选“CreateHEXFile”项,这样编译后才会生成用来烧录进单片机的二 进制程序文件(相当于 VC 中的 exe 文件),否则只编译而不生成可执行文件.


其他项目可以保持默认,生成的二进制程序文件默认保存在工程文件所在的

文件夹中,扩展名为.hex
6. 编译源代码

单击工具栏第 2 行左起第 3 个图标“ReBuild all Target Files”,即可启动编译 过程(第 2 个图标也可以,一般在修改了代码后习惯用第 3个“重新编译”),若 有错误,在下方的信息窗口中会给出提示,若显示“0 Error(s), 0 Warning(s).”(0 个错误,0 个警告)则意味着编译通过(有时有警告存在也可编译通过,只要错 误为 0 个即可,但谨慎起见,对警告也应该重视)。



单击工具栏
第 2 行,左起第 3 个图标 启动编译

此处为提示信息窗口

这里要特别注意的是,如果 Source Group 里有多个源代码文件,就像在 VC 里面一样,会将多个文件分别编译然后连接(Link)成最后的可执行文件。因此, 多个源代码文件中只能有一个 main函数。

经常出现类似这样的错误:在调试完一个程序又调试下一个时,没有新建工 程,而是新建了一个源代码文件并添加到现有的工程中,也没有把刚才调试的源 代码文件移除,这样再编译时便会出错,因为存在 2 个 main 函数。

若不想每次都新建工程,可将调试完毕的源代码文件移除出工程,再新建源 代码文件调试新的代码。或者将调试完成的代码复制出来另外保存,用待调试的 代码覆盖原文件内容即可。

三、基本调试方法

代码中的语法错误可以通过编译器的 error 信息提示,只要没有语法错误即 可通过编译,但只有通过单步执行、设置断点等调试手段,才能快速找出程序中 存在的逻辑错误。掌握基本的调试方法,对于我们观察程序的运行过程,理解程 序算法思想也是非常重要的。

1. 进入与退出调试状态

单击工具栏第 1 行中部,红色 d 字图标(Start/End Debug Session),即可进 入调试状态,再次单击该图标即可退出调试状态,对应的快捷键是 Ctrl+F5



2. 单步运行程序
进入调试状态后,第 2 行工具栏会自动变成“调试工具栏”,代码窗口中的 黄色箭头代表下一步要执行的行,刚进入调试状态时黄色箭头指向 main 函数的 第一条执行语句。

上图红线上方(第 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 个断点工具按钮

设置断点的方法:

1)将光标定位于要设置断点的行;
2)单击“设置断点按钮”。该按钮位于工具栏第 2 行,为启动调试的“红色

d”按钮后面的第 1 个按钮(图标为红色圆点,快捷键为 F9)。 如上图所示,当前程序执行到第 8 行(以黄色箭头指示),当前分别在第 10

行和第 12 行设置了 2 个断点(以红色方块表示,其中 12 行的断点为白色方块,

表示此断点当前无效,即运行到此处不会停下来)。

如果想取消断点,只需将光标定位到断点行,然后再次单击这个按钮即可。 取消断点是将断点彻底消除掉,不可恢复;如果想暂时不在断点处停止运行,

而不是永久消除断点,可以使用第 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 里的仿真运行也会 自动停止。


pdf下载:http://www.51hei.com/bbs/dpj-180551-1.html


回复

使用道具 举报

ID:342822 发表于 2020-3-2 23:27 | 显示全部楼层
Proteus 8 绑架Keil C51简单明了,不需要配置Keil C51编程环境。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表