同 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 里的仿真运行也会 自动停止。

keil集成环境c语言总结,Keil C51单片机集成开发环境编程与调试教程相关推荐

  1. 【C++ 语言】Visual Studio 配置 FFMPEG 开发环境 ( VS2019 CMake 环境安装 | 下载 FFMPEG 开发包 | 配置 FFMPEG )

    文章目录 Visual Studio 2019 社区版 CMakeList 开发环境安装 创建 FFMPEG 配置项目 FFMPEG 开发包下载 FFMPEG 头文件 静态链接库 ( .lib ) 动 ...

  2. 51单片机仿真开发环境构建实验

    51单片机仿真开发环境构建实验目录 实验目的 一.实验步骤 Step1:之前Debug,USE里面没有Proteus VSM Monitor Driver Step2:把VDM51.dll复制到Pro ...

  3. python环境配置(三)——notepad ++配置python开发环境

    1. 安装Python 1 下载 我选择了32位的2.7版本.https://www.python.org/ftp/python/2.7.8/python-2.7.8.msi 2. 安装 安装的时候可 ...

  4. 单片机---HLK-W801开发环境搭建

    总目录 <单片机-HLK-W801开发环境搭建> <单片机-HLK-W801蓝牙BLE功能测试> 最近刷淘宝,偶尔就会刷到一些国产芯片,于是买了一块海凌科的开发板,型号HLK- ...

  5. codelite14中文语言包_CodeLite(C++跨平台开发环境) V 11.0.1 中文版

    CodeLite是一款开源.跨平台的C++跨平台开发环境,采用跨平台的wxWidgets来作为GUI界面图形库,集成了cscope, tags 和 sqlite,拥有代码调试器.项目文件管理.代码自动 ...

  6. c语言开发环境 推荐,C语言复习和VC++6.0开发环境推荐.ppt

    C语言复习和VC6.0开发环境推荐 * * * * * * * * * F10-单步调试 F11-进入函数内部调试 Shift+F11-从函数内部回到调用函数(如main) Ctrl+F10-运行到光 ...

  7. vs2010c语言安装,VS2010 boost标准库开发环境安装教程

    分享VS2010 boost标准库开发环境安装教程 1. BOOST编译过程非常复杂,目前为了学习BOOST,首先搭建基于VS2010的BOOST开发环境. Boost库是一个可移植.提供源代码的C+ ...

  8. vs2010 wdk c语言,Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建.doc

    Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建.doc [置顶]Windows7+WDK+VS2010+VisualDDK驱动开发环境搭建(菜鸟的经验) 分类: 驱动开发 ...

  9. 单片机C语言数字电子时钟,全功能数字电子钟(C51单片机应用开发)

    一.设计目的: 通过单片机应用产品的设计与调试过程,巩固课程所学理论知识,初步了解单片机应用系统设计与调试的方法. 二.设计要求: 设计一个以AT89S51单片机为核心的数字电子钟控制器,实现电子钟的 ...

最新文章

  1. threejs 纹理流动_Threejs多重纹理与过程纹理实现
  2. 北斗导航 | 北斗系统信息处理创新技术(学术PPT分享附视频)
  3. 力扣:12正数转罗马数字(python) 简单粗暴解决方法
  4. 适应各个浏览器的iframe高度自动调整
  5. [2021-09-09 T2] 就差⼀点——冒泡排序和反序表之间不为人知的秘密
  6. 使用Speedment和Spring创建REST API
  7. 网络知识 -- 第二部
  8. Matlab安装指南
  9. 基于Matlab深度学习的驾驶员疲劳检测系统
  10. 在Java编程中,为什么char类型数组可以直接用数组名打印,而其他类型数组打印结果而是地址值。
  11. php设备巡检管理,设备巡检管理:你必须知道的4个玩法
  12. mpeg 音频格式科普
  13. Jira Seraph 中的身份验证绕过漏洞(CVE-2022-0540)
  14. 《CSS揭秘》-总结47个Css技巧(一):常用的背景与边框技巧
  15. UNIAPP手写签名
  16. 5个球放入3个箱子_排列组合问题,把5个相同的球放到三个相同的盒子里,要求每个盒子都有球,则不同的放球方法是多少?...
  17. Python字符串及运算
  18. pancakeswap 宝塔-本地服务器前端源码编译及部署-linux
  19. Redis热搜关键词加载,建议收藏
  20. Day5 Numerical simulation of optical wave propagation之通过随机介质(如大气湍流)的传播(一)...

热门文章

  1. ElasticSearch之score打分机制原理
  2. 如何让自己的网站快速被搜索引擎找到
  3. 如何编程访问(读,写)Revit项目信息
  4. 大数据分析与应用(中级) 数据预处理与特征工程
  5. 交易系统开发(九)——Dark Pool技术
  6. QT随机放1个1和七个2_天热了鸡蛋容易坏,不用放进冰箱,老农教你1招,放2个月还新鲜...
  7. IDEA中如何快速的阅读源码
  8. 腾讯云 对象存储Java文件上传 学习资料整理
  9. The Cross-section of Expected stock returns 1992翻译
  10. Qt与脚本初探:QtScript, PyQt, PythonQt, Qt Jambi