Keil-C51详细设置_第1页
Keil-C51详细设置_第2页
Keil-C51详细设置_第3页
Keil-C51详细设置_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、KeilC51 详细设置一.target 名更改打开 Keil 后,左侧 ProjectWorkspace 中的 target 可改,方法:右击TargetManageCompnents双击待修改项即可,若要添加,使用对话框内对应工具栏。二.optionfortarget 设置之 TARGE 项1MEMARYMODELSmall:变量存储在内部 ram 里.Compact:变量存储在外部 ram 里,使用页 8 位间接寻址Large:变量存储在外部 Ram 里,使用 16 位间接寻址.我们一般使用 Small 来存储变量, 就是说单片机优先把变量存储在内部 ram 里, 如果内部 ram 不够

2、了,才会存到外部去.Compact 的方式要自己通过程序来指定页的高位地址,编程比较复杂,如果外部 ram 很少,只有 256 个字节,那么对该 256 个字节的读取就比较快,用 MOVXRi,MMOVXA,Ri 指令.如果超过 256 字节,那么要不断地进行切换的话,就比较麻烦.Compact 模式适用于比较少的外部 ram 的情况.Large 模式, 是指变量会优先分配到外部 ram 里, 用 MOVXA,DPTRMOVXDPTR,A读取.要注意的是,3 种存储方式都支持内部 256 字节和外部 64k 字节的 ram.区别是变量的优先(或默认)存储在哪里的区别.除非你不想把变量存储在内部

3、 ram,才使用后面的 Compact,Large 模式.因为变量存储在内部 ram 里, 运算速度比存储在外部 ram 要快的多,大部分的应用都是选择 Small 的模式.使用 Small 的方式:也不是说变量就不可以存储在外部,一样可以存储在外部,只是你要指定,比如:unsignedcharxdataa;那么变量 a 就存储在夕卜部的 ram.unsignedchara;变量存储在内部 ram.假如用 Large 的模式:unsignedcharxdataa;那么变量 a 就存储在夕卜部的 ram.unsignedchara;变量存储在外部 ram.这就是区别,就是说这几个选项只是影响没有

4、特别指定变量的存储空间的时候,默认存储在哪里,比如上面的变量定义 unsignedchara.2. CODEROMSIZESmall:program2Korless;适用于 89c2051 这些芯片,2051 只有 2k 的代码空间,所以跳转地址只有 2k,编译的时候会使用 ACALLAJMPg 些短跳转指令,而不会使用 LCALL,LJMP 旨令.如果你的代码跳转超过 2k,那么会出错.Compact:2kfunctiongs,64kprogram:表示每个子函数的程序大小不超过 2k,整个工程可以有 64k 的代码.就是说在 main()里可以使用 LCALL,LJMP 指令,但在子程序里

5、只会使用 ACALL,AJMP 指令.除非你确认你的每个子程序不会超过 2k,否则不要用 Compact 方式.Large:64Kprogram:表示程序或子函数都可以大到 64k.使用 codebank 还可以更大.通常我们都选用该方式.CodeRomSize 选才?Large 方式速度不会比 Small 慢很多,所以一般没有必要选择 Compact 和 Small的方式.我们这里选择 Large 方式.3. OPERATINGNONE 不适用操作系统RTX51-TINY 使用 TINY 操作系统RTX-FULL 使用 FULL 操作系统KeilC51 提供了 Tiny 多任务操作系统,使用

6、定时器 0 来做任务切换,效率很低,无实用价值。Full 需要用户使用外部 RAM 且需要单独购买运行库,不能使用,默认选 NONE4. 存储器选择1. UseOn-chipROM(0 x0-0 x1fff)这个选项是使用片上的 FlashRom,我们知道 At89c52 有 8k 的 flashRom.取决于你的应用系统,你的单片机的 EA 接高电平的话,请选中这个选项,如果你的单片机的 EA 接低电平,表示使用外部 Rom,那么不要选中该选项.我们在这里选中它2. Off-chipCodememory表示你在片外接的 Rom 勺开始地址和大小,如果你没有外接程序存储器,那么不要填任何数据.

