当前位置:文档之家› keilc51软件的使用

keilc51软件的使用

Keil C51软件的使用

电子科技大学光电信息学院漆强Keil C51 V7.xx(包括V7.08 V7.10 V7.50等)是目前世界上最好的51单片机的汇编和c语言的开发工具。支持汇编,c语言以及混合编程,同时具备功能强大的软件仿真和硬件仿真(用MON51和ISD51协议)。它可以完成从工程建立和管理,编译,连接,目标代码的生成,软件仿真,硬件仿真等完整的开发环境。更具有特色的是在Keil C51中内嵌了一个RTX51实时操作系统,该内核的TINY版提供了全部的源代码,可以在没有外扩RAM的8051系列单片机上使用,为我们学习嵌入式系统软件的开发提供了一个很好的范例,它的最新版本为RtxTiny2,其源代码位于KEIL\C51\ RtxTiny2下面。Keil C51也有一些书籍介绍,主要有马忠梅的《单片机的c语言应用程序设计》和徐爱钧的《单片机高级语言C51 Windows环境编程与应用》。这些书对Keil C51主要介绍了如何进行程序设计,但是对Keil C51 V7.xx的软件的使用介绍的较少,本文将结合自己的使用经验介绍一下Keil C51 V7.xx系列软件的使用,其中主要以最新的Keil C51 V7.50版为例。

UV2的IDE环境如下:

图1 Keil C51集成开发环境

在Keil C51中已经内嵌了DScope51,其调试环境如下:

图2 Keil C51调试环境

我们以下的介绍都是以UV2的IDE为基础来说明,就是Keil C51 v7.5x的版本。学习Kei C51软件的最好途径是利用它的在线文档和帮助文档,在安装Keil C51之后的Keil\C51\hlp目录里,有几个文件:gs51.pdf,c51.pdf,a51.pdf,tr51.pdf和几个.chm文件:c51lib.chm,dbg51.chm,errors.chm。这些文档已经非常详细的论述了关于keil c51方面的内容. 其中这几个文档最有用:gs51.pdf讲述了Keil C51软件的集成开发环境;c51.pdf讲述了Keil C51的C语言使用方法;a51.pdf讲述了Keil C51的汇编语言使用方法。你碰到问题的话,大都可以在这些文档里找到答案。

Keil C51软件的使用界面和VC的使用界面比较类似,熟悉用VC编程的同学和很快地熟悉Keil C51软件的使用,下面我将分步的介绍Keil C51软件的使用。

Setp 1:建立一个工程

使用Keil C51软件的第一步是建立一个工程。Keil C51的集成开发环境使用工程的方法来管理文件,而不是单一的文件模式。所有的文件包括源程序(汇编或C),头文件,以及一些说明性文档都放在工程文件中统一管理。不管你编写的程序是汇编的,还是c的,或者是只有一个文件,还是有多个文件的程序都要有一个工程文件,没有工程文件,将不能进行编译和仿真,这是需要强调的一点。其具体步骤如

下:

1)点击工具栏的菜单Project,选New Project,如图3所示:

图3 新建工程下拉菜单

2)然后选择你要保存的路径,输入工程文件的名字,比如保存到Keil目录里,工程文件的名字为hello。如图4所示,然后点击保存。

提示:在设置工程的目录事,最好每一个工程都建立一个单独的文件夹来存放,比如编写一个最常见的初学者程序:hello world,你可以建立一个HELLO文件夹,在该文件中在建立两个目录:一个为SOURCE文件夹,存放你的汇编语言源文件和C语言源文件,同时可以再建立一个OUTPUT目录来存放编译和连接过程中输出了中间文件和最后用于芯片烧写的.hex文件。

图4 工程文件保存对话框

Setp 2:为工程选择目标器件(例如:ATMEL的AT89C52 )

在建立完工程后,Keil C51会立即弹出如图5所示的器件选择窗口。器件选择的目的是告诉Keil C51使用的8051系列芯片的型号是哪一个公司的哪一个型号。由于不同公司不同型号的51芯片的内部资源是不相同的,Keil C51必须为不同类型的单片机提供不同的软硬件仿真环境。因此一旦确定了项目所选用的单片机型号,Keil C51就选择与之对应了软硬件仿真环境。这里我们选择了ATMEL公司的AT89C52。

