2024年3月27日发(作者:)

单片机开发与仿真软件Keil C51的使用

一、Keil C51 操作入门

Keil C51 简介

Keil C51 是德国知名软件公司Keil(现已并入ARM 公司)开发的基于8051 内核

的微控制器软件开发平台,是目前开发8051 内核单片机的主流工具。Keil 51支持汇

编语言、C语言等各种开发语言。其中,uVision2集成开发环境包含项目管理、源代码

编辑和强大的程序调试环境。uVision2调试器是一个强大的全特性调试器,允许用户

在PC机上完全模拟目标程序、指令集和片内外围功能。

实验所用的是Keil C51 评估版。

Keil C51 的启动

双击桌面上的“Keil uVision2”图标,启动Keil C51程序,启动界面如图1所示。

图1 Keil C51的启动界面

建立第1 个Keil C51 程序

Keil C51 是一个功能很强大的软件,但是使用起来并不复杂。现在就通过建立一

个简单的LED(发光二极管)闪烁发光的实例来初步掌握Keil C51的基本用法。硬件电

路参见图2,单片机I/O 输出低电平可点亮LED。

图2 LED 闪烁发光电路

● 新建工程。执行Keil C51 软件的菜单“Project | New Project…”,弹出一个名

为“Create New Project”的对话框。先选择一个合适的文件夹准备来存放工程文

件,比如“E:ProjectLedFlash”,其中“LedFlash”是新建的文件夹。建议:

今后每新建一个工程都要在适当的磁盘位置新建一个文件夹用来保存工程文件,以

方便管理,并养成良好的习惯。最后,为工程取名为“LedFlash”,并保存。参见

图3。

图3 新建Keil C51 工程

● 选择CPU。紧接着,Keil C51 提示选择CPU 器件。8051 内核单片机最早是由鼎鼎

大名的Intel 公司发明的,后来其他厂商如Philips 、Atmel 、Winbond 等先后

推出其兼容产品,并在8051 的基础上扩展了许多增强功能。在这里可以选择

Philips 的第1 个器件“80/87C51”,该器件与Intel 的8051 完全兼容。参见图

4 。

图4 选择CPU

● 接下来弹出一个如图5 所示的对话框。该对话框提示是否要把标准8051 的启动代

码添加到工程中去。Keil C51 既支持C 语言编程也支持汇编语言编程。如果打算

用汇编语言写程序,则应当选择“否(N)”。如果打算用C 语言写程序,一般也选

择“否(N)”,但是,如果用到了某些增强功能需要初始化配置时,则可以选择“是

(Y)”。在这里,我们选择“否(N)”,即不添加启动代码。

图5 选择是否要添加启动代码

至此,一个空的Keil C51 工程建立完毕。

● 执行菜单“File | New…”,出现一个名为“Text n”(其中n 表示序号)的文档。

● 接着执行菜单“File | Save”,弹出一个名为“Save As”的对话框。将文件名改

为“”,然后保存,参见图6 。注意:扩展名“.c”不可省略。

图6 保存新建的源程序文件

● 添加源程序文件到工程中。现在,一个空的源程序文件“”已经建立,但是这个

文件与刚才新建的工程之间并没有什么内在联系。我们需要把它添加到工程中去。

单击Keil C51 软件左边项目工作窗口“Target 1 ”上的“+”,将其展开。然后

右击“Source Group 1”文件夹,会弹出如图7 所示的选择菜单。单击其中的“Add

Files to Group 'Source Group 1' ”项,将弹出如图8 所示的对话框。

● 先选择文件类型为“C Source file (*.c)”,这时,对话框内将出现刚才保存过

的“”。单击文件“”,再按一次“Add”按钮(请不要多次点击“Add” 按钮),

最后按“Close”按钮。这时,源程序文件“ ”已经出现在项目工作窗口的“Source

Group 1 ”文件夹内,可以单击左边的“+”展开后查看。

图7 准备添加源程序文件到工程中

图8 向工程中添加源程序文件

● 现在开始输入源程序。先最大化“”源程序窗口,然后请按以下程序清单输入程序

代码。

程序清单: LED 闪烁发光程序

/********************************************************************************

程序名称:LED 闪烁发光

硬件接法: 控制LED,低电平点亮

运行效果:LED 亮200ms ,灭800ms,反复循环

*******************************************************************************/

#include <>

就表示程序没有问题了(至少是在语法上不存在问题了)。如果存在错误或警告,

则仔细检查程序是否与程序清单一致。修改后,再编译,直到通过为止。

● 编译后的结果会生成Intel HEX 格式的程序文件“”。该文件可以被专门的

芯片烧写工具载入并最终烧录到具体的芯片中。芯片安装到自己的电路板上,

通电,就可以运行里面的程序了。还有一类叫做“ISP” (In System

Programming )的下载方法,也能够把程序文件烧录到芯片内,但是采用的是

串行在线方式,芯片不必从电路板上取下。ISP 方式编程速度较慢但操作要方

便些。Philips 的多款8051 内核单片机都能很好的支持ISP 下载功能,比如

P89V51RB2 、P89V51RD2 等等。

新建A51 汇编工程

Keil C51 软件也支持A51 汇编编程。建立A51 工程的操作步骤与建立C51 工程基

本相同,但有两个要点请注意:

● 新建的源程序文件名要以”.A51”或“.ASM”作为后缀。

● A51 源程序添加到工程中时,文件类型要选择“Asm Source file(*.s*; *.src;

*.a*)”。其它操作步骤都跟建立C51 工程相同。

二、在Keil C51 下调试程序

