μVision是Keil公司开发的用于嵌入式系统程序设计与仿真的软件,它支持包括51单片机在内的许多主流单片机程序的开发。目前最新的版本是μVision4。本书学习或今后单片机系统开发的程序部分都可以在μVision中开发并仿真。
首先,大家可以从网上找到μVision软件的试用版并安装到计算机上(安装过程从略)。安装之后会从Windows操作系统的“开始”菜单的“程序”中找到“ ”命令(假设安装的是μVision4),单击后即启动μVision并打开如图4-25所示的软件界面。
图4-25 μVision软件界面
接下来,我们将以单片机控制两支发光二极管交替发光实例的程序3-1为例,学习在μVision开发单片机程序的方法。以下操作过程在本书光盘中有演示。
在μVision中开发单片机程序都是以项目为单位进行的,所以需要先新建一个项目。在μVision的菜单栏中执行“Project”→“NewμVision Project…”命令,如图4-26所示。这个命令将新建一个项目(也称为工程)。
选择“New μVision Project…”命令后,μVision弹出一个保存新建项目的对话框,为了方便回顾和记忆,我们给项目起名为“Prj_2 flashing LEDs”,代表这是一个两个发光二极管交替发光的项目,然后在硬盘上选择一个适当的路径保存新建的项目文件,如图4-27所示。单击“Save”按钮,完成项目的新建与保存。
μVision随即弹出一个器件选择对话框。在这个对话框中,选择的是项目中所使用的单片机品牌和型号。本书的绝大部分实例都使用Atmel公司的AT89S51单片机,在对话框左侧的器件数据库中找到Atmel的文件夹“ ”,单击文件夹旁边的“+”号,从展开的树中找到“ ”,单击该图标,这时右侧出现对应的器件描述信息,如图4-28所示。
图4-26 新建项目命令
图4-27 保存新建的项目
单击图4-28器件选择对话框中的“OK”按钮,μVision弹出一个确认框,如图4-29所示。提示请问是否把8051单片机的启动代码也复制到项目文件夹中并向项目中添加一个代码文件,单击“NO”按钮,我们暂时不需要向项目中添加这些代码。
图4-28 器件选择对话框
图4-29 启动代码复制确认框
完成以上步骤后,在μVision左侧的项目区“Project”窗口中,生成了一个项目文件夹,如图4-30所示。这个文件夹就像鸡蛋壳,只是作为项目的“外壳”,还没有包含单片机程序等文件,如图4-31所示。这样的蛋壳是没有活力的,要向其中添加控制单片机的程序文件。
接下来给新建的项目文件夹添加汇编程序文件,单击工具栏中的新建“ ”按钮(或执行“File”→“New…”命令),在μVision的工作区生成了一个新的编辑窗口,如图4-32所示。在这个编辑窗口中用键盘输入程序3-1。注意,在输入过程中,最好关闭Windows操作系统的中文输入法,在英文输入法下输入英文和标点符号,在输入注释时再打开中文输入法输入,这样可以防止中文标点符号可能引发的汇编错误。然后单击保存“ ”按钮,在保存对话框中给这个汇编程序文件命名为flash.asm,表明是一个控制发光二极管交替发光的汇编程序。保存的路径默认为Prj_2 Flashing LEDs项目文件夹,单击“Save”按钮,完成汇编程序文件的保存。这时,程序的标号(红色)、助记符(黑色)、立即数(紫色)、注释(绿色)被自动标记了不同的颜色,如图4-33所示。
图4-30 新建的项目文件夹
图4-31 项目文件夹就像一个蛋壳,需要向其中添加文件
图4-32 在项目中新建汇编程序文件
图4-33 保存汇编程序文件
这样,我们把控制两支发光二极管交替发光的汇编程序保存在了硬盘中,但是这个汇编程序并没有被自动添加到Prj_2 flashing LEDs项目中(尽管它保存在项目文件夹中),就好像我们去朋友家做客,虽然进了人家的房子,但不是他们家庭的一员,只有把户口添加到朋友家的户口本中,才成为正式的一员。所以,我们需要把保存好的汇编程序文件添加到Prj_2 flashing LEDs项目中,方法是在项目区的“Source Group 1”文件夹上单击鼠标右键,在弹出的快捷菜单中选择“Add Files to Group'Source Group 1'…”命令,意思是向源代码组中添加文件,如图4-34所示。
这时,μVision弹出添加文件对话框,让我们意外的是对话框中没有出现刚才保存好的汇编程序文件flash.asm,这是因为在“文件类型”下拉列表框中默认显示的是“C Source file (*.c)”,这是用C51语言书写的单片机程序文件的格式,并不是汇编语言程序文件的格式。所以,在下拉列表中选择“Asm Source file (*.s*;*.src;*.a*)”选项,这时就出现了flash.asm文件,如图4-35所示。选中flash.asm文件,单击“Add”按钮,完成添加。最后单击“Close”按钮,关闭对话框。
图4-34 添加汇编程序文件到项目中去
图4-35 添加文件对话框
以.asm为后缀的文件均为汇编程序文件,asm是assembly(汇编)的缩写。
添加完成之后,在项目区的“Source Group 1”文件夹左侧多出了一个“+”号,单击这个“+”号,看到flash.asm文件已经被添加进去,这表明flash.asm文件已经成功添加到项目中去了,如图4-36所示。
图4-36 flash.asm文件成功添加到项目中
汇编语言书写的原程序单片机是无法直接“认知”的,还需要μVision把这些汇编程序“翻译”成单片机能运行的代码,这个“翻译”过程就是汇编(assembling)。
比如指令“MOV P0,#00H”,经过汇编后变成了十六进制的执行代码:75、80、00。这个程序代码可查询附录C,找到执行代码为75的指令(阴影)为“MOV data addr,#data”,并知道这个指令有3个字节组成,除了75外,80代表P0,00代表立即数#00H。这样,75、80、00这三个执行代码下载到单片机后,单片机就知道用户想让它执行的是指令“MOV P0,#00H”。其他指令的汇编及下载也是根据附录C所示的执行代码进行。
在μVision中实际汇编很简单,单击工具栏中的汇编“ ”按钮,μVision开始自动对程序进行汇编,同时在输出信息区实时显示这个过程。汇编完成后,窗口中显示汇编结果,如图4-37所示。
图4-37 汇编完成
最后一行的“0 Error(s),0 Warning(s)”表示“0个错误,0个警告”。说明程序的汇编是成功的。如果Error(s)前的数字不是0,表明汇编程序有错误存在,汇编不成功,输出窗口中会提示错误指令所在的行和错误类型,这就需要回到汇编程序中慢慢找出错误并改正。
一般来说,由于疏忽导致指令拼写错误比较常见,这一类错误称为语法错误。如MOV指令写成了MOVE、CALL写成CAL等。这些错误可根据输出窗口的提示很快定位和改正。如果是逻辑错误,μVision是不会报错的。如原本想执行“MOV P0,#01H”,但不小心写成“MOV P0,01H”,由于语法是正确的,μVision就视程序为正确。
当汇编程序中没有任何错误存在时,汇编才能完成。至于如果Warning(s)前的数字不是0,表明有警告存在,也就是μVision在汇编过程中发现一些问题,但不是错误,汇编照常完成。在大多数情况下,警告存在是允许的。如果把这些汇编好的代码下载到单片机系统板中,运行的效果与预想的一样,那这些警告就可以忽略;但如果运行效果出现异常,则有可能是警告中的问题造成的。
汇编成功之后,单击μVision工具栏中的目标选项“ ”按钮(或执行“Project”→“Options for Target”命令),该按钮在如图4-37所示界面的工作区上方。μVision将打开一个目标选项设置对话框,如图4-38所示,这个对话框由Device、Target、Output、Listing等标签栏组成。单击Output标签,打开该选项卡,选中“ ”复选框,表明我们需要生成以.HEX为后缀的十六进制代码文件。这个以.HEX为后缀的文件,正是将要下载到单片机中的执行代码文件,它是唯一能被单片机“认知”和执行的文件。稍后,我们将看到在项目文件夹中生成了一个以.HEX为后缀的十六进制代码文件。
另外在目标选项对话框中的Target标签栏中的晶振频率“ ”中修改为实际系统所使用的晶振频率,比如12MHz,如图4-39所示,表示稍后的调试、仿真系统的时钟频率也为12MHz。
图4-38 在目标选项对话框里选中生成十六进制代码文件
图4-39 在目标选项对话框里设置仿真晶振频率
单击“OK”按钮关闭目标选项对话框,并单击μVision工具栏中的重建所有目标文件“ ”按钮(或执行“Project”→“Rebuild all target files”命令),这时在输出信息区中显示过程信息,对应的消息含义如图4-40所示。
如果顺利,信息的最后一行将出现的是“0 Error(s),0 Warning(s)”,说明建立和连接成功。这个项目输出了以.HEX为后缀的执行代码文件。我们可以在Windows的资源管理器中,找到本项目的文件夹,就会在其中发现这个文件,如图4-41所示。
如果把这个执行代码文件下载到单片机中,单片机就会按程序进行相应的操作。另外,这个以.HEX为后缀的执行代码文件正是在Proteus仿真中加载到单片机中的文件(见图4-23)。至此,我们已经知道如何把汇编程序变成执行代码文件。关于如何下载这个执行代码文件到实际的单片机的过程将在本章的应用体验中演示。
图4-40 建立和连接时的信息
图4-41 以.HEX为后缀的执行代码文件