图5 目标器件选择窗口

同时如果用户在选择完目标器件后想重新修改目标器件的话,可点击工具栏

Project选项,在弹出的下拉菜单中选择

也可以出现目标器件选择窗口。

这里要强调的一点是:在选择目标器件并确定后,Keil C51会弹出如图6的一个对话框,询问你是否加入8051单片机初始化代码文件到你自己的工程文件中,该文件名为StartUp.a51,它主要是完成芯片启动时的初始化工作,如设置片内RAM 为0,设置可重入堆栈等,它主要用于C语言编写的程序中。如果编写的是汇编程

序,切记不要加入该文件,因为该文件中定义的一些标号只有在C语言编写的程序中才用到。有兴趣的同学可以打开StartUp.a51文件看看,它采用的是宏汇编的方式来编写的代码,对大家学习宏汇编有一定的实例作用。

图6 添加初始化代码对话框

Setp 3:编辑源文件

点击工具栏中的File菜单,在出现的下拉菜单中选择New,然后在随后出现的文本编辑窗口中就可以编写你的源程序,如图7所示。编写完源文件后,利用File/Save保存文件。注意:采用汇编语言编写的源文件要以.a51为后缀名保存,采用C语言编写的源文件要以.C为后缀名保存。

由于Keil C51对中文的支持不是很好,因此在编辑源文件时,强烈推荐大家选择专门的源代码编辑软件,如Ultra Edit和Source Insight等。

图7 编辑源文件下拉菜单

Setp 4:把源文件加入到工程中

编辑完所有的源文件后,就应该把它加入到我们建立的工程中,用右键点击

Source Group 1(注意用鼠标的右键,而不是左键),将弹出一个菜单,选择

,如图8所示:

图8 添加源程序快捷菜单

在出现的添加源文件窗口中选择已经编写的源文件,选择好文件后,单击ADD 按钮就可以把源文件添加到工程文件中,如图9所示:

图9 添加源程序文件窗口

如果编写的是c程序文件,在文件类型选择C Source file(*.c);如果编写的是汇编文件,就选择asm source file;如果是目标文件,选择Object file;如果是库文件,选择Library file。最后点击Add,点击Add之后,窗口不会消失,(如果要添加多个文件,可以不断添加),添加完毕后再点击Close关闭该窗口。如图10所示:

图10 选择文件类型窗口

这时在source group 1 里就有我们添加的汇编源文件文件,如图11所示:

图11 完成源文件添加的工程

Setp 5:编译连接环境的设置

加入了源文件到工程文件后,就要进行整个编译连接环境的设置。点击工具栏

的Project选项,在弹出如图12所示的下拉菜单中选择

图12 编译连接环境设置命令下拉菜单

这时会出现如图13所示的编译连接环境设置菜单,下面我们将具体对每个子菜单的相关设置作详细的介绍。

图13 编译连接环境设置菜单

第一个设置菜单Device是选择目标器件,目标器件在建立工程的工程中已经选择了,如果用户想更改目标器件,则可以在Device子菜单中再次修改。

第二个子菜单Target是设置编译连接环境的主要菜单,其内容如图13所示,其中每一项的作用如下:

Xtal (Mhz):是设置你的单片机的工作的频率,默认是24.0MHZ,如果你的单片机晶振用的是11.0592Mhz,那么在框里输入11.0592(单位是Mhz,所以带小数点)。在仿真时间相关的程序时,一定要根据实际选用的时钟晶振来设置这个选项。

Use On-chip ROM(0x0-0x1fff):这个选项是使用片上的Flash Rom,我们知道At89c52有8k的Flash Rom。是否选择该项取决于你的应用系统,你的单片机的EA 接高电平的话,请选中这个选项;如果你的单片机的EA接低电平,表示使用外部Rom,那么不要选中该选项。一般情况下我们都选择使用芯片片内自带的Flash Rom 因此我们在这里选中它。

