C51数据的存储类型
C51的存储类型与8051存储空间的对应关系如表
存储器类型 | 长度/位 | 对应单片机存储器 |
---|---|---|
bdata | 1 | 片内RAM,位寻址区,共128位(也能字节访问) |
data | 8 | 片内RAM,直接寻址,共128B |
idata | 8 | 片内RAM,间接寻址,共256B |
pdata | 8 | 片外RAM,分页间址,共256B |
xdata | 16 | 片外RAM,间接寻址,共64K |
code | 16 | ROM区域,间接寻址,共64K |
对于8051系列单片机来说,访问片内的RAM比访问片外的RAM的速度要快很多,所以对于经常使用的变量,应该置于片内RAM,即用bdata、data、idata来定义;对于不常使用的变量或规模较大的变量,应该置于片外RAM中,即用pdata、xdata来定义
例如:
bit bdata my_fiag;
char data var0;
float idata x,y,z;
unsigned int padta temp;
unsigend char xdata array[3][4];
如果用户不对变量的存储类型进行定义,C51的编译器采用默认的存储类型。默认的存储类型由编译命令中的存储模式指令限制。C51支持的存储模式如下表
存储模式 | 默认存储类型 | 特点 |
---|---|---|
small | data | 直接访问片内RAM;堆栈在片内RAM中 |
compact | pdata | 用R0和R1间址片外分页RAM;堆栈在片内RAM中 |
large | xdata | 用DPTR间址片外RAM,代码长,效率低 |
例如:
char var; /*在small模式中,var定位data存储区*/
/*在compact模式中,var定位pdata存储区*/
/*在large模式中,var定位xdata存储区*/
在Keil C51μ Vision 4平台下,设置模式存储的步骤如下:工程建立好后,使用菜单Project->Option for Target‘Target1’,出现对话框后点击Target标签,其中的Memory Model用于设置RAM的置用情况,有3个选项:small是所有的变量都在单片机的内部RAM中;Compact变量存储在外部RAM里,使用8位间接寻址;Large变量存储在外部RAM中,使用16位间接寻址,可以使用全部外部的扩展RAM
arge变量存储在外部RAM中,使用16位间接寻址,可以使用全部外部的扩展RAM