首页 理论教育单片机基础与应用:其他预处理命令

单片机基础与应用:其他预处理命令

【摘要】:#error命令通常嵌入在条件编译之中,以便捕捉到一些不可预料的编译条件。需要指出的是,并非所有的C51编译控制命令都可以在C语言源程序中对#pragma预处理命令多次使用,对于Keil Cx51编译器的首要控制命令只能使用一次,如果多次使用将导致致命的编译错误。

除了上面介绍的宏定义、档包含和条件编译预处理命令之外,Keil Cx51编译器还支持#error、#pragma和#line预处理命令。#line命令一般很少使用,下面介绍#error和#pragma命令的功能和使用方法。

#error命令通常嵌入在条件编译之中,以便捕捉到一些不可预料的编译条件。正常情况下该条件的值应为假;若条件的值为真,则输出一条由#error命令后面的字符串所给出的错误信息并停止编译。例如,如果有#define MYVAL,它的值必须为0或1,为了测试MYVAL的值是否正确,可在程序中安排如下一段条件编译:

当MYVAL的值出错时,将输出出错信息并停止编译。#pragma命令通常用在源程序中向编译器传送各种编译控制命令,其使用格式如下:#pragma编译命令名序列例如,对程序进行编译时希望采用DEBUG、CODE、LARGE编译命令,则只要在源程序的开始处加入一个命令行“#pragma DB CD LA”即可。

#pragma命令可以出现在C语言源程序中的任何一行,从而使编译器能重复执行某些编译控制命令,以达到某种特殊的目的。如果#pragma命令后面的参数不是Keil Cx51编译器的合法编译控制命令,编译器将忽略其作用。需要指出的是,并非所有的C51编译控制命令都可以在C语言源程序中对#pragma预处理命令多次使用,对于Keil Cx51编译器的首要控制命令只能使用一次,如果多次使用将导致致命的编译错误。

习题5

1.简答题

(1)有哪些数据类型是MCS-51系列单片机直接支持的?

(2)C51特有的数据结构类型有哪些?

(3)C51的存储类型有几种?它们分别表示的存储器区域是什么?

(4)C51中bit位与sbit位有什么区别?

(5)在C51中,通过绝对地址来访问的存储器有几种?

(6)在C51中,中断函数与一般函数有什么不同?

(7)按给定存储器类型和数据类型,写出下列变量的说明形式:(www.chuimin.cn)

1)在data区定义字符变量va11。

2)在idata区定义整型变量va12。

3)在xdata区定义无符号字符数组va13[4]。

4)在xdata区定义一个指向类型的指针px。

5)定义可寻址位变量flag。

6)定义特殊功能寄存器变量P3。

7)定义特殊功能寄存器变量SCON。

8)定义16位的特殊功能寄存器T0。

2.编程题

(1)将8051单片机外部数据存储器地址2000H~2FFFH存储空间做清零操作。

(2)将一个16元素数组的无符号字符数组中的数据存入片内数据存储区的30H~3FH中,并对存储区地址中的数据按从小到大的顺序排序。

(3)有16个十六进制字节数据被存储于片内数据存储区30H~3FH中,请分别将它们拆分成十六进制高位和十六进制低位,十六进制高位存于片内数据存储区40H~4FH中,十六进制低位存于片内数据存储区50H~5FH中。