文档介绍:C51数据类型
C51基本数据类型包括标准C语言支持的基本数类型和C51扩展的数据类型两部分。
其中标准C语言支持的数据类型有:
unsigned charchar、unsigned int、int、
unsigned long、long、float和指针类型;
扩展的C51基本类型有
bit、 sbit、 sfr、 sfr16。
此外,C51也支持数组、结构体、联合体、枚举等构造数据类型。表9-1是C51支持的基本数据类型。
表9-1 C51的数据类型
数据类型
值域范围
Bit
1 bit
0,1
Sbit
1 bit
0,1
unsigned char
1 byte
0~255
Char
1 byte
-128~127
Sfr
1 byte
0~255
unsigned int
2 byte
0~65536
Int
2 byte
-32768~32767
Sfr16
2 byte
0~65536
unsigned long
4 byte
0~4294967295
Long
4 byte
2147483648~2147483647
Float
4 byte
+-38~++38
常量
在程序运行中其值不能改变的量称为常量。在C51中常量一般存储在程序存储器ROM中。
整型常量。
浮点型常量
字符型常量和字符串型常量
变量
存储器类型
对应区域
说明
Data
内部RAM(00H-7FH)
直接访问内部RAM,速度最快
Bdata
内部RAM(20H-2FH)
允许位与字节混合访问
Idata
内部RAM(00H-FFH)
采用***@R0,***@R1间接访问
Pdata
外部RAM某页(256字节)
用MOVX ***@Ri指令访问
Xdata
外部RAM(0000H-FFFFH)
用MOVX ***@DPTR指令访问
Code
程序存储器(64KB)
用MOVC ***@A+DPTR指令访问
[存储种类] 数据类型[存储器类型] 变量名(或变量名列表);
定义格式中方括号部分[ ]是可选项,可有可无。
存储种类有:动态(auto)、外部(extern)、静态(static)和寄存器(register)。若该项缺省,则默认为auto。
定义变量时如果省略存储器类型,默认存储器类型去指定变量的存储区域(见表9-3)。
存储模式
说明
SMALL
函数参数及局部变量放在片内RAM(默认变量类型为data,最大128字节)。另外所有对象包括栈都优先放置于片内RAM,当片内RAM用满,再向片外RAM放置。
COMPACT
参数及局部变量放在片外RAM(默认的存储类型是pdata,最大256字节);通过R0、R1间接寻址,栈位于8051片内RAM。
LARGE
参数及局部变量直接放入片外RAM(默认的存储类型是xdata,最大64KB);使用数据指针DPTR间接寻址。因此访问效率较低且直接影响代码长度
例如:
unsigned int data Count;
int idata i;
char xdata j;
float k;
(1)普通位变量bit
bit [存储器类型] 变量名;
bit bdata bVoltHighFlag;
(2)特殊功能寄存器sfr
sfr 特殊功能寄存器名= 特殊功能寄存器地址常数
sfr P1 = 0x90; //定义P1口,地址90H
sfr P2 = 0xA0; //定义P1口,地址A0H
对定时器T1的定义如下:
sfr16 T2= ;
(3)特殊位变量sbit
特殊位变量的类型符为sbit,有三种定义
①sbit 位变量名=位地址
sbit P1_1 = Ox91;
②sbit 位变量名=变量名位置
sfr P3 = 0xB0;
sbit P3_1 = P3 ^ 1;
③sbit 位变量名=字节地址^位位置
sbit P3_1 = 0xB0 ^ 1;
sbit flag=0X20^7 ;
(1)绝对宏
#include <.h>
#define 变量名 XBYTE[绝对地址];
#define 变量名 XWORD[绝对地址];
#define 变量名 CBYTE[绝对地址];
#define 变量名CWORD [绝对地址];
#define 变量名 PBYTE[绝对地址];
#define 变量名 PWORD [绝对地址];
#define