基于单片机的嵌入式工程开发详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.3 编译环境

常用的MCS-51系统单片机的编程语言有两种,汇编语言和C语言。汇编语言执行效率高,不过可读性和可移植性并不强。尤其是复杂一些的系统,使用汇编语言开发,程序通常难以读懂。而由于C语言的简洁及其应用于单片机系统开发时的便利性、可读性和易于移植,因此得到了广泛的应用。C语言还可以嵌入汇编,来编写需要高时效实现的代码。使用C语言还可以有效缩短开发周期。

本书的编程语言也选择了C语言。C编译器选择了“Keil μVision2”。它支持众多不同公司的MCS-51架构的芯片,是一个集编辑、编译和仿真于一体的集成开发环境。界面友好、仿真功能强大。本节将对它做详细的介绍。

1.3.1 “Keil μVision2”主界面介绍

在“Windows”下运行“Keil μVision2”后,程序启动后的界面如图1-9所示。

图1-9 “Keil μVision2”界面

1.菜单栏

“Keil µVision2”的菜单栏共有11个选项,如图1-10所示。

图1-10 菜单栏

● “File”(文件)菜单:类同于许多窗口软件的功能,对文件的一般操作,比如新建、打开、存储、打印等。值得注意的是此菜单中有一个选项“Device Database”,用于维护“μVision2”器件数据库,在此可以增加和修改“8051”芯片资料,便于在建立项目时选择已定的“8051”芯片。

● “Edit”(编辑)菜单:对文档的一般操作,比如剪切、粘贴、查找等。值得注意的是书签选项。“Toggle Bookmark”命令设定一个书签后,用快捷键“F2”或组合键“Shift+F2”就可以在不同书签前后跳转了,方便文档的编辑。选择“Clear All Bookmarks”清除全部已定义的书签。

● “View”(视图)菜单:用于控制“μVision2”的界面显示,使用此菜单的选项可以显示或隐藏一些工具栏和窗口。比如浏览窗口、反汇编窗口、符号变量窗口等。

● “Project”(项目)菜单:对项目的特定操作,比如项目的建立、关闭、维护等。值得注意的是“Options…”命令,改变目标、组或文件的工具选项。此命令用得比较多,在后面的使用中将会谈到。

● “Debug”(调试)菜单:与常见的程序调试菜单很相似,此菜单的命令用于软件仿真环境下的调试,提供了断点、单步、跟踪等操作指令。

● “Flash”(烧写)菜单:用于将程序下载到芯片中,要有针对专门芯片的烧写驱动程序才可以使用此菜单。

● “Peripherals”(外围部件)菜单:外围模块菜单命令,用于控制芯片的复位和片内功能模块的控制。此命令很少使用。

● “Tools”(工具)菜单:主要用于支持第三方调试系统。此命令很少使用。

● “SVCS”(软件版本控制系统)菜单:配置和运行软件版本控制系统。此命令很少使用。

● “Window”(视窗)菜单:用于设置窗口的排列方式。

● “Help”(帮助)菜单:用于软件的帮助信息和版本说明。

2.工具栏

工具栏如图1-11所示,工具栏中包括了常用的操作,下面对一些不同于传统的按钮进行介绍。

图1-11 工具栏

此按钮对应菜单命令“Edit→Toggle Bookmark”,用于在光标的当前行创建书签。

此按钮对应菜单命令“Edit→Goto Next Bookmark”,移动光标到下一个书签处。

此按钮对应菜单命令“Edit→Goto Previous Bookmark”,移动光标到上一个书签处。

此按钮对应菜单命令“Edit→Clear All Bookmark”,清除所有定义的书签。

此按钮对应菜单命令“Edit→Find in Files”,在项目打开的多个文件中查找。

此按钮对应菜单命令“Edit→Find”,在当前窗口的文件中查找。

此按钮对应菜单命令“View→Source Browser”,用于显示或隐藏编辑窗口。

此按钮对应菜单命令“Debug→Start/Stop Debug Session”,启动或停止调试模式。

此按钮对应菜单命令“View→Project Window”,用于显示或隐藏项目窗口。

此按钮对应菜单命令“View→Output Window”,用于显示或隐藏输出窗口。

