采用Keil C51开发8051单片机应用程序一般需要以下步骤。
① 在μVision4 集成开发环境中新建一个项目(Project),并为该项目选定合适的单片机CPU器件。
② 利用μVision4的文件编辑器编写C语言(或汇编语言)源程序文件,并将文件添加到项目中去。一个项目可以包含多个文件,除源程序文件外还可以有库文件或文本说明文件。
③ 通过μVision4的各种选项,配置C51编译器、Ax51宏汇编器、BL51/Lx51链接定位器以及Debug调试器的功能。
④ 利用μVision4 的创建(Build)功能对项目中的源程序文件进行编译链接,生成绝对目标代码和可选的 HEX 文件,如果出现编译链接错误则返回到第②步,修改源程序中的错误后重新创建整个项目。
⑤ 将没有错误的绝对目标代码装入μVision4 调试器进行仿真调试,调试成功后将HEX文件写入到单片机应用系统的EPROM中正常运行。
下面通过一个简单实例说明这几个步骤。启动μVision4后,单击“Project/New Project”菜单选项,在弹出的对话框窗口中输入项目文件名max,并选择合适的保存路径(通常为每个项目建一个单独的文件夹),单击“保存”按钮,这样就新建了一个文件名为max.uvproj的项目文件,如图1.5所示。
图1.5 在μVision4中新建一个项目
项目名保存完毕后,将弹出如图1.6所示的器件数据库对话框窗口,用于为新建项目选择一个CPU器件(窗口的Description栏对不同公司生产的8051CPU器件做了必要说明),根据需要选择CPU器件(例如Atmel公司的AT89C51),选定后μVision4将按所选器件自动设置默认的工具选项,同时弹出如图 1.7 所示的对话框,询问是否将启动代码文件STARTUP.A51添加到项目中,对于C51程序通常是需要启动代码的,单击“Y”按钮完成新建项目。
图1.6 为项目选择CPU器件
图1.7 添加启动代码文件对话框
新建一个项目后,项目中会自动包含一个默认的目标(Target 1)和文件组(Source Group 1),用户可以给项目添加其他文件组(Group)以及文件组中的源文件,这对于模块化编程特别有用。项目中的目标名、组名以及文件名都显示在μVision4的项目窗口Project标签页中。接下来给项目添加源程序文件,源程序文件可以是已有的,也可以是新建的。新建源文件时单击Files下拉菜单中的“New”选项,在打开的编辑窗口中输入下例的C51源程序。
例1-1 求两个输入数据中的较大者。
程序输入完成后,单击Files下拉菜单中的“Save As…”选项,将其另存为扩展名为.c的源程序文件max.c,其存放路径一般与项目文件相同。
μVision4 具有十分完善的鼠标右键功能,将鼠标指向项目窗口 Project 标签页中的“Source Group 1”文件组并单击鼠标右键,弹出如图1.8所示的快捷菜单。
图1.8 项目窗口的快捷菜单
单击鼠标右键菜单中的“Add Files to Group ‘Source Group 1’”选项,弹出如图1.9所示的添加源文件选择窗口,选中刚才保存的源程序文件“max.c”,并单击“Add”按钮,将其添加到新创建的项目中去。
接下来根据需要配置C51编译器、A51宏汇编器、BL51链接定位器以及Debug调试器的各项功能。单击Project下拉菜单中的“Options for Target”选项,弹出如图1.10所示的“添加源文件选择”窗口,这是一个十分重要的窗口,包括“Device”、“Target”、“Output”、“Listing”、“User”、“C51”、“A51”、“BL51 Locate”、“BL51 Misc”、“Debug”和“Utilities”多个选项标签页,其中许多选项可以直接用其默认值,必要时可进行适当调整。
图1.9 “添加源文件选择”窗口
图1.10 配置“Target”标签页
如图1.10所示为其中的“Target”标签页,用于目标硬件系统的时钟频率Xtal配置为24.0 MHz;C51编译器的存储器模式为Small(C51程序中局部变量位于片内数据存储器DATA空间);程序存储器ROM的空间设为Large(使用64KB程序存储器);不采用实时操作系统;不采用片外存储器和代码分组设计。
如图1.11所示为“Output”标签页,用于配置当前项目在编译链接之后生成的执行代码输出文件。输出文件名默认为与项目文件同名(也可以指定其他文件名),存放在当前项目文件所在的目录中,也可以单击“Select Folder For Objects…”来指定存放输出文件的目录路径。
· 选中“Create Executable”表示项目编译链接后生成可执行代码输出文件。
· 选中复选框“Debug Information”在输出文件中将包含源程序调试符号信息。
· 选中复选框“Browse Information”在输出文件中将包含源程序浏览信息。
· 选中复选框“Create HEX File”表示当前项目编译链接完成之后生成一个HEX文件。
图1.11 配置执行代码输出文件选项
如图1.12所示为“C51”标签页,用于配置当前项目对C51编译器的控制命令选项。“Preprocessor Symbols”栏用于定义C51预处理器符号,定义符号后一般要在源程序中增加相应的“ifdef”、“ifndef”、“endif”等预处理器命令。
图1.12 配置C51编译器控制命令选项
·“Code Optimization”栏用于设定C51编译器的优化级别,需要注意的是优化级别并非越高越好,应根据具体要求适当选择,关于C51编译器优化级别的详细描述请参阅本书第9章。
·“Warning”栏用于选择编译时给出警告信息的详细程度,编号越大越详细。
·“Include Paths”栏用于指定用户规定的包含文件路径,可以手工指定路径,也可以通过该栏右边的“…”按钮来浏览选择路径。
·“Misc Controls” 栏用于增加除了C51编译器默认选项之外的其他命令选项。
· 所有选定的编译命令选项都会显示在“Compiler control string”栏内。
如图1.13所示为“BL51 Locate”标签页,用于设定当前项目对BL51链接定位器的命令选项。选中复选框“Use Memory Layout from Target Dialog”时,BL51链接定位器将按前面“Target”标签页中的配置对执行代码进行存储器地址空间定位,这也是BL51的默认选项。不选该复选框则应在其他栏内填入希望的存储器地址空间范围值。关于BL51链接定位器对存储器地址空间处理的详细讨论,请参阅本书第6章。
图1.13 配置BL51链接定位器命令选项
如图1.14所示为“Options”选项中的“Debug”标签页,用于配置μVision4调试器选项。在μVision4中可以对经编译链接所生成的执行代码进行两种仿真调试:软件模拟仿真调试和硬件目标板在线调试。前者不需要实际的8051单片机硬件,在PC上就可以完成对8051单片机各种片内资源的仿真,仿真结果可以通过μVision4的串行窗口、观察窗口、存储器窗口及其他一些窗口直接输出,其优点是不言而喻的,缺点是不能观察到实际硬件的动作。
μVision4提供了多种目标硬件调试驱动,通过它可以实现μVision4与用户目标硬件系统相连接,进行在线调试,这种方法可以立即观察到目标硬件的实际动作,特别有利于分析和排除各种硬件故障。通常可以先对用户程序进行软件模拟仿真,排除一般性错误,然后再进行目标硬件在线调试。Keil公司还提供一种Monitor-51硬件调试驱动,将其作为用户硬件目标板的监控程序,可以实现与μVision4无缝连接,使用非常方便,节省用户购买硬件仿真器的费用。
进行软件模拟仿真时应选中“Debug”标签页左边的“Use Simulator”圆形单选框,进行硬件目标板在线调试时则要选中右边的“Use”圆形单选框,再在下拉选项单选中合适的目标硬件调试驱动,譬如“Keil Monitor-51 Driver”。不论采用软件模拟仿真还是采用硬件在线调试,都应选中复选框“Load Application at Startup”和“Run to main()”,这样在启动仿真调试时将立即加载当前项目编译链接后生成的可执行代码文件。
图1.14 配置Debug仿真调试选项
所有选项标签页中都有一个“Defaults”按钮,用于设定各种默认命令选项,初次使用时可以直接采用这些默认值,熟悉之后再进一步采用其他选项。有关其他标签页的详细描述请参阅本书第3章。
完成上述关于编译器、链接定位器、仿真调试等选项的基本配置之后,就可以对当前新建项目进行整体创建(Build target)。将鼠标指向项目窗口中的文件“max.c”并单击鼠标右键,从弹出的快捷菜单中单击“Build target”选项,如图1.15所示,μVision4将按前面各种选项配置,自动完成对当前项目中所有源程序模块文件的编译链接;也可以不用鼠标右键菜单,直接单击快捷按钮“Build”来完成项目文件的编译链接,如图 1.16 所示,μVision4输出窗口将显示编译链接提示信息。如果有编译链接错误,将鼠标指向窗口内的提示信息并双击,光标将自动跳到编辑窗口源程序文件发生错误的地方,便于修改;如果没有错误,则生成可执行目标代码文件。
编译链接完成后,单击快捷按钮“Start/Stop Debug Session”启动调试器,μVision4转入仿真调试状态,在此状态下“项目窗口”自动转到“Regs”标签页,显示调试过程中单片机内部工作寄存器R0~R7、累加器A、堆栈指针SP、数据指针DPTR、程序计数器PC以及程序状态字PSW等的值,如图1.17所示。
图1.15 利用右键菜单对当前项目进行编译链接
图1.16 编译链接完成后输出窗口的提示信息
图1.17 μVision4的仿真调试状态窗口
在仿真调试状态下单击快捷按钮“Run”,启动用户程序全速运行,再单击View下拉菜单中的“Serial Window/UART#1”选项,打开μVision4的串行窗口UART#1,用户程序中采用scanf()和printf()所进行的输入和输出操作,都是通过串行窗口实现的,将鼠标指向该窗口并输入数字2和9,立即得到输出结果“max=9”,如图1.18所示。关于μVision4调试器的详细介绍,请参阅本书第3章。
图1.18 μVision4调试状态下串行窗口UART#1及其数据输入和输出结果