7、我们在这里假设使用一个片外的 Rom 地址从 0 x8000 开始(不要填成 8000,如果是 8000,是 10 进制的数,一般填 16进制的数),Size 为外接 Roml 勺大小.假设接了一块 0 x1000 字节的 rom.最多可以外接 3 块 Rom 如果你还用了别的地址,那么就添上.3. Off-ChipXdataMemory那么可以填上你外接的 Xdata(外部数据存储器的起始地址和大小,一般的应用是接一个 62256,我们在这里特殊的指定 Xdata 的起始地址为 0 x2000,大小为 0 x8000;5.CodeBanking使用 CodeBanking 技术.keil 可

8、以支持程序代码超过 64k 的情况,最大可以有 2 兆的程序代码.如果你的代码超过 64k,那么就要使用 CodeBanking 技术,以支持更多的程序空间.CodeBanking 是一个高级的技术,支持自动的 Bank 的切换,是建立一个大型系统的需要,比如你要在单片机里实现汉字字库,实现汉字输入法,都要用到该技术.我们会在以后的文章里论述 Bank 技术.我们在这里不选中它.二.optionfortarget 设置之 output 项selectfolderforobject:选择编译之后的目标文件所存放的目录,默认存放在工程文件夹中nameofexecutable:设置生成的目标文件的名

9、字,默认是工程名。createxecutable:生成 OM 舜口 HE 双件,OM 戊件名同工程文件名但没有扩展名 creathexfile:选中该项编译后生成可以少些的 HEX 文件。creatlibrary:生成 lib 库文件,默认不选。aftermake:l.beepwhencomplete:编译完成后提示声响2.startdebugging:编译完成后马上启动调试(软件仿真或硬件仿真),默认不选中3.runuserprogram1,runuserprogram2:根据需要设置编译之后的应用程序,比如自己编写的烧写芯片的程序,或调用外部仿真程序。3.listingselectfold

10、erforlistings:选择列表文件存放的目录,默认为工程文件所在的目录。*.lst,*.m51 文件对了解程序用到了哪些 idata、data、bit、xdata、code、RAMROMStack 等有很重要的作用。Assemblycode 生产汇编的代码,根据需要决定是否选择。4.c51用于对 Keil 的 C51 编译器编译过程进行控制,其中比较常用的是“codeoptimization”组,该组中 level 是优化等级,C51 在对源程序进行编译时可以对代码多至 9 级优化,默认使用 8 级,一般不必修改。如果在编译中出现一些问题可以降低优化级别试一试。emphasis 是选择编

11、译优先方式,第一项是代码量优化(最终生成的代码量小),第二项是速度优先(最终生成的代码速度快),第三项是默认的,是速度优先,可根据需要更改。5.BL51locat使用 KeilC51 软件,可以很方便地将代码或者数据绝对定位到某个地址。1、代码定位:方法 1:使用伪指令 CSEG 比如要将 MyFunc1 定位到代码区 C:0 x1000,则新建一个 A51 文件,添加以下内容:PUBLICMYFUNC1CSEGAT1000HMYFUNC1:;其它代码RET在其它源文件中,就可以调用 MyFunc()函数了。需要注意的是,编译器不检测传递参数的数目,仅检测函数是否有返回值。方法 2:使用 BL

12、51Locate 选项。比如在 main.c 中定义了一个 MyFunc2 函数,并且要将该函数定位到代码区 C:0 x2000,则从菜单中选择 Project-OptionsforTargetTarget1,在弹出的对话框中选择 BL51LocateM,在下面的 code 栏中写上?PR?MYFUNC2?MAIN(0 x200 咖。如果想定位多个函数,也可以使用*通配符。2、变量定位:只有全局变量可以绝对定位,局部变量无法实现绝对定位。方法 1:使用_at_关键字。声明一个全局变量 unsignedchardataMyBuf18_at_0 x20;方法 2:使用 BL51Locate 选项。

13、比如将 main.c 中定义的所有 data 型的全局变量定位到数据区D:0 x28 开始的空间,则从菜单中选择Project-OptionsforTargetTarget1,在弹出的对话框中选择BL51Locate页, 在下面的data栏中写上?DT?MAIN(0 x28 即可。如果是 idata,则使用?ID?MAIN(0 x28),如果是 xdata,则使用?XD?MAIN(0 x28)如果是 pdata,贝 U 使用?PD?MAIN(0 x28)3、堆栈定位:在 STARTUP.A5 文件中定义了堆栈区?STACK 其起始地址同样可以在 BL51Locate 页中设置,在 Stack栏

14、写上?STACK(0 x80)4.函数定位:假如要把 C 源文件 tools.c 中的函数intBIN2HEX(intxx)放在 CODEMEMORY0 x1000 处,先编译该工程,然后打开该工程的 M51 文件,在*CODEMEMORY行下找出要定位的函数的名称,应该形如:CODExxxxHxxxxH然后在:Project-OptionsforTarget.-BL51Locate:Code中填写如下内容:?PR?_BCD2HEX?TOOLS(0 x1000)再次 Build,在 M51 中会发现该函数已放在 CODEMEMORY0 x1000 处了2、赋初值的变量定位:要将某变量定位在一绝

15、对位置且要赋初值,此时用_at_不能完成,则如下操作:在工程中建立一个新的文件,如 InitVars.c,在其中对要处理的变量赋初值(假设是 code 变charcodemyVer=COPYRIGHT2001-11;然后将该文件加入工程,编译,打开 M51 文件,若定义的是 code 型,则在*CODE卜可找至 U:CODExxxxHMEMORY*xxxxHUNIT?CO?INITVARS然后在:Project-OptionsforTarget.-BL51Locate:Code 中填入:?CO?INITVARS(0 x200)再次编译即可。相应地,如为 xdata 变量,则 InitVars.c 中写:charxdatamyVer=COPYRIGHT2001-

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论