Keil C51 的调试功能非常强大,现在仍然以LED 闪烁发光程序为例,来具体了解

如何进行仿真操作。

进入仿真状态

如果程序编译通过,就可以仿真了。在仿真之前,有一项参数最好配置一下,

仍然按“ ” 图标进入编译环境设置,找到“Xtal (MHz)”项,填入 。最后点

击“确定”。进入仿真状态很简单,直接点击工具栏红色的“ ”图标。

认识各个仿真窗口

图10 Keil C51 源程序窗口

1. 源程序窗口

Keil C51 调试界面的中间是源程序窗口,参见图10 。黄色箭头“ ”所指为当前

即将执行但还没有执行的代码。以深灰色标记的程序行是可以执行的代码(当然,在

调试过程中未必一定要去执行)。以浅灰色标记的程序行不可作为代码来执行,它们

是注释、空行、标号或ROM 数据表。以绿色标记的程序行表示曾经执行过的代码。

2. 寄存器窗口

图11 Keil C51 寄存器窗口

Keil C51 调试界面的左边是寄存器窗口,参见图11 。8051 的工作寄存器(R0~

R7) 和系统寄存器(a、b、sp、dptr、PC、psw)都列出来了。Value 栏显示的是寄

存器的当前数值。如果在调试过程中某个寄存器的值有变化,则会用蓝色的背景标记。

单击psw 寄存器左边的“+”,展开后还可以看到其每一位的情况。

3. 汇编窗口

单击工具栏的“ ”图标,源程序窗口会自动切换成汇编窗口,参见图12。在汇编

窗口里,我们可以看到每条指令的存储地址和编码等信息。再次单击“ ”,回到源

程序窗口。

4. 存储器窗口

单击工具栏的“ ”图标,将显示出存储器窗口,参见图13。8051 单片机的存储

器分为多个不同的逻辑空间。如果要观察代码存储器的内容,就在地址栏

“Address:”内输入“C: 地址”,例如:C:0080H 。同理,观察内部数据存储器输

入“I:地址”,观察外部数据存储器输入“X:地址”。拖动存储器窗口右边的滚动条

可观察其它存储单元。存储器窗口有“Memory #1~Memory #4 ”共4 个观察子窗,

可以用来分别观察代码存储器、内部数据存储器和外部数据存储器。存储器的内容是

可以修改的。用鼠标右击打算要修改的存储单元,选择“Modify Memory at … ”项,

弹出修改对话框,可以随意修改存储单元的内容。

图12 Keil C51 汇编窗口

图13 Keil C51 存储器窗口

图14 Keil C51 变量观察和堆栈窗口

5、变量观察和堆栈窗口

单击工具栏的“”图标,将显示变量观察和堆栈窗口(Watch & Call Stack

Window),参见图 14。

在Locals 标签页,会自动显示局部变量的名称和数值。在C 语言程序的函数中,

每一对花括号“{}”内定义变量都是局部变量,能够自动显示。

在“Watch ”标签页内,先用鼠标点击一次“type F2 to edit”,再按功能键

“F2”,输入所要观察的局部或全局变量的名称,回车后就能显示出当前数值。

在“Call Stack ”标签页内,可以实时地观察到堆栈的使用情况。

程序的运行控制

Keil C51 能够实现程序单步和全速运行,具体由工具栏上的按钮来实现:

● 复位按钮:单击此图标,能够使程序复位,程序将从地址C:0000H 处执行。

● 全速运行:单击此图标,能够使程序全速运行。

● 停止运行 :该图标原来是灰色(不可操作),在进入全速运行状态后会变成

红色。如果要停下来,则可以按此图标。

● 单步进入 :按此图标可以实现程序的单步执行。在遇到函数调用时,会跟踪进

入函数体。

● 单步跳过 :单步执行,遇到函数时视作1 条指令来执行,不会跟踪进入。

● 单步跳出 :在调试C 语言程序时,如果希望从某个函数中提前返回,则可以按

此图标。

● 执行到光标 :用鼠标单击某条可执行的代码(深灰色标记的程序行)。然后

按此图标,则程序开始全速执行,当遇到光标所在的行时,会自动停下来。如

果单击不可执行的程序行(有浅灰色标记),试图让程序执行到该行,是不允

许的,“ ” 图标也会立即变成灰色,不让操作。

● 设置/清除断点 :Keil C51 支持断点设置功能。单击需要设置断点的行,再

单击此图标,我们会看到该行被一个红色的小方块标记。当程序全速运行时遇

到断点,便会自动停下来。Keil C51 允许在同一个程序里设置多个断点。清除

某个断点的方法是,将光标停在该行上,再按一次“ ”图标。另外一种设置/

清除断点的快捷方法是,用鼠标在目标程序行的空白处双击,不妨试一试。

● 清除所有断点 :如果设置了多个断点,想一并清除,则可以按此图标。

图15 外围设备中的P1 和T0 对话框

外围设备访问

Keil C51 的一大特色是在仿真调试时支持对外围设备的访问。

单击菜单“Peripherals”,会弹出外围设备菜单。在Peripherals 菜单里列出了

标准8051 的外围设备(相对于CPU 内核而言):中断、I/O 端口、串行口和定时器等。

现在执行菜单“Peripherals | I/O-Ports | Port 1”,弹出P1 端口的界面。在

位0~7 中,用√表示高电平,无√表示低电平。执行菜单“Peripherals | Timer | Timer

0”,弹出定时器T0 的界面。参见图15 。

弹出的外围设备菜单是可以操作的,不妨试试。