Off-chip Code memory:表示你在片外接的Rom的开始地址和大小,如果你没有外接程序存储器,那么不要填任何数据。我们在这里假设使用一个片外的Rom,地址从0x8000开始(不要填成8000,如果是8000,表示的是10进制的数,一般应该填16进制的数),Size为外接Rom的大小。假设接了一块0x1000字节的rom。编译设置环境中最多可以外接3块Rom,用户可以根据应用系统的设计情况填写O ff-Chip Xdata Memory:那么可以填上你外接的Xdata(外部数据存储器)的起始地址和大小,一般的应用是接一个62256,我们在这里特殊的指定Xdata的起始地址为0x2000,大小为0x8000;

Code Banking:是使用Code Banking技术。keil可以支持程序代码超过64k的情况,最大可以有2兆的程序代码。如果你的代码超过64k,那么就要使用Code Banking技术,以支持更多的程序空间。Code Banking是一个高级的技术,支持自动的Bank的切换,它主要应用于一些大型系统,比如你要在单片机里实现汉字字库,实现汉字输入法,都可以使用该技术。在这里我们暂时不选中它。

Memory Model:用鼠标点击Memory Model的下拉箭头,会有3个选项.

Small:变量存储在内部ram里,Idata;

Compact:变量存储在外部ram里,使用页8位间接寻址,Pdata;

Large:变量存储在外部Ram里,使用16位间接寻址.,Xdata;

我们一般使用Small来存储变量,就是说单片机优先把变量存储在内部ram里,

如果内部ram不够了,才会存到外部去。Compact的方式要自己通过程序来指定页的高位地址,编程比较复杂,如果外部ram很少,只有256个字节,那么对该256个字节的读取就比较快,用MOVX @Ri , A 或MOVX A, @Ri指令。如果超过256字节,那么要不断地进行地址的切换,这就比较麻烦。因此Compact模式适用于比较少的外部ram的情况。Large模式,是指变量会优先分配到外部ram里,用MOVX A,@DPTR或MOVX @DPTR,A来读取变量。要注意的是:3种存储方式都支持内部256字节和外部64k字节的ram,区别是变量的优先(或默认)存储在哪里的区别。一般情况是把变量存储在内部ram,内部ram不够时才使用后面的Compact,Large模式。因为变量存储在内部ram里,运算速度比存储在外部ram要快的多,大部分的应用都是选择Small的模,.使用Small的方式时,并不是说变量就不可以存储在外部,一样可以存储在外部,只是你要显式的指明存储类型,比如:unsigned char xdata a;// 变量a存储在外部的ram

unsigned char a;// 变量a存储在内部ram.

假如用Large的模式:

unsigned char data a; // 变量a存储在内部ram.

unsigned char a;// 变量a存储在外部ram.

因此这几个选项只是影响没有特别指定变量的存储空间的时候,默认存储在哪里,比如上面的变量定义unsigned char a.。如果显式的指明了存储空间就应该以存储空间为准。

在实际使用中,我们最好选择Small。

Code Rom Size:用鼠标点击下拉箭头,将有3个选项:

Small: program 2K or less 。适用于89c2051这些芯片,2051只有2k的代码空间,所以跳转地址只有2k,编译的时候会使用ACALL AJMP这些短跳转指令,而不会使用LCALL,LJMP指令,如果你的代码跳转超过2k,那么会出错。

Compact:2k functiongs ,64k program。表示每个子函数的程序大小不超过

2k,整个工程可以有64k的代码。就是说在主程序里可以使用LCALL, LJMP指令,但在子程序里只会使用ACALL,AJMP指令。在应用时除非你确认你的每个子程序不会超过2k,否则不要用Compact方式。

Large:64K program。表示程序或子函数都可以大到64k。如果使用code bank 还可以更大。通常我们都选用该方式。Code Rom Size选择Large方式速度不会比Small慢很多,所以一般没有必要选择Compact和Small的方式。我们这里选择Large 方式。

Operating:点击下拉箭头有3个选项:

None:表示不使用操作系统

RTX-51 Tiny Real-Time Os:表示使用Tiny操作系统

RTX-51 Full Real-Time Os:表示使用Full操作系统

