KEILCx51是面向8051系列单片机及其硬件控制系统的开发工具。它界说的任何数据类型有必要以必定的存储类型的办法定位在8051的存储区中,不然便没有任何的实际意义。该编译器经过将变量、常量界说成不同的存储类型(data,bdata,idata,pdata,xdata,code)的办法,将他们定位在不同的存储区中。
8051系列单片机将程序存储器(ROM,存储空间)和数据存储器(RAM,运算空间)分隔,并有各自的寻址办法(针对汇编语言)。8051系列单片机在物理上有四个存储空间:1,片内程序存储空间;2,片外程序存储空间;3,片内数据存储空间;4,片外数据存储空间。
先讲数据存储器。咱们都知道8051单片机数据存储器可划分为两大区域:00H~7FH为片内低128字节RAM区;80H~FFH为特别功用寄存器区(SFR)。地址为00H~7FH的低128字节片内RAM区又可划分为三个区域:
A,通用寄存器区:地址(00H~1FH)通用寄存器区由4个寄存器组成:0组(00H~07H),1组(08H~0FH),2组(10H~17H),3组(18H~1FH),每个寄存器组含有8个通用寄存器:R0,R1,R2,R3,R4,R5,R6,R7,共有32个通用寄存器。
B,可位寻址区:8051系列单片机RAM的可位寻址区时字节地址位20H~2FH的16字节单元,共128位。
C,用户RAM区:8051系列单片机片内RAM的用户RAM区地址位30H~7FH。仓库也能够设置在这里。
再讲存储类型,当咱们那运用存储类型data,bdata界说常量和变量时,Cx51编译器会将它们定位在片内数据存储区中(片内RAM),不标示默许是DATA类型。当运用code 存储类型界说数据时,Cx51编译器会将其界说在代码空间(ROM或许EPPROM)。当运用 xdata 存储类型界说常量或变量时,Cx51编译器将其定位在外部数据存储空间(片外RAM)。
存储类型 与存储空间的联系
data 直接寻址片内数据存储区,拜访速度快(0X00-0X7F,128字节)
bdata (bit)可位寻址片内数据存储区,答应位与字节混合拜访(0X20-0X2F,16字节)
idata (indirect)直接寻址片内数据存储区,拜访片内悉数RAM空间(8052,256字节)
pdata (page)分页寻址外部数据存储区(256字节)由MOVX @R0拜访
xdata (extend)片外数据存储区(64KB),由MOVX @ DPTR拜访。
Code 代码存储区(64KB),由MOVC @DPTR拜访
如上,这样就满足明晰了。uchar data x和data uchar x相等价都是在内ram区分配一个字节的变量,可是关于指针变量的声明,因涉及到指针变量自身的存储方位和指针所指向的存储区方位不同而进行相应的存储区类型关键字设置是要注意的。在MSTAR的KEIL51编译工程中,ROM SIZE=CONST+CODE <64K。
弥补:长整型数与整形数不同:十进制无符号整常数的规模为0~65535,便是int型, 假如运用的数超过了上述规模,就有必要用长整型数来表明。长整型数是用后缀“L”或“l”来表明的。但长整数158L和根本整常数158 在数值上并无差异,这是由于只不过一个用长整形装,一个用整形装,就像两颗蛋,一颗用小碗装,一个用大碗,但他们仍是同样是蛋,在数值上并无差异!