1.4 单片机应用系统的软件开发步骤
1.工程建立
1)启动Keil Vision3软件
假设Keil μVision3软件已正确安装,启动Keil μVision3软件与启动其他软件的方法完全相同:选择【开始】→【程序】→【Keil μVision3】选项,或者直接双击桌面上Keil μVision3的快捷方式图标,均可启动Keil μVision3。启动过程中,屏幕出现如图1-6所示的启动界面。启动界面消失后,Keil μVision3 就进入了如图1-7所示的编辑界面,此时Keil μVision3软件已成功启动。
图1-4 软件开发流程
图1-5 细化的软件开发流程
图1-6 Keil μVision3启动界面
图1-7 Keil μVision3启动成功后的编辑界面
2)新建工程
Keil与现在众多的软件开发环境一样,均采用工程或者项目的管理方式来管理文件。一个应用开发任务就是一个工程或项目。一般来说,以开发任务的名称作为新建的文件夹名,所有与该开发任务有关的文件都存放在该文件夹中,不同开发任务的文件夹名一般不相同。
下面首先新建工程。选择Keil μVision3 编辑界面中的【Project】菜单,在展开的下拉菜单中选择【New Project】选项,如图1-8所示。在随后打开的保存新建工程对话框中,选择新建工程的保存路径,并为新建的工程命名,最后单击【保存】按钮,保存该新建的工程。注意,工程的扩展名不用输入,系统会默认选择为“.uv2”,如图1-9所示。此处将工程暂且命名为“LED1”,并保存在F盘的文件夹LED下。
3)选择单片机型号
当单击图1-9所示保存新建工程对话框中的【保存】按钮之后,Keil μVision3会弹出单片机型号选择对话框,如图1-10所示。在该对话窗口中,要求用户选择该工程准备使用的单片机芯片的型号。此处选择Atmel公司生产、使用最普及的AT89C51 芯片。具体操作是:在图1-10 左侧栏所列众多厂家中找见“Atmel”,单击“Atmel”名称前面的加号“+”,展开Atmel公司生产的单片机系列产品,如图1-11所示;接着,在展开的Atmel公司生产的单片机系列产品中,选中“AT89C51”,如图1-12所示;最后,单击【确定】按钮,芯片型号的选择完成。此时,Keil μVision3 会弹出如图1-13所示的对话框,询问是否复制并添加标准8051启动代码到当前工程,一般单击【是】按钮即可。
图1-8 新建工程
图1-9 保存工程
图1-10 选择51单片机的生产厂家
图1-11 展开Atmel公司生产的单片机产品
图1-12 选中Atmel公司生产的单片机AT89C51
图1-13 是否添加8051启动代码到当前工程对话框
完成以上步骤之后,屏幕重新回到如图1-14所示的编辑界面,图1-14与图1-7基本相同,不同之处是左侧“工程管理工作台”中的内容。图1-7 中,“工程管理工作台”中什么也没有;而图1-14 中,“工程管理工作台”中有名为“Target 1”的对象,单击其名称前面的加号,还可以看到该对象内所包含的文件。
2.源程序编写
新建工程完成之后,下面该进入源程序的编写环节了。
1)新建并保存源程序文件
选择【File】→【New】选项,或者直接单击工具栏中“创建一个新文件”快捷图标,都可以新建一个默认名字为“Text 1”的文件。新建之后,“I”形光标就在“Text 1”文件的编辑窗口中闪烁,如图1-15所示。需要说明的是,默认的文件名也许由于多次新建文件而出现“Text x”的字样,其中x是一整数,因为马上要将该文件进行保存或另存为其他名称的文件,所以原来的文件名是什么都无关紧要。
图1-14 已含有“Target 1”对象的编辑界面
图1-15 新建源程序文件界面
接下来将源文件进行重新命令后保存。选择【File】菜单中的【Save】或者【Save As】,也可直接单击工具栏中的“存盘”快捷图标,都可打开如图1-16(a)所示的“文件另存为”对话框。将其中的原始默认文件名“Text 1”更换为“led1.c”。此处特别要提起注意的是,因为我们使用C语言来编写源程序,所以源程序文件名的扩展名必须是“.c”,正如前面提到的,单片机的编程语言除C语言外,还有汇编语言,如果使用汇编语言编写源程序,则源程序文件名的扩展名就必须是“.asm”。此处,源文件更名为“led1.c”,其中的扩展名“.c”表明这是用C语言编写的源程序,如图1-16(b)所示。最后单击【保存】按钮。
图1-16 源程序文件更名前后界面
单击【保存】按钮后,源程序文件的名字已经更换,且源程序编辑窗口的标题栏显示为“F:\LED\led1.c”字样,如图1-17所示。
图1-17 更名保存后的源程序文件界面
2)加载源程序到工程中
加载源程序到项目工程是非常重要的一个步骤。未加载源程序之前,该项目工程管理工作台如图1-18(a)所示,加载源程序文件之后如图1-18(b)所示。可见,加载源程序之后,源程序文件led1.c被添加进入了工程管理工作台中。
图1-18 加载源程序
加载源程序的具体过程如下。
在工程管理工作台中,单击对象“Target 1”前面的加号“+”将其展开,右击文件夹“Source Group 1”图标,在弹出如图1-19所示的快捷菜单中,选择“Add Files to Group‘Source Group 1’ ”菜单项。随后,弹出“选择源程序文件”对话框,如图1-20所示。双击图1-20 中文件“led1.c”之后再单击【Close】按钮,或者单击图1-20 中文件“led1.c”之后再单击【Add】按钮,都可将源程序文件“led1.c”加载到工程项目中,结果如图1-18(b)所示。
图1-19 添加源程序到工程的快捷菜单
此过程之所以重要,原因是如果没有添加源程序文件,则该工程项目如同一个躯壳或者空的框架,因为没有包含源程序文件,该工程自然不具有任何功能,即使后续的编译链接等环节顺利通过,预期的功能也一定不会实现。
另一方面,如果给工程项目添加了错误的或者多余的源程序文件,在工程的编译调试环节可能就会报错,即使编译通过,也不能保证其功能是正确的。如果出现这样的情况,也不必惊慌,只需将这些错误的或者多余的文件从工程项目中移除即可。具体做法是:在工程管理工作台中,在准备移除的文件上右击,在弹出的快捷菜单中选择“Remove File xxx.c”(xxx代表被移除文件的名字)即可。
图1-20 “选择源程序文件”对话框
3)编译选项设置
工程编译的目的,是将源程序文件经编译、链接,最终生成可以用于下载烧片的XXX.hex文件,其中,hex是十六进制文件的扩展名,XXX是该文件的主名,文件主名一般与工程名相同。
在进行工程的编译、链接之前,首先要对编译环境进行必要的设置,设置完成后才可以进行编译。
打开【Project】下拉菜单,在展开的下拉菜单项目中,选择【Options for Target‘Target 1’】,或者直接单击工具栏中Options for Target快捷方式图标,都可以打开编译选项设置对话框,如图1-21所示。可以看到,尽管此窗口包含多个用于编译选项设置的选项卡,但在一般使用中,只有两个选项卡中的部分选项需要设置,其余选项卡则保持原始默认值即可。这两个选项卡就是Output和Debug选项卡,如图1-21所示。
图1-21 编译选项设置窗口
单击【Output】选项卡,即可打开Output(输出)选项设置对话框,如图1-22(a)所示。在此窗口中,只需选中“创建.hex文件选项”:在如图1-22(a)中选中标注指示的复选框,表明工程编译之后,输出或者生成用于下载烧片的.hex文件。相反,如果此选项没有被选中,即使工程完全正确,且编译通过,但不会生成用于下载烧片的.hex文件。因此,如果需要进行程序的下载烧片或仿真调试,则此选项必须要选中。此选项选中后如图1-22(b)所示。
接下来就该设置Debug选项了。单击如图1-21所示的【Debug】选项卡,即可打开Debug(调试)选项设置对话框,如图1-23所示。
图1-22 Output选项设置
此选项卡默认的调试工具是Simulator。如果使用默认的调试工具,具体调试时,可以从Keil μVision3软件的部分调试窗口中观察部分数据的变化情况,不用外接实际的硬件电路,自然也看不到硬件电路中元器件的实际动作和运作现象。在没有仿真器的条件下,一般选默认调试工具。另外,在调试时,为了让程序能直接跳转到主函数main后再开始继续运行,一般都将图1-23所示的“Go till main()”复选框选中。
图1-23 默认调试工具选项设置
如果有仿真器或使用仿真软件来调试,可不使用默认的调试工具,可以选定自己熟悉的、手头上可用的调试工具。选中Debug选项卡右边的“Use”单选按钮(默认调试工具“Simulator”与此处的“Use”二者只能选择其一),并从其右侧的下拉列表栏中选中自己使用的调试工具,如图1-24所示。例如,作者一般使用“伟福V系列仿真器”驱动、“Proteus VSM Simulator”、“Keil Monitor-51 Driver”等调试工具。同样,在调试时,为了让程序直接运行到主函数main后再开始继续运行,则需选中“Go till main()”复选项。
图1-24 自定义调试工具选项设置
当以上两项设置结束之后,单击【确定】按钮,保存此选项设置。需要说明的是,对于一个工程,此编译调试选项设置只需做一次;新建了新的工程后,此编译调试选项需重新设置一次,并且每次设置几乎完全相同。
4)编辑源程序
接下来就该编写源程序文件了,源程序文件在源程序编辑窗口中编辑输入。假定源程序文件如下:
#include <reg52.h> sbit LED0=P2^0; main() { LED0=0; }
在编辑输入或修改源程序期间,编辑窗口标题栏显示为“F:\LED\led1.c*”,其中,文件名后面紧跟一个星号“*”,星号表明此源文件正处于编辑未保存状态。无论在任何时候,都可通过单击工具栏中的“保存”快捷图标(打开【File】菜单后选择“保存”选项也一样)保存源程序文件,此时,标题栏中文件名后的星号就会消失,表明文件已保存。
在编辑输入上述源程序并保存之后,源程序的编辑即已完成。注意,在编辑或者修改完源程序之后,一定要保存源程序,这样做的意义是,能保证编译及生成的.hex文件是编辑或修改后的源程序生成的,而非编辑或修改前源程序编译生成的。另外,此处不用急于弄清楚这个源程序的具体功能,读者只需按照原样编辑输入即可,因为现在的重点是掌握使用Keil μVision3软件来生成单片机下载(烧片)所需文件的具体流程,重点不在于源程序的具体功能。相反,在后续章节中,结合多个具体的实例,分析源程序的功能,甚至每一条语句的功能,自然成为了重点。
3.编译调试
接下来该对工程进行编译和调试了,编译和调试的目标就是生成可用于下载烧片的.hex文件。对于软件程序开发而言,编译调试与源程序的编辑修改是一个循环往复的过程,一般是经历编辑—编译—再编译—再修改这样一个循环往复的过程,直至编译成功、预期的功能完全实现为止。
在Keil μVision3的工具栏中,有三个编译快捷方式图标和一个调试快捷方式图标,如图1-25所示。
图1-25 编译和调试快捷图标
从字面理解,编译当前就是对当前正在操作的文件进行编译;全部编译就是将该工程中所有文件全部重新编译;而编译则是仅将本次修改过的文件进行编译,没有修改或变动的文件不编译。实际使用中,为了防止疏漏,一般选择全部编译者居多。
对于调试,单击如图1-25所示的“调试”快捷方式图标,可使工程进入调试状态。此时,Keil μVision3的工具栏出现如图1-26所示的调试工具栏。运用这些调试工具,可以监控和调试程序的每一条语句及其执行结果的每一个细节。
图1-26 调试工具栏
介绍了编译和调试工具之后,下面仅就如何编译做具体说明,有关调试的相关细节,请读者参阅第2章部分内容,也可参阅其他书籍或资料,还可自己通过实践去掌握。
现在,源程序已经编辑完成,并且已被加载到工程中,相关的编译调试选项也已设置完毕,下面就开始工程的编译了。单击如图1-25所示的“全部编译”快捷图标,工程开始编译。编译结束后,编译信息就出现在信息输出窗口中,如图1-27所示。此处的编译信息表明,该工程编译是成功的,生成了.hex文件(led1.hex),编译时没有出现错误,也没有出现警告(“0 Error(s), 0 Warning(s). ”)。此时,若查验存放该工程的文件夹,就会发现,与该工程同名、扩展名为.hex的文件在该文件夹中存在,该文件就是本工程编译生成的、用于下载烧片的文件led1.hex。
图1-27 信息输出窗口中的编译信息
如果源程序文件有错误,在工程编译时,就会在信息输出窗口中显示错误的位置所在和错误、警告的个数。在信息输出窗口中,通过在提示出现错误的信息行文字上双击,鼠标的光标就会定位在源程序中出现错误的位置附近,依据错误提示信息,找出错误所在并修改,修改完成后要注意保存源程序。保存修改后的源程序之后,再进行编译,直到工程没有错误(警告可以忽略),并且生成正确的.hex文件为止。
至此,软件开发过程结束。通过软件开发,最终生成了下载烧片所需要的.hex文件。后续的工作就是通过编程器或者下载器,将.hex文件下载或者烧片到单片机的程序存储器中,然后给硬件电路上电,让单片机与其外部的硬件设备一起工作,完成预定的各项任务功能。下载和烧片的相关内容可参阅附录B。