此按钮对应菜单命令“Debug→Insert/Remove Break Point”,在光标所在行建立或删除断点。

此按钮对应菜单命令“Debug→Kill All Break Point”,清除已建立的断点。

此按钮对应菜单命令“Debug→Enable/Disable Break Point”,允许或禁止当前断点。

此按钮对应菜单命令“Debug→Disable All Break Point”,禁止所有断点。

3.编译工具栏

编译工具栏如图1-12所示。该工具栏用于应用程序的生成和文件的编译操作。

图1-12 编译工具栏

此按钮对应菜单命令“Project→Translate”,编译当前打开的文件。

此按钮对应菜单命令“Project→Build Target”,编译项目中修改过的文件并生成应用程序。

此按钮对应菜单命令“Project→Rebuild Target”,编译项目中所有的文件并生成应用程序。

此按钮对应菜单命令“Project→Stop Target”,停止正在编译的任务。

此按钮对应菜单命令“Flash→Download”,把应用程序烧写入芯片,不常使用。

此按钮对应菜单命令“Project→Option for Target”,改变目标、组或文件的工具选项。

4.编辑窗口

在编辑窗口中,用户可以输入或修改源代码,这也是编程的工作区间,“Keil μVision2”的编辑器支持程序行自动对齐和语法高亮度显示。

5.状态栏

状态栏位于事件窗口的最下方,如图1-13所示,显示当前命令执行的状况、光标所在的行列位置、数字键盘锁定、插入状态和覆盖状态。

图1-13 状态栏

6.项目窗口

项目窗口有三个选项页,分别是“Files”、“Regs”、“Books”。

● “Files”页如图1-14所示,显示当前项目的组织结构,每个源文件所引用的头文件,双击文件名可以在编辑窗口打开相应的文件。

图1-14 项目窗口的“Files”页

● “Regs”页如图1-15所示,显示单片机在当前状态下各个主要寄存器的值,对刚刚改变完状态的寄存器,会以高亮的形式显示。

图1-15 项目窗口的“Regs”页

● “Books”页如图1-16所示,显示帮助文档,双击可以打开相应的帮助文档。

图1-16 项目窗口的“Books”页

7.输出窗口

输出窗口也有三个选项页,分别是“Build”、“Command”和“Find in Files”。

“Build”页如图1-17 所示,用于显示编译时的输出信息。在窗口中双击输出的“Warning”或“Error”信息,可以直接跳转到相应的有警告或语法错误的语句。

图1-17 输出窗口的“Build”页

“Command”页如图1-18 所示,为用户提供调试命令交互环境,在输入命令前应使“Keil μVision2”为调试模式,其他相关的命令读者可以阅读帮助文档。

图1-18 输出窗口的“Command”页

“Find in Files”页如图1-19所示,显示在多个文件中搜索的结果,双击搜索结果只可以跳转至相应的位置。

图1-19 输出窗口的“Find in Files”页

1.3.2 创建项目

“Keil µVision2”中的项目文件是一个特殊结构的文件,它的扩展名为“Uv2”,包含应用开发系统相关所有文件的组织关系。一个项目怎样建立,将在后面章节里(第3章最小系统的建立)进行详细介绍。

1.3.3 编译与连接

项目建立好后,就可以对项目中的文件进行编译创建目标文件。方法很简单,单击按钮,编译当前打开的单个文件;单击按钮,编译项目中修改过的文件;单击按钮,编译项目中所有的文件。编译完成后会在项目的当前位置生成一个“Output”的文件夹,并把相应的目标文件(obj)和连接生成的十六进制文件(.hex)放在此文件中。

在进行编译和连接前,需要根据开发的硬件环境在“Keil μVision2”中进行配置,当然一些配置在创建项目时就设置好了,此时也可以调整。执行菜单命令“Project→Options for Target”,就会打开“Options for Target”对话框,如图1-20所示。其中有多个选项页,“Device”、“Target”、“Output”、“C51”这4个选项页最为常用,下面分别对其进行详细介绍。其他的选项页不经常使用,读者可以参见“Keil μVision2”提供的文档进行学习。

图1-20 “Device”选项页

1.“Device”选项页