Keil c51提供了tiny系统(demo版没有tiny系统,正版软件才有),Tiny是一个多任务操作系统,使用定时器0来做任务切换。不支持中断系统的任务切换.也没有优先级。但是它可以用在没有外部扩展ram的应用系统中,同时它的时间片切换思想以及如何切换任务和保存堆栈等也很值得大家学习。在这里强烈推荐学有余力的同学可以看看它的源代码,对学习嵌入式系统很有帮助。

Keil C51 Full Real-Time OS是比Tiny要好一些的系统,但需要用户使用外部ram,支持中断方式的多任务和任务优先级。但是keil c51里不提供该运行库和源代码,要另外购买,价格在3万人民币左右,只好望而止步.

在一般的应用中我们不采用多任务操作系统,因此在这里选择none。

第三个子菜单Output的设置内容如图14所示。其具体的设置如下:

Select Folder for Objects:点击这个按钮可以选择编译之后的目标文件存储在哪个目录里,如果不设置的话,就是在你的工程文件的目录里。在这里我们选择预先建好的OUTPUT文件夹来存放编译后的目标文件。

Name of Executable:是设置生成的目标文件的名字,缺省是跟你的工程文件的名字是一样的。目标文件可以生成库或者obj,hex的格式。

图14 Output子菜单设置窗口

Create Executable:是生成OMF以及HEX文件。一般是选中Debug Information,选中Browse Information。这两个选项一般要选中,这样才有详细的调试时所需要的信息,比如你要做c语言程序的调试。如果不选的话,调试时你将无法看到高级语言写的程序。

Create Hex File:这个选项一般是要选中的.用来生成烧写到芯片的可执行代码。

Create Library:选中时将生成lib库文件。用户可以根据你的需要是否要生成库文件,一般的应用是不生成库文件的。

After Make:有如下几个设置:

Beep when complete:编译完成之后发出咚的声音。

Start Debugging:马上启动调试(软件仿真或硬件仿真)。根据你的需要做设置,一般是不选中。

Run User Program #1,Run User Program #2:这个选项可以设置编译完之后

运行别的应用程序,比如有些用户自己编写的烧写芯片的程序(编译完便执行将hex 文件写入芯片),或调用外部的仿真程序。这里可以根据自己的需要设置。

第四个子菜单Listing的设置内容如图15所示。Keil C51在编译之后除了生成目标文件之外,还生成*.lst和 *.m51的文件。这两种扩展名的文件对你了解你的程序用到了那些idata ,data ,bit ,xdata,code ,ram,rom,stack等有很重要的作用。一般可以参考它的默认设置。其中有两个地方需要注意:一是选中Assembly Code还会生成汇编的代码,这对采用C语言编程的用户来说可以提供一个底层的接口。二是Select Folder for Listings选项是选择生成的列表文件存放的目录。不做选择时使用工程文件所在的目录,在这里我们选择预先建好的OUTPUT文件夹来存放编译后的目标文件。

图15 Listing子菜单设置窗口

其他的几个子菜单如C51,A51,BL51 Locate,BL51 Misc,Debug和Utilities 等都可以采用默认的设置,只有在Debug子菜单中有一点要强调。该子菜单的设置画面如图16所示。在设置窗口的最左上方,如果选择了Use Simulator,意味着仿真时采用的是软件仿真,如果选择Use,则使用的是硬件仿真,最常用的是采用Mon51和ISD51的两种硬件仿真协议。一般情况我们采用的是软件仿真。

图18 Debug子菜单设置窗口

Setp 6:程序的编译和连接

完成了编译和连接环境的设置后,下面进行的就是程序的编译和连接,点击工具栏Project栏,在弹出的如图19所示的下拉菜单中选择Build Target命令来编译源文件,也可以选择Rebuild Target命令来重新编译所有的源文件,这是会在“Output Windows”信息输出窗口中输出一些相关信息,如图20所示。

图19 编译命令菜单

其中倒数第二行给出了程序占用的片内Ram和片外Ram的大小,以及程序的代码长度,最后一行给出编译中出现的错误信息,如果有错误则要返回源程序中修改,直至没有错误为止。

图20 输出提示信息

关于Keil C51软件的基本使用我们就先介绍到这里,关于Keil C51软件的调试技巧我们将回来下一篇应用文档中详细介绍。

相关主题
文本预览
相关文档 最新文档