首页 理论教育 KeilμVision3C51编译器所支持的数据类型

KeilμVision3C51编译器所支持的数据类型

时间:2023-11-24 理论教育 版权反馈
【摘要】:表3-3Keil μVision3 C51编译器所支持的数据类型2.sfr与sfr1651系列单片机具有多种内部寄存器,其中一些是特殊功能寄存器,如定时器方式控制寄存器TMOD、中断允许控制寄存器IE等。

KeilμVision3C51编译器所支持的数据类型

1.编译器支持的数据类型

编译器所支持的数据类型见表3-3,其中,bit、sbit、sfr和sfr16为51单片机硬件和C51及C251编译器所特有,它们不是ANSI C的一部分,也不能用指针对它们进行存取。

表3-3 Keil μVision3 C51编译器所支持的数据类型

2.sfr与sfr16

51系列单片机具有多种内部寄存器,其中一些是特殊功能寄存器,如定时器方式控制寄存器TMOD、中断允许控制寄存器IE等。为了能够直接访问这些特殊功能寄存器,Keil Cx51编译器扩充了关键字sfr和sfr16,利用这种扩充关键字可以在C语言源程序中直接对51单片机的特殊功能寄存器进行定义。定义方法如下:

sfr 特殊功能寄存器名=地址常数;

例如:

sfr P0=0x80; /*定义I/O口P0,其地址为0x80*/

这里需要注意的是,在关键字sfr后面必须跟一个标识符作为寄存器名,名字可任意选取,但应符合一般习惯。等号后面必须是常数,不允许有带运算符的表达式,而且该常数必须在特殊功能寄存器的地址范围之内(0x80~0xFF)。

在部分51单片机中,特殊功能寄存器经常组合成16位来使用。采用关键字sfr16可以定义这种16位的特殊功能寄存器。

3.sbit

在51系列单片机应用系统中经常需要访问特殊功能寄存器中的某些位,Keil Cx51编译器为此提供了一个扩充关键字sbit,利用它定义可位寻址对象。定义方法有如下三种:

(1)sbit位变量名=位地址。

这种方法将位的绝对地址赋给位变量,位地址必须位于0x80~0xFF之间。例如:

sbit OV=0xD2;

sbit CY=0xD7;

(2)sbit位变量名=特殊功能寄存器名^位位置。

当可寻址位位于特殊功能寄存器中时可采用这种方法,“位位置”是一个0~7之间的常数。例如:

sfr PSW=0xD0;(www.xing528.com)

sbit OV=PSW^2;

sbit CY=PSW^7;

(3)sbit位变量名=字节地址^位位置。

·这种方法以一个常数(字节地址)作为基地址,该常数必须在0x80H~0xFF之间。“位位置”是一个0~7之间的常数。例如:

sbit OV=0xD0^2;

sbit CY=0xD0^7;

·当位对象位于51单片机片内存储器中可位寻址区时,称为“可位寻址对象”。Keil Cx51编译器提供了一个bdata存储器类型,允许将具有bdata类型的对象放入单片机片内可位寻址区。例如:

int bdata ibase; //在位寻址区定义一个整型变量ibase

char bdata bary[4]; //在位寻址区定义一个数组array[4]

使用关键字sbit可以独立访问可位寻址对象中的某一位。例如:

sbit mybit0=ibase^0;

sbit mybit15=ibase^15;

sbit Ary07=bary[0]^7;

sbit Ary37=bary[3]^7;

采用这种方法定义可位寻址变量时要求基址对象的存储器类型为bdata,操作符“^”后面“位位置”的最大值取决于指定的基地址类型。对于char类型来说是0~7;对于int类型来说是0~15;对于long类型来说是0~31。

4.bit的使用

关键字bit是Keil Cx51编译器的一种扩充数据类型,用来定义一个普通位变量,该位变量将会存放在片内RAM的位寻址区0x20~0x2f之间,该位变量的值是二进制数的0或1。一个函数中可以包含bit类型的参数,函数的返回值也可为bit类型,但是不能定义位指针,也不能定义位数组。例如:

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