×
单片机 > 单片机程序设计 > 详情

C51-数据存储类型

发布时间:2020-06-04 发布时间:
|
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 在数值上并无区别,这是因为只不过一个用长整形装,一个用整形装,就像两颗蛋,一颗用小碗装,一个用大碗,但他们还是同样是蛋,在数值上并无区别!



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
8051单片机的函数发生器的设计