“Device”选项页如图1-20所示。主要是修改目标使用的单片机型号。比如本书的项目就是选择了华邦的芯片。一般大厂家的51芯片这里都有提供,如果没有,可以在“File→Device Database”中维护“μVision2”器件数据库,以增加51芯片资料。

2.“Target”选项页

“Target”选项页如图1-21所示。主要用于设置51芯片的存储器环境。

图1-21 “Target”选项页

各个选项的功能如下。

● “Xtal”:该选项用于设定单片机振荡频率,多数情况下,它的值和晶振频率相同。

● “Use On-chip ROM”:选中该选项,使用片内ROM。

● “Use On-chip XRAM”:选中该选项,使用片内RAM。此选项会针对不同的芯片有所不同,有的芯片没有扩展的RAM,就没有此项,因为项目的芯片“W78E516B”具有片内辅助RAM,所以有此选项。

● “Memory Model”:指定C51编译器的存储模式。默认“SMALL”是很好的选择。

● “Code Rom Size”:片内程序存储器的大小。

● “Operatiing”:选择是否需要RX51操作系统环境。该项目使用另外的一种操作系统在后面会讲到。

● “Off-chip Code memory”:根据系统硬件的连接情况设置片外ROM的起始地址和大小。最多可以设置3段不连续的外部程序存储空间。

● “Off-chip Xdata memory”:根据系统硬件的连接情况设置片外RAM的起始地址和大小。最多可以设置3段不连续的外部数据存储空间。

● “Code Banking”:代码分体设置。很少使用,可以参见相关技术文档。

这里将C51编译器的存储模式“Memory Model”设置为“SMALL”模式,存储类型为“data”。这也是编译器的默认设置。编译器的存储模式有“SMALL”、“COMPACT”、“LARGE”三种。对于存储类型,也可选择“data”、“bdata”、“idata”、“pdata”、“xdata”或“code”。具体如表1-9和表1-10所示。一般选择默认设置即可。

表1-9 存储模式

表1-10 存储类型

3.“Output”选项页

“Output”选项页如图1-22所示。定义工具链的输出文件。各个主要选项的功能如下。

图1-22 “Output”选项页

● “Select Folder for Objects”:设定编译生成的文件的输出路径。

● “Name of Executable”:设定编译生成的文件的名字。

● “Create Executable”:选中该选项后,生成编程器生成HEX格式的文件。这就是16进制文件了,用烧写器给芯片写入的程序就是这个文件。

● “Run User Program”:生成“HEX”格式的文件后,调用外部的程序,可以调用两个程序。比如调用专用的烧写程序来写芯片。

4.C51选项页

如图1-23所示。用来设置C51编译器专用的工具选项,使用这些选项可以改进代码的质量。各个主要选项的功能如下。

图1-23 C51选项页

● “Define”:相当于在项目文件中输入“#define XXX”。

● “Undefine”:仅在“Group”和“File Option”对话框中有效,用于消除项目或组中设定的“#define XXX”。

● “Code Optimization Level”:设定C51的优化程度,一般情况下保持默认值即可。

● “Code Optimization Emphasis”:代码优化的侧重方向。选择“Favor size”,优化注重代码的大小;“Favor speed”:优化注重代码的执行速度。

● “Global Register Coloring”:全局寄存器优化变量。

● “Don't use absolute register accesses”:禁止绝对寄存器(R0~R7)寻址,这将增加代码的长度,但可以使代码与选择的寄存器无关。

● “Warnings”:用于设定C51的警告等级。

● “Bits to round float”:设定浮点数比较前保留的位数。

● “Interrupt vectors at address”:中断向量的基地址。

● “Keep variables in order”:让编译器按照源程序声明变量的先后次序来分配内存。

● “Enable ANSI integer promotion rules”:允许“ANSI”整数扩展。

● “Include Paths”:包含文件的路径。

● “Misc Controls”:允许输入特殊的C51指示符。

● “Compiler control string”用于显示C51编译器限制字符串。

1.3.4 程序调试

整个项目完成后,就可以进行调试工作。选择其中一个按钮,完成对文件或整个项目文件的编译,单击按钮,进入程序调试状态,如图1-24所示。在调试模式里,可以设置断点,单步执行,观察变量等操作。

图1-24 程序调试窗口