文档详情

单片机接口技术(C51版) 张道德 第十二章新.ppt

发布:2015-12-14约1.08万字共45页下载文档
文本预览下载声明
单片机接口技术(C51版) 第十二章Keil C51编译及连接技术 内容概述 主要介绍Keil C51的预处理方法如宏定义、常用的预处理指令及文件包含指令,C51编译库的选择及代码优化原理,C51与汇编混合编程的方法与实现以及超过64KB空间的地址分页方法的C51实现。 教学目标 1.了解Keil C51的预处理方法,主要有宏定义#define、常用的预处理指令#define、 #error、#if 、#else、#elif、#endif、#ifdef、#ifndef 、#undef 、#line 、#pragma 及文件包含指令#include。 2.了解small、compact、large三种编译模式信代码优化方法。 3. 掌握C51模块内部调用汇编程序的三种方法,理解C51模块与汇编模块之间的接口规则,主要有C51函数名与汇编程序名的转换规则、C51函数及其相关段的命名规则、C51函数的参数传递规则。 4.理解Keil C51的Bankswitch原理,了解Keil C51的三种分页方式、公共空间的概念,掌握BL51有关分页的配置,以PSD813F2为硬件基础,掌握Keil C51分页的实现过程,能进行分页的程序设计。 12.1 预处理器 12.1.1宏定义 宏定义格式如下: #define 名称 替换文字 宏是一种简单的替换,在程序中凡是出现“名称”之处均被“替换文字”替代,替换文字可以是数字,也可以是字符串。 12.1.2预处理指令 由ANSI C的标准规定, 预处理指令主要包括: ???? #define ???? #error ???? #if ???? #else ???? #elif ???? #endif ???? #ifdef ???? #ifndef ???? #undef ???? #line ???? #pragma #define 指令 例如: #define PI 3.1415926 凡是出现“PI”的地方均以“3.1415926”替换。 宏的出现有助于提高程序的可读性及书写方便性,也有助于程序的调试。 但是,出现在引号中的字符串是不能替换的。如 printf(“PI\n”); 该语句运行后输出的是: PI 而不是 3.1415926 define注意事项 1)在宏定义语名后没有“;”; 2)在C51程序中习惯上用大写字符作为宏替换名,常放在程序开头; 3)宏定义还有一个特点, 就是宏替换名可以带有形式参数,? 在程序中用到时, 实际参数会代替这些形式参数。 ??? 例如: ???? #define MAX(x, y) (xy)?x:y ???? main() ???? { ????????? int i=10, j=15; ????????? printf(The Maxmum is %d, MAX(i, j); ???? } ??? 上例宏定义语句的含义是用宏替换名MAX(x, y)代替x, y中较大者,? 同样也可定义: ???? #define MIN(x, y) (xy)?x:y ??? 表示用宏替换名MIN(x, y)代替x, y中较小者。 define注意事项 4)#define命令在程序之外,其有效范围为定义命令之后到源文件结束,但是可以用#undef命令终止宏定义的作用域。如: #define PI 3.1415926 void main(void) { …… } #undef PI PI的范围从#define 开始到#undef PI 结束 #if、#else、#endif指令 ??? #if、#els和#endif指令为条件编择指令, 它的一般形式为: ???? #if 常数表达式 ????????? 语句段; ???? #else ????????? 语句段; ???? #endif ??? 上述结构的含义是: 若#if指令后的常数表达式为真, 则编译#if到#else 之间的程序段; 否则编译#else到#endif之间的程序段。 ??? 例如: ???? #define MAX 200 ???? main() ???? { ????????? #if MAX999 ?????????????? printf(compiled for bigger\n); ????????? #else ?????????????? printf(compile
显示全部
相似文档