Keil 5是基于Windows操作系统的集成开发环境,包含对源程序的编辑、工程项目管理、编译、调试。它支持C语言、汇编语言、宏定义等的编译,能产生十六进制格式的机器代码HEX,还能加速嵌入式应用程序的开发。本节将全面介绍Keil 5的软件界面和操作方法,并通过实例讲述如何使用Keil 5开发应用程序。
开发人员可以用Keil 5编辑器或其他编辑器编译C语言或汇编语言源程序文件,然后分别由C51语言和A51语言编译生成目标文件(.obj)。目标文件可由LIB51创建生成库文件(.lib),也可与库文件一起经L51链接定位生成绝对目标文件(.abs)。绝对目标文件由OH51置换成标准的HEX文件,以供调试器进行源代码级调试,也可由仿真器直接对目标板进行调试,或直接写入程序存储器,如可擦可编程只读存储器(Erasable Programmable Read-Only Memory,EPROM)、Flash中进行验证。
Keil 5支持命令模式和工具条操作。一个工具条内有多个命令按钮,源文件以窗口的形式进行编辑。Keil 5有对话框、信息显示等,人机界面友好、操作方便、易学易用。
(1)全功能原始代码编辑。
(2)开发工具配置及可选择相应芯片的数据库。
(3)通过工程管理可以很方便地创建和管理工程。
(4)集成源程序的编译、连接、生成机器代码等,用户可以很方便地得到HEX文件。
(5)所有开发工具的配置都是基于窗口或对话框的图形界面。
(6)集成高速CPU及对单片机外围器件的模拟,另外还有信号发生及信号分析等功能。
(7)高级的图形设备接口(Graphics Device Interface,GDI)在目标硬件的软件调试和与Keil ULINK的连接方面,都可用于硬件仿真。
(8)支持对Flash的程序下载。
(9)可通过网站下载最新的工具、芯片的数据库和用户操作手册。
Keil 5提供了许多功能,能让人加快开发速度并成功开发嵌入式应用程序。由于这些功能(工具)易于使用,因而能实现对设计目标的保证。Keil 5集成开发环境有两种操作模式:编译模式和调试模式。
(1)编译模式。
在编译模式下,可以编辑源程序和项目中的源文件并产生应用程序。图1.13所示为Keil 5的编译模式界面。
(2)调试模式。
调试模式用来验证程序的结果并能与外部Keil ULINK USB-JTAG适配器进行连接,构成硬件仿真系统,还可以下载应用程序到目标系统的Flash 只读存储器(Read-Only Memory,ROM)中。图1.14所示为Keil 5的调试模式界面。
图1.13 Keil 5的编译模式界面
图1.14 Keil 5的调试模式界面
窗口可以停靠到另一个窗口、多文档界面(Multiple Document Interface,MDI),甚至可以浮动到另一个屏幕上。只要拖动一个窗口,就会显示几个停靠符号,图1.15所示为窗口拖动操作。这适用于从菜单视图和所谓的项目窗口中选择的大多数窗口,但是,源代码文件必须留在文本编辑器窗口中。
图1.15 窗口拖动操作
移动窗口到另外一个位置的步骤如下。
(1)单击窗口的标题栏或页面/目标名。
(2)拖动窗口到停靠标记处。
(3)松开鼠标。
创建应用程序是通过窗口及菜单进行操作的,通过工程管理可以很容易地设计基于单片机的应用程序。创建应用程序主要包括创建项目文件并选择CPU、创建新的源程序、添加源程序到项目中、创建文件组、设置硬件调试操作工具、配置CPU启动代码、编译项目并生成应用程序代码、生成HEX文件或可编程只读存储器(Programmable Read-Only Memory,PROM)程序。下面依次进行讲解。
1.选择“Project>New µVision Project...”,打开Create New Project对话框,输入新项目名及保存路径,如图1.16所示。用户可以根据项目特点对项目进行命名,还可以使用新建文件夹图标创建新的文件夹并用于保存新建的项目。
图1.16 Create New Project对话框
2.完成第1步操作后单击“保存”,会弹出选择CPU的对话框,如图1.17所示。展开“Atmel”,选择“AT89S51”。
图1.17 选择CPU的对话框
3.完成第2步操作后单击“OK”,会弹出复制并添加CPU启动代码的对话框,如图1.18所示。选择“是”就会自动生成CPU启动代码。
图1.18 复制并添加CPU启动代码的对话框
通过新建命令图标 或“File>New”命令创建一个新的源程序文件,这将打开一个空的编辑窗口,这个窗口可用来输入程序的源代码。使用保存文件对话框的“File>Save As...”,并将其保存为.c文件(如果是汇编源程序应保存为.asm文件)。以下示例的文件名为main.c。
【例1-1】 创建源程序文件。
#include "stdio.h" #include "reg51.h" //引用51单片机reg51.h头文件 /****************************************************************************** * Function: main * author: gxt * date: 2018.03.06 * Description: * Test工程的主函数 * Parameters: * NONE * Return: * NONE ******************************************************************************/ void main(void) { unsigned int delay; //以下代码的作用是初始化串行口,为printf接口输出做好准备 SCON = 0x50; //8位数据,可变波特率 TMOD &= 0x0F; //清除定时器1模式位 TMOD |= 0x20; //设定定时器1为8位自动重装方式 TL1 = 0xFD; //设定定时初值 TH1 = 0xFD; //设定定时器重装值 ET1 = 0; //禁止定时器1中断 TR1 = 1; //启动定时器1 TI = 1; //发送中断标志位置1 //串行口初始化代码结束 while(1) { printf("Test By Gxt\n"); //调用标准输出接口输出字符串"Test By Gxt\n" while(1); //无限循环 } }
将创建的源文件添加到新建的项目。Keil 5提供了多种方法将源代码文件添加到项目。例如,可以选择项目(Project)工作区中的Source Group 1,单击鼠标右键,在弹出的图1.19所示的快捷菜单中选择“Add Existing Files to Group‘Source Group 1’...”,会弹出图1.20所示的对话框,在该对话框中选择main.c文件,然后单击Add就可以把main.c文件添加到项目中。也可以使用“Project>Manage>Project Items”打开管理项目项对话框进行添加(详见“四、创建文件组”)。
用户可以创建文件组,并以代码文件结构为逻辑块,简化代码的维护。通过鼠标右键单击目标名称并选择Add Group,也可以将文件拖放到组名上来重新排列顺序或添加文件。使用“Project>Manage>Project Items”打开Manage Project Items对话框,创建文件组如图1.21所示。
图1.19 快捷菜单
图1.20 添加文件对话框
图1.21 创建文件组
在Files栏中可以单击“Add Files...”增加文件到选中的组中,也可以用按住鼠标左键拖动的方式来重新排列该组中的源文件顺序。
项目工作区显示项目名称、活动目标名称以及所有的组和文件、图标标识项目类型和权限。在项目工作区双击某个文件,可以打开该文件进行编辑。例如,打开main.c文件内的reg51.h文件,只需在图1.22所示的界面双击“reg51.h”即可。
图1.22 创建文件组后的项目界面
Keil 5允许配置开发环境。通过工具栏图标 或通过“Project>Options for Target ‘Target 1’...”命令,在目标选项对话框中指定硬件所有相关参数和所选设备的芯片组件,如图1.23所示。
图1.23 目标选项对话框
(1)Device(设备):为项目选择单片机。
(2)Target(目标):指定目标硬件参数。
(3)Output(输出):配置可执行文件、库文件输出和十六进制文件输出。
(4)Listing(清单):配置清单文件。
(5)User(用户):配置预构建和后构建活动。
(6)C51(或CX51):配置编译器选项。
(7)A51(或AX51)(在设备下启用时):配置汇编器选项。
(8)BL51 Locate(或LX51定位)(在设备下启用时):指定链接器/定位器内存位置指令。
(9)BL51 Misc(或LX51 Misc)(在设备下启用时):输入其他链接器/定位器指令。
(10)Debug(调试):配置µVision调试器/模拟器。
(11)Utilities(实用程序):配置Flash下载实用程序。
通过编译工具对源程序进行编译,编译工具如图1.24所示。
图1.24 编译工具
打开“Options for Target ‘Target 1’...”后,选择“Output”,生成HEX文件设置对话框如图1.25所示。可以通过“Select Folder for Objects...”选择生成的HEX文件保存路径。“Name of Executable:”右边为生成的HEX文件的名称。需要生成HEX文件,还必须将“Create HEX File”前面的复选框选中。选中“Create Library:.\Objects\Test.LIB”可以生成Test.LIB库文件,而选中“Create Batch File”前面的复选框可创建批处理文件。
图1.25 生成HEX文件设置对话框
用户在编辑或调试源代码时,可单击工具栏中的 图标,在多个文件中使用查找命令,以便快速定位代码。在多个文件中使用查找命令查找“In”的对话框如图1.26所示,单击“Find All”后的查找结果如图1.27所示。
图1.26 查找“In”
图1.27 查找结果
源代码浏览器可显示用户代码中的符号信息。首先需要在图1.25所示的对话框中配置输出浏览器信息(选择“Target>Output>Browser information”),然后使用“View>Source Browser Window”命令打开浏览界面。浏览界面如图1.28所示。
图1.28 浏览界面
单击调试工具图标 或通过命令“Debug>Start/Stop Debug Session”(或按Ctrl+F5快捷键)可进入调试模式。在调试模式下仍可对程序源文件进行编辑。调试工具如图1.29所示。
图1.29 调试工具
调试工具从左至右,依次为CPU复位、全速执行、停止执行、单步进被调模块内执行、单步不进被调模块内执行、单步跳出被调模块内部执行、执行到光标所在行。
通过汇编窗口可以看出用C51语言编写的代码被翻译成汇编语句及相关寄存器的值。打开汇编窗口的方法是:单击 图标或使用“View>Disassembly window”命令。汇编窗口如图1.30所示。
图1.30 汇编窗口
单击 图标或使用“View>Analysis Window>Logic Analyzer”命令打开逻辑分析窗口,如图1.31所示。
图1.31 逻辑分析窗口
可在Keil 5安装目录\Examples\Hello中打开Hello实例进行学习,也可使用下述步骤建立一个新的项目进行学习。
1.新建源程序文件
使用“file>New...”命令、单击 图标或按Ctrl+N快捷键,新建一个源程序文件,并保存为D:\Keil51\test\Hello.c。输入下列程序后再次保存。
#include <REG52.H> /*特殊功能寄存器头文件*/ #include <stdio.h> /*标准输入/输出头文件*/ void main(void) { SCON = 0x50; /*模式1,8位数据,允许数据接收*/ TMOD |= 0x20; /*定时器1,模式2,8位自动重装初值模式*/ TH1 = 0xE6; /*设置,12MHz晶振,1200波特率,TH1初值*/ TR1 = 1; /*TR1:运行定时器1*/ TI = 1; /*TI:设置发送标志为1*/ while (1) { P1 ^= 0x01; /*每输出一行字符串,P1.0取反1次*/ printf ("Hello World\n"); /*输出 "Hello World"*/ } }
2.新建项目
使用“Project>New µVision Project...”命令,新建一个项目,保存为D:\Keil51\test\Simulator,并将新建的源程序文件添加到项目中。
3.项目设置
使用“Project>Options for Target 'Simulator'”命令或单击快捷图标 ,打开Target 'Simulator' 配置窗口,选择Device选项卡并选择好芯片组件数据库,如图1.23所示。参照1.2.2小节配置好其他相关参数。
4.项目编译调试
参照1.2.3小节相关内容编译好项目,并进入调试界面,全速执行;使用“View>Serial Windows>UART #1”命令,打开串行口1观察其运行结果,如图1.32所示。
图1.32 Hello World 运行结果