首页 Keil C51使用帮助 [中文资料]

Keil C51使用帮助 [中文资料]

举报
开通vip

Keil C51使用帮助 [中文资料] 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 1 8051演示套件 前言 该手册是 Keil软件公司 8051单片机软件开发工具的介绍 是为新用户和有兴趣的读者准备的使用 指南 只需要阅读本书就可以正确地运行和使用该软件 这本用户指南包括以下章节的内容 第一章 介绍 对本用户手册的概述 第二章 安装 讲述怎样安装软件并设置工具的操作环境 第三章 8051产品系列 讲述为 8051单片机提供的不...

Keil C51使用帮助 [中文资料]
广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 1 8051演示套件 前言 该手册是 Keil软件公司 8051单片机软件开发工具的介绍 是为新用户和有兴趣的读者准备的使用 指南 只需要阅读本书就可以正确地运行和使用该软件 这本用户指南包括以下章节的内容 第一章 介绍 对本用户手册的概述 第二章 安装 讲述怎样安装软件并设置工具的操作环境 第三章 8051产品系列 讲述为 8051单片机提供的不同产品 读完本章可以决定选用哪一种产 品 第四章 8051 开发工具 讲述 8051 开发工具的主要特征 包括 C 编译器 汇编器 调试器和 集成开发环境 第五章 使用 8051工具 讲述通过演示程序指导用户如何使用这套工具 第六章 硬件产品 介绍辅助开发和调试的硬件工具 还有 80C517A 和 80C520 评估板以及 EPROM仿真器 第七章 实时内核 讲述 RTX 51实时操作系统 该章还提供多任务处理系统的概述 第八章 命令参考 简要讲述了 8051开发工具的命令及控制符 第一章 介绍 Keil 软件公司的 8051 单片机软件开发工具可用于众多的 8051 派生器件以实现嵌入式应用 开发 工具 清单 安全隐患排查清单下载最新工程量清单计量规则下载程序清单下载家私清单下载送货清单下载 如下 y C51优化 C编译器 y A51宏汇编器 y 8051工具 连接器 目标文件转换器 库管理器 y Windows版 dScope源程序级调试器/模拟器 y Windows版µVision集成开发环境 这些工具都集合在一个套件内 见第三章 独立的工具在第四章详细介绍 除了以上的开发工具 以外 还提供实时内核 评估板和调试硬件 这些内容详见第六章和第七章的讲述 这套工具是为专 业软件开发者设计的 但任何水平的编程者都可使用 手册主题 该手册讨论了许多主题 包括 y 将软件安装到系统并将其调整到最佳性能 见第二章 y 为你的应用系统选择最佳工具套件 见第三章 y 使用 8051开发工具 见第四章 y 运行演示程序 见第五章 如果想要马上开始使用 应当安装软件并运行演示程序 评估和演示套件 Keil提供两套软件供用户对开发工具进行评估 C51 演示套件是开发工具的示范版本 演示套件中的工具并不产生实际的目标代码 而是产生列 表文件 可通过列表文件查看编译器和其它工具产生的代码 C51评估套件是工具的评估版本 评估套件的工具可产生最大为 2K的应用程序 可使用该套件评 估开发工具的效用 并可用于产生小型的目标应用系统 第二章 安装 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 2 这一章讲述如何设置一个操作环境以及如何将软件安装到硬盘上 在开始安装之前 必须进行以 下步骤 y 确定你的计算机系统符合最低配置要求 y 将安装盘备份 系统要求 为了保证编译器和工具的正常工作 系统必须满足软件和硬件的最低配置 对Windows版工具 必须满足以下条件 y 100 IBM兼容 386或以上 PC y Windows3.1版或以上 y 至少 4M内存 y 硬盘至少有 6MB磁盘空间 对 DOS版工具 必须满足以下条件 y 100 IBM兼容 386或以上 PC 带 640K内存 y MS-DOS3.1版或以上 y 硬盘至少有 6MB磁盘空间 C 编译器及工具要求 CONFIG.SYS 文件中至少定义 20 个文件及 20 个缓冲区 此外还需要足够的 环境空间供编译器和工具的环境变量使用 见 环境设置 章节 CONFIG.SYS文件应当和下列格式相似 BUFFERS 20 FILES 20 SHELL C:\COMMAND.COM/e: 1024/p 如果在 DOS下收到信息 Out of environment space 就需要通过增加示例中 1024的值以增加环 境空间数量 详情参考 DOS用户指南 备份磁盘 强烈建议用户将安装磁盘拷贝到一个备份盘上 然后用备份磁盘来安装软件 将原磁盘妥善保存 以防止备份磁盘丢失或损坏 安装 DOS版产品 要安装 DOS版 将第一个安装盘插入驱动器 A 并在 DOS提示符下键入以下命令 A INSTALL 然后按安装程序的提示继续安装 安装 Windows版产品 要安装Windows版产品 y 将第一个安装盘插入驱动器 A y 在程序管理器的 文件 菜单中选择 运行 y 在命令行提示符下键入 A SETUP y 选择 OK 按钮 然后按安装程序的提示继续安装 目录结构 安装程序将开发工具复制到下列根目录中的子目录 所使用的目录由安装的工具套件决定 目录 描述 \C51 8051开发工具 \C51EVAL 8051评估工具 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 3 在创建适当的目录后 安装程序将开发工具复制到下列子目录中 子目录 描述 ASM 汇编器包含文件 BIN 可执行文件 DS51 dScope-51 DOS IOF驱动器 EXAMPLES 示例应用程序 RTX51 RTX 51 RTX_TINY RTX 51 INC C编译器文件 LIB C编译器库文件和启动代码 MON51 目标监控文件 TS51 tScope-51 DOS IOT驱动器 环境设置 下表列出了环境变量 它们的默认路径以及简要的描述 变量 路径 描述 PATH \C51\BIN 定义 8051开发工具的路径 PATH \C51EVAL\BIN 定义 8051评估工具的路径 TMP 定义产生暂存文件的路径 要得到最佳性能 定义 的路径应当是 RAM磁盘 如果环境变量已经定义 路径必须存在 否则 工具将报告严重出错 C51INC \C51\INC 定义标准 C51编译器包含文件的路径 C51LIB \C51\LIB 定义标准 C51编译器库文件的路径 通常 环境设置由安装程序自动安装自动安装到 AUTOEXEC.BAT文件中 如果想将这些设置放 入一个单独的批处理文件中 必须写入如下的环境设置 8051开发工具 8051演示工具 PATH=C:\C51\BIN; PATH C:\C51EVAL\BIN; SET C51INC=C:\C51\INC SET C51INC=C:\C51EVAL\INC SET C51LIB=C:\C51\LIB SET C51LIB=C:\C51EVAL\LIB 改善系统性能 可以使用两种方法改善 C51编译器和工具的性能 这些技术可以帮助改善大多数应用系统的性能 y 为编译器和工具软件提供一个 RAM磁盘用于暂存文件 y 使用磁盘高速缓冲区 disk cache 保存最近访问过的磁盘文件 使用 RAM磁盘 如果计算机有足够的扩展或扩充存储器 可以考虑使用 RAM磁盘 由于 RAM磁盘的内容保存在 RAM中 访问的速度将会非常快 如果使用 RAM磁盘 可以将环境变量 TMP设成 RAM磁盘的名称 由于可以使用 RAM磁盘存放暂存文件 这样可加速许多工具软件的执行 有许多 RAM磁盘的软件可用 RAMDRIVE.SYS和 VDISK.SYS是 DOS最常装载的 RAM磁盘程 序名 参考 DOS手册学习如何安装这些程序 使用磁盘高速缓冲区 磁盘高速缓冲区利用巨大的存储区来暂存从磁盘读取的信息 当计算机访问磁盘时 先检查所要 的信息是否已在高速缓冲区内 如果是 就从高速缓冲区内而不是从磁盘内读取信息 这显然要比从 磁盘读取信息快许多 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 4 通常 软件的开发包括编辑 编译 编辑 编译的循环 这种情况下磁盘高速缓冲区提高了编辑 器 编译器和连接器的性能 编辑器 编译器 源文件和目标文件全都可以放入高速缓冲区 这样对 磁盘的访问就降到最少 MS DOS5.0和 6.0都有磁盘高速缓冲区的应用程序 叫做 SMARTDRV.SYS 参考 DOS使用手 册学习如何安装和使用该程序 第三章 8051产品系列 Keil提供工业用的 8051开发工具 为了帮助你熟悉我们是如何分配工具的 下面介绍工具套件的 概念 工具套件是几个应用程序的集合 这些程序用来创建 8051应用系统 使用汇编器汇编 8051汇 编程序 使用编译器将 C源代码编译成目标文件 使用连接器创建一个绝对目标文件模块供仿真器使 用 8051开发工具套件 使用 Keil的开发工具 其项目开发周期和任何软件开发项目都大致一样 1. 创建 C或汇编语言的源程序 2. 编译或汇编源文件 3. 纠正源文件中的错误 4. 从编译器和汇编器连接目标文件 5. 测试连接的应用程序 工具套件概述 上面所述的开发周期用方框图表示最合适 如图所示 用µVision/51 IDE创建源文件 然后通过 C51编译器或 A51 汇编器 编译器或汇编器处理源文件并创建浮动目标文件 目标 文件可通过 LIB51库管理器创建库 库是一个专门格式的 有顺 序的目标模块程序集 连接器可对其进行处理 目标文件和库文 件通过连接器创建一个绝对目标模块 绝对目标文件或模块是没 有浮动代码的目标文件 绝对目标文件中的所有代码都有固定的 位置 由连接器创建的绝对目标文件可用于编程 EPROM或其它存 储器件 绝对目标模块也可和 dScope-51调试器/模拟器或电路内 部仿真器一起使用 dScope-51调试器/模拟器对于快速可靠的高级语言程序的调 试非常理想 调试程序包括一个高速模拟器和一个目标调试器 可对整个 8051系统包括片内外围功能进行仿真 通过装载特殊 的 I/O驱动器 可对不同的 8051派生器件的外围功能进行仿真 和Monitor-51相连后 调试程序甚至可以在目标硬件上达到源程 序级的仿真 RTX-51实时操作系统是一个用于 8051系列的多任务处理内 核程序 RTX-51实时内核简化了系统的设计 编程以及对时间 有严格要求的复杂系统的调试 内核完全集成在 C51编译器中 并且非常易用 任务描述表和操作系统的一致性由 BL51连接器/定位器自动控制 工具套件介绍 上图列出了 Keil 8051开发工具的全部内容 该图中列出的工具包括下面将要介绍的专业开发者套 件 除了专业开发者套件外 Keil还为 8051开发者提供了其它许多工具 为了更好地说明每套工具的 内容 我们按照功能排序 首先介绍功能最强的专业开发者套件 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 5 PK51 C51专业开发者套件 该套件包括了专业的 8051开发者创建复杂应用系统所需要的一切工具 该套件的组件如下 y C51优化 C编译器 y A51宏汇编器 y BL51代码连接器/定位器 y OC51目标文件转换器 y OH51目标 十六进制转换器 y LIB51库文件管理器 y dScope-51模拟器/调试器 y tScope-51目标调试器 y Monitor-51 ROM监视和终端程序 y 集成开发环境 y RTX-51 Tiny实时操作系统 另外 专业开发者套件还包括为Windows用户提供的下列工具 y Windows版 dScope-51模拟器/调试器 y Windows版µVision/51集成开发环境 专业开发者套件可配置用于所有 8051派生器件 该套件中所有工具需运行在 100 IBM PC386或 以上兼容机的 DOS环境下 DK51 C51开发者套件 DK51 C51开发者套件是为那些需要在完全 DOS环境下进行 8051开发的用户设计的 该套件可 使用户在 DOS开发平台上创建复杂的嵌入式应用系统 该套件包括以下组件 y C51优化 C编译器 y A51宏汇编器 y BL51代码连接器/定位器 y OC51目标文件转换器 y OH51目标 十六进制转换器 y LIB51库文件管理器 y dScope-51模拟器/调试器 y tScope-51目标调试器 y Monitor-51 ROM监视和终端程序 y 集成开发环境 开发者套件可配置用于所有 8051派生器件 该套件中所有工具需运行在 100 IBM PC386或以上 兼容机的 DOS环境下 CA51 C51编译器套件 CA51 C51编译器套件是需要 C编译器而不需要调试系统的开发者的最佳选择 该套件可使开发 者为目标硬件创建 8051应用系统 该编译器套件可配置用于所有的 8051派生器件 该套件中的工具 需运行在 100 IBM PC386或以上兼容机的 DOS环境下 A51 A51宏汇编器套件 A51宏汇编器套件包括 8051汇编器和所有创建 8051应用系统所需的工具 该汇编器套件可配置 用于所有的 8051派生器件 该套件中的工具需运行在 100 IBM PC386或以上兼容机的 DOS环境下 DS51-dScope-51模拟器套件 DS51模拟器套件包括与 A51汇编器套件一起使用的调试器/模拟器和 CA51编译器套件 由于模 拟器可对程序指令进行单步操作 使用该套件可迅速找出 8051应用系统出现问题的位置 还可以观察 程序变量 SFR和存储器 该套件包括以下组件 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 6 y dScope-51模拟器/调试器 y tScope-51目标调试器 y Monitor-51 ROM监视和终端程序 该模拟器套件可配置用于大多数 8051派生器件 该套件中的工具需运行在 100 IBM PC386或以 上兼容机的 DOS环境下 FR51 RTX 51 Full实时内核程序 FR51 RTX 51 Full实时内核程序是一个用于 8051单片机的实时操作系统 RTX-51 Full全实时 内核提供特征超集以及 BITBUS和 CAN通讯协议界面库 具体内容参看 第七章 实时内核程序 工具套件比较表 下表为每个开发工具套件的项目清单 通过该表用户可选择最合适的工具套件 PK51 DK51 A51 8051 汇编器 编译器 模拟器 IDE RTX Windows DOS 第四章 8051开发工具 这一章介绍 8051单片机家族的特征和优点 以及 Keil的开发工具 开发工具可帮助开发者迅速并 成功的实现设计目标 8051单片机家族 8051问世于二十世纪八十年代早期 由于 8051CPU内核有着杰出的特性以及外围功能 在本世纪 仍然可以得到良好的应用 现今不同的芯片供应商可提供超过 200种 8051派生器件 有超过半数的嵌 入式项目使用 8051系列单片机 作为嵌入式处理器 8051是一枝独秀的 典型的 8051家族成员包含 8051CPU内核 数据存储器 程序存储器和一些外围功能 灵活的存 储器界面使用户可以通过标准的外设和存储器件扩展 8051的性能 8051开发工具 Keil5为 8051提供下列开发工具 y C51优化 C编译器 y A51宏汇编器 y BL51代码连接器/定位器 y OC51目标文件转换器 y OH51目标 十六进制转换器 y LIB51库文件管理器 y Windows版 dScope-51模拟器/调试器 y Windows版µVision/51 C51优化 C交叉编译器 C语言是一种通用编程语言 它提供高效代码 结构化编程元素及丰富的运算符 C不是一个大 型的语言 不是为特定领域内的应用而设计的 C的普遍性使它可以为各种不同的软件任务提供便利 有效的编程方案 许多应用设计使用 C比其它专门语言更有效 Keil的 C51优化交叉编译器 MS DOS版 是完全符合 ANSI 美国国家标准协会 标准的 C语 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 7 言工具 C51编译程序产生 8051单片机使用的代码 但它不是一个适合 8051目标硬件的通用 C编译 器 对于大多数 8051应用 使用像 C这样的高级语言比使用汇编程序更具优点 例如 y 不需要了解处理器的指令集 对 8051的存储器结构也不必要了解 y 寄存器分配和寻址方式由编译器进行管理 y 指定操作的变量选择组合提高了程序的可读性 y 可使用与人的思维更相近的关键字和操作函数 y 与使用汇编语言编程相比 程序的开发和调试时间大大缩短 y 库文件可提供许多标准的例程 例如格式化输出 数据转换和浮点运算 加入到应用程序当中 y 通过 C可实现模块化编程技术 从而可将已编制好的程序加入到新程序中 y C语言可移植性好且非常普及 C编译器几乎适用于所有的目标系统 已完成的软件项目可以 容易地转换到其它的处理器或环境 C51语言扩展 C51编译器是符合 ANSI标准的 C编译器 C语言的扩展支持 8051单片机的应用 包括 y 数据类型 y 存储器类型 y 存储器模型 y 指针 y 再入函数 y 中断函数 y 实时操作系统 y PL/M和 A51源文件接口 下面章节将简要介绍这些扩展功能 数据类型 C51编译器支持下表列出的数据类型 除了这些标量类型外 还可以将变量组合到结构 联合及 阵列中 除了指明的类型 可通过指针访问这些数据类型 数据类型 位 字节 值的范围 bit1 1 0~1 带符号 char 8 1 -128~+127 无符号 char 8 1 0~255 enum 16 2 -32768~+32767 short 16 2 -32768~+32767 short 16 2 0~65535 int 16 2 -32768~+32767 int 16 2 0~65535 long 32 4 -2147483648~+2147483647 long 32 4 0~4294967295 float 32 4 +1.175494E-38~+3.402823E+38 sbit1 1 0~1 sfr1 8 1 0~255 sfr161 16 2 0~65535 1. bit sbit sfrs和 sfr16数据类型专门用于 8051硬件和 C51编译器 并不是 ANSI C的一 部分 不能通过指针进行访问 bit sbit sfrs和 sfr16数据类型用于访问 8051的特殊功能寄存器 例如 sfr P0 = 0x80定义 变量 P0并将其分配特殊功能寄存器地址 0x80 在 8051上是 P0口的地址 当结果表示不同的数据类型时 C51编译器自动转换数据类型 例如 位变量在整数分配中就被 转换成一个整数 除了数据类型的转换之外 带符号变量的符号扩展也是自动完成的 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 8 存储器类型 C51编译器支持 8051及其派生器件结构并提供对 8051所有存储区的访问 每个变量可以明确地 分配到指定的存储空间 对内部数据存储器的访问比对外部数据存储器的访问快许多 因此 应当将 频繁使用的变量放在内部数据存储器 而把较少使用的变量放在外部数据存储器中 变量的定义包括了存储器类型的指定 可以指定变量存放的位置 存储器类型 描述 code 程序存储器 64K字节 通过操作码 MOVC @A+DPTR进行访问 data 直接寻址内部数据存储器 对变量的最快访问 128字节 idata 间接寻址内部数据存储器 访问整个内部地址空间 256字节 bdata 位寻址内部数据存储器 允许位和字节混合寻址 16字节 xdata 外部数据存储器 64K字节 通过 MOVX @DPTR访问 pdata 页外部数据存储器 256字节 通过 MOVX @Rn访问 存储器模型 存储器模型决定用于函数自变量 自动变量和没有明确存储类型的变量的默认存储器类型 在命 令行中使用 SMALL COMPACT和 LARGE控制命令指定存储器类型 SMALL 在该模型中 所有变量都默认位于 8051内部数据存储器 这和使用 data指定存储 器类型的方式一样 此模型对于变量访问的效率很高 但所有的数据对象和堆栈必须适合内部 RAM 堆栈的大小很关键 因为使用的堆栈空间是由不同函数嵌套的深度决定的 通常 如果 BL51连接器/ 定位器将变量都配置在内部数据存储器内 SMALL模型是最佳选择 COMPACT 使用 COMPACT模型 所有变量都默认在外部数据存储器的一页内 这和使用 pdata 指定存储器类型一样 该存储器类型适用于变量不超过 256个字节 此限制是由寻址方式所决定的 该存储器模型的效率低于 SMALL模型 对变量访问的速度要慢一些 但比 LARGE模型快 地址的高 字节通常通过口 2设置 编译器没有设置该口 LARGE 在 LARGE模型中 所有变量都默认位于外部数据存储器 这和使用 xdata指定存储 器类型一样 使用数据指针 DPTR 进行寻址 通过数据指针访问外部数据存储器的效率较低 特别 是当变量为 2个字节或更多字节时 该模型的数据访问比 SMALL和 COMPACT产生更多的代码 指针 C51编译器支持使用 * 号说明的指针 可以使用指针执行标准 C中所有可执行的操作 但由于 8051及其派生器件的独特结构 C51支持两种不同类型的指针 存储器特殊指针和普通指针 普通指针 普通指针的说明和标准 C指针相同 例如 char *s; /* string ptr */ int *numptr /* int ptr */ long *state /* long ptr */ 普通指针总是使用三个字节进行保存 第一个字节用于存储器类型 第二个字节用于保存偏移量 的高字节 第三个字节用于保存偏移量的低字节 普通指针可以访问 8051存储空间任何位置的变量 因此许多库程序使用此类型的指针 使用这种普通隐式指针可访问数据而不用考虑数据在存储器中的 位置 存储器特殊指针 在指针的说明中 存储器特殊指针总是包含存储器类型的指定 并总是指向一个特定的存储器区 域 例如 char data *str; /* ptr to string in data */ int xdata *numtab; /* ptr to int(s) in xdata */ 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 9 long code *powtab; /* ptr to long(s) in code */ 由于存储器类型在编译时指定 因此 无类型指针需要存储器类型字节 而已定义类型指针则不 需要 已定义类型指针可用一个字节 idata,data,bdata和 pdata指针 或两个字节 code和 xdata指 针 存储 比较 存储器特殊&普通指针 用户可通过存储器特殊指针加速 8051C 程序 下面的例子为几个不同指针说明中代码&数据规模 和执行时间之间的差异 描述 idata指针 Xdata指针 Generic指针 示例程序 char idata *ip; char xdata *xp; char *p; char val; char val; char val; val = *ip; val = *xp; val = *p; 所产生的 8051程 MOV R0,ip MOV DPL,xp+1 MOV R1,p+2 序代码 MOV val,@R0 MOV DPH,xp MOV R2,p+1 MOV A,@DPTR MOV val ,A MOV R3,p CALL CLDPTR 指针大小 1字节数据 2字节数据 3字节数据 代码大小 4字节代码 9字节代码 11字节代码 + Lib. 执行时间 4个周期 7个周期 13个周期 再入函数 再入函数可以同时由几个程序共用 当执行再入函数时 其它程序可以中断执行并开始执行同一 个再入函数 通常 C51 函数不能递归调用或用于导致重入的方式 受到该限制是因为函数自变量和 局部变量都存放在固定的存储器位置 再入函数属性允许说明那些可以重入的函数 因此可以实现递 归调用 例如 int calc (char i, int b) reentrant { int x; x=table [i] return (x * b) } 再入函数可以递归调用 也可以同时被两个或更多程序调用 它经常用于实时应用或中断代码和 非中断代码必须共用一个函数的情况 对于每个再入函数 根据存储器的模型在内部或外部存储器模 拟再入堆栈区 中断函数 当中断发生时 C51 编译器提供一个调用 C 函数的方法 这使用户可以用 C 创建中断服务程序 用户只需要关心中断数和选择的寄存器组 编译器自动产生中断向量和进入及退出代码 中断函数属 性 当包含在一个说明中时 指定所关联的函数为中断函数 此外 用户可以指定用于中断的寄存器 组 unsigned int interruptcnt; unsigned char second; void timer0 (void) interrupt 1 using 2 { if (++interruptcnt = = 4000) { /* count to 4000 */ second++; /* second counter */ interruptcnt = 0; /* clear int counter */ } } 参数传递 C51 编译器在 CPU 寄存器中最多可传递三个函数自变量 由于自变量不必从存储器中读写 因此 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 10 显著地提高了系统的性能 参数的传递可通过 REGPARMS和 NOREGPARMS控制命令进行控制 下表列出了用于不同自变量和数据类型的寄存器 自变量数 char 1字节指针 int, 2字节指针 long, float 普通指针 1 2 3 R7 R5 R3 R6&R7 R4&R5 R2&R3 R4-R7 R1-R3 如果没有寄存器可用于参数传递或包含的参数太多 使用固定存储器位置传递超出部分的参数 函数返回值 CPU寄存器总是用于函数返回值 下表列出了返回类型和所用的寄存器 返回类型 寄存器 描述 bit 进位标志 char,unsigned char,1-byte pointer R7 int,unsigned int,2-byte pointer R6&R7 R6为高字节 R7为低字节 long,unsigned long R4 – R7 R4为高字节 R7为低字节 float R4 – R7 32位 IEEE格式 generic pointer R1 – R3 存储器类型在 R3中 R2为高字节 R1 为低字节 寄存器优化 根据程序的前后关系 C51 编译器最多分配 7 个 CPU 寄存器用于寄存器变量 函数执行中的任何 寄存器修改都由 C51 编译器在每个模块中标明 连接器/定位器产生一个总体的寄存器文件 其中包含 了所有被外部函数改变的寄存器的信息 因此 C51 编译器知道在应用中被每个函数使用的寄存器 并优化每个 C函数的寄存器分配 实时操作系统支持 C51编译器很好地集成了 RTX-51多任务实时操作系统 在连接过程中产生并控制任务描述表 详 细内容参考 第七章 实时内核 汇编接口 从 C 可以很容易地访问汇编程序 反之亦然 函数参数通过 CPU 寄存器进行传递 或使用 NOREGPARMS 命令时通过固定存储器位置进行传递 函数返回值总是在 CPU 寄存器中传递 用户 可以使用 SRC 命令指导 C51 编译器产生一个准备用 A51 汇编器汇编的文件 而不是一个目标文件 例如下面的 C源文件 unsigned int asmfunc1 (unsigned int arg) { return (1+arg) ; } 当使用 SRC命令编译时 产生下列汇编输出文件 ?PR? asmfunc1?ASM1 SEGMENT CODE PUBLIC asmfunc1 RSEG ?PR?_asmfunc1?ASM1 USING 0 asmfunc1: ;----Variable ‘arg?00’assigned to Register ‘R6/R7’---- MOV A,R7 ADD A,#01H ;load LSB of the int MOV R7,A ;put it back into R7 CLR A ADDC A,R6 ;add carry & R6 MOV R6,A 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 11 ?C0001: RET ;return result in R6/R7 可以使用#pragma asm和#pragma endasm预处理程序命令将汇编指令插入到 C源代码中 与 PL/M-51的接口 Intel的 PL/M-51是一种广泛使用的编程语言 它在许多方面和 C相似 用户可以轻松地将 C程序 和 PL/M-51程序连接起来 代码优化 C51 编译器是一个主动优化编译器 意思是说编译器采取一定的步骤确定产生的代码和输出的目 标文件是高效的代码 编译器分析所产生的代码并使之成为最高效的指令序列 这确保了 C 程序在最 小程序空间内实现尽可能高效的运行 C51 编译器提供 6 种不同级别的优化 高级优化包含低级优化 下面列出了 C51 编译器可执行的 所有优化 y 常量合并 一个表达式或地址计算式内的几个常量合并成一个常量 y 跳转优化 跳转反演或扩展为最终目标地址 使程序效率得以提高 y 无用代码消除 将不可能执行的代码 无用码 从程序中删除 y 寄存器变量 自动变量和函数自变量尽可能放在寄存器中 没有为这些变量保留数据存储器空 间 y 参数通过寄存器传递 通过寄存器最多可传递 3个函数自变量 y 全局共用的子表达式消除 将在一个函数中多次出现的子表达式和地址计算式尽可能只计算一 次 8051特殊优化 y 窥孔优化 当存储器空间或时间可作为结果保存时 用简化操作代替复杂操作 y 访问优化 在操作中直接计算并包含常量和变量 y 数据覆盖 数据和位段函数被认为是可覆盖的 并通过 BL51连接器/定位器用其它数据和位段 覆盖 y Case/Switch 优化 Case 和 Switch 语句 根据它们的数据 序列和位置 可以使用跳转表或跳 转串进行优化 代码产生选项 y OPTIMIZE SIZE 子程序代替共用的 C操作 在降低程序运行速度的前提下 减小了程序 代码占用的空间 y OPTIMIZE SPEED 共用的 C操作内嵌扩展 增加程序代码的规模换取程序速度的提高 y NOAREGS C51编译器不再使用绝对寄存器访问 程序代码独立于寄存器组 y NOREGPARMS 参数传递总是在局部数据段内而不是在专门寄存器内进行 使用 pragma 创建的程序代码和 C51编译器 PL/M-51编译器和 ASM-51汇编器的较早版本兼容 全局寄存器优化 C51编译器支持宽范围的寄存器优化 下面的例子为 C51 5.0版和 C51 3.4版的比较 由于使用应用寄 存器优化 C51 编译器知道由外部函数使用的寄存器不由外部函数改变的寄存器用于寄存器变量 这 样所产生的代码占用更少的数据和代码空间并且执行得更快 在下面的例子中 input 和 output 为外部 函数 仅需占用几个寄存器 带全局寄存器优化 无全局寄存器优化 main () { 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 12 unsigned char i; unsigned char a; while (1) { i = input (); /* get number of values */ ?C0001: ?C0001: LCALL input LCALL input ;- assigned to R6- MOV DPTR,#i MOV R6,AR7 MOV A,R7 MOV @DPTR,A do { a = input (); /* get input value */ ?C0005: ?C0005: LCALL input LCALL input ;- assigned to R7- MOV DPTR,#a MOV R5,AR7 MOV A,R7 MOVX @DPTR,A output (a); /* output value */ LCALL _output LCALL _output } while (--i); /* decrement values */ DJNZ R6,?C0005 MOV DPTR,#i MOVX A,@DPTR DEC A MOVX @DPTR,A JNZ ?C0005 } SJMP ?C0001 SJMP ?C0001 } RET RET 代码规模 18字节 代码规模 30字节 调试 C51 编译器使用 Intel 目标格式 OMF51 并产生完全的符号信息 此外 编译器可以包含所有需 要的信息 例如 变量名 函数名和行数等等 这样可以用 dsope-51 或 Intel 兼容的仿真进行详细完全 的调试和分析 所有 Intel兼容仿真器都可用作程序调试 此外 OBJECTEXTEND控制命令将额外的 变量类型信息嵌入目标文件 用户必须向仿真器供应商确认是否和 Intel OMF51目标模块兼容以及是否 能接受 Keil的目标模块 库文件 C51编译器包含了 7个不同的 ANSI编译库文件 可根据不同的功能要求进行优化 库文件 描述 C51S.LIB Small model library without floating-point arithmetic C51FPS.LIB Small model floating-point arithmetic library C51C.LIB Compact model library without floating-point arithmetic C51FPC.LIB Compact model floating-point arithmetic library C51L.LIB Large model library without floating-point arithmetic C51FPL.LIB Large model floating-point arithmetic library 80C751.LIB Library for use with the Philips 8xC751 and derivatives. 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 13 源代码提供给执行硬件相关 I/O 功能的库模块 并建立在\C51\LIB 目录下 用户可使用这些源文 件帮助执行目标硬件中 I/O器件的 I/O功能 内部库程序 编译器所带的库包括了许多作为内部函数的程序 非内部函数产生 ACALL 或 LCALL 指令执行 库程序 内部库程序产生嵌入代码 更快且更有效率 执行库程序 内部函数 描述 _crol_ 字符循环左移 _cror_ 字符循环右移 _irol_ 整数循环左移 _iror_ 整数循环右移 _lrol_ 长整数循环左移 _lror_ 长整数循环右移 _nop_ 空操作 8051 NOP指令 _testbit_ 测试并清零位 8051 JBC指令 列表文件举例 C51编译器产生一个列表文件 其中包含源代码 命令信息 汇编列表和符号表 C51 COMPILER V5.02, SAMPLE 07/01/95 08:00:00 PAGE 1 The C51 compiler produces a DOS C51 COMPILER V5.02, COMPILATION OF MODULE SAMPLE listing file with page numbers OBJECT MODULE PLACED IN SAMPLE.OBJ as well as time and date of COMPILER INVOKED BY: C:\C51\BIN\C51.EXE SAMPLE.C CODE the compilation. Remarks stmt level source about the compiler invocation 1 #include /* SFR definitions for 8051 */ and object file output are 2 #include /* standard i/o definitions */ displayed in this listing. 3 #include /* defs for char conversion */ 4 5 #define EOT 0x1A /* Control+Z signals EOT */ The listing includes a line 6 number for each statement 7 void main (void) { and a nesting level for each 8 1 unsigned char c; block enclosed within curly 9 1 braces (`{`and `}`). 10 1 /* setup serial port hdw (2400 Baud @12 MHz) */ 11 1 SCON = 0x52; /* SCON */ 12 1 TMOD = 0x20; /* TMOD */ 13 1 TCON = 0x69; /* TCON */ 14 1 TH1 = 0xF3; /* TH1 */ 15 1 Error messages and 16 1 while ((c = getchar ()) != EOF) { warning messages are 17 2 putchar (toupper (c)); included in the listing file. 18 2 } 19 1 P0 = 0; /* clear Output Port to signal ready */ 20 1 } ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION main (BEGIN) The CODE compiler option ; SOURCE LINE # 7 includes an assembly code 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 14 ; SOURCE LINE # 11 listing in the listing file. 0000 759852 MOV SCON,#052H Source line numbers are ; SOURCE LINE # 12 embedded within the 0003 758920 MOV TMOD,#020H generated code. ; SOURCE LINE # 13 0006 758869 MOV TCON,#069H ; SOURCE LINE # 14 0009 758DF3 MOV TH1,#0F3H 000C ?C0001: ; SOURCE LINE # 16 000C 120000 E LCALL getchar 000F 8F00 R MOV c,R7 0011 EF MOV A,R7 0012 F4 CPL A 0013 6008 JZ ?C0002 ; SOURCE LINE # 17 0015 120000 E LCALL _toupper 0018 120000 E LCALL _putchar ; SOURCE LINE # 18 001B 80EF SJMP ?C0001 001D ?C0002: ; SOURCE LINE # 19 001D E4 CLR A 001E F580 MOV P0,A ; SOURCE LINE # 20 0020 22 RET ; FUNCTION main (END) MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 33 ---- A memory overview provides CONSTANT SIZE = ---- ---- information about the 8051 XDATA SIZE = ---- ---- memory areas that are used. PDATA SIZE = ---- ---- DATA SIZE = ---- 1 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. The total number of errors and warnings is stated at C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S) the end of the listing file. A51宏汇编器 A51 宏汇编器是用于 8051 单片机家族的宏汇编器 它将符号形式的汇编语言转换成可再定位的目 标代码 功能概述 A51 汇编器将一个汇编源文件转换成一个浮动目标模块 如果使用 DUBUG 控制 目标文件包含 广州周立功单片机发展有限公司 Tel 020 38730916 38730917 38730976 38730977 Fax:38730925 15 了供 dScope或硬件仿真器使用的全部符号信息 除了目标文件之外 A51汇编器还产生一个列表文件 其中可包含符号表和交叉参考信息 A51汇编器和 Intel ASM-51源模块完全兼容 配置 A51 汇编器支持 8051 家族的所有成员 8051 的特殊功能寄存器是预先定义的 但是 NOMOD51 控制可以使用户通过处理器-特殊包含文件覆盖这些定义 A51 汇编器装载了 8051 8051Fx 8051GB 8052 80152 80451 80452 80515 80C517 80C515A 80C517A 8X552 8XC592 8XCL781 8XCL410 和 80C320等微控制器的包含文件 用户也可以轻松创建其它 8051家族成员的包含文件 列表文件举例 下面的例子显示了由 A51 汇编器所产生的列表文件 该列表文件包含源代码 产生的机器码 命 令信息和符号表 A51 MACRO ASSEMBLER Test Program 07/01/95 08:00:00 PAGE 1 The A51 assembler produces a listing file with DOS MACRO ASSEMBLER A51 V5.02 page numbers as well as OBJECT MODULE PLACED IN SAMPLE.OBJ the time and date of the ASSEMBLER INVOKED BY: C:\C51\BIN\A51.EXE SAMPLE.A51 XREF assembly. Remarks about LOC OBJ LINE SOURCE the assembler invocation 1 $TITLE (`Test Program`) and the object file output 2 NAME SAMPLE are displayed in this listing. 3 4 EXTRN CODE (PUT_CRLF, PUTSTRING, InitSerial) 5 PUBLIC TXTBIT Typical programs start with 6 EXTERN, PUBLIC, and 7 PROG SEGMENT CODE SEGMENT directives. 8 CONST SEGMENT CODE 9 BITVAR SEGMENT BIT 10 ---- 11 CSEG AT 0 The listing file includes a 12 line number for each 0000 020000 F 13 Reset: JMP Start source line. 14 ---- 15 RSEG PROG 16 ; ***** 0000 120000 F 17 Start: CALL InitSerial ;Init Serial Interface 18 19 ; This is the main program. It is an endless If a source line generates 20 ; loop which displays a text on the console. code, the HEX values are 0003 C200 F 21 CLR TXTBIT ; read from CODE displayed at the beginning 0005 900000 F 22 Repeat: MOV DPTR,#TXT of the line. 0008 120000 F 23 CALL PUTSTRING 000B 120000 F 24 CALL PUT_CRLF 000E 80F5 25 SJMP Repeat 26 ; ---- 27 RSEG CONST 0000 54455354 28 TXT: DB 扵EST PROGRAM?00H Error messages and 广州周立功单片机发展有限公司 Tel 020
本文档为【Keil C51使用帮助 [中文资料]】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_567795
暂无简介~
格式:pdf
大小:1MB
软件:PDF阅读器
页数:0
分类:互联网
上传时间:2011-09-11
浏览量:20