C51单片机存储类型及存储办法
1.C51存储类型<XML:NAMESPACE PREFIX = O />
关于在片外拓展的接口,能够依据硬件构成的地址,用#define句子进行界说,例如:
#define unsigned char xdata adAddr_at_0x2000;/*界说了片外接口地址为2000H*/
C51编译器支撑80C51及其派生系列的体系结构,并供应对80C51悉数存储区的拜访。每个变量能够用表1中所列的存储器类型明晰地分配到指定的存储空间。
表1 C51存储类型与80C51存储空间的联络
数据类型 | 位 | 字节 | 值的方案 |
-128~127 | |||
~255 | |||
-32768~32767 | |||
-32768~32767 | |||
~65535 | |||
-32768~32767 | |||
~65535 | |||
-2147483648~2147483647 | |||
~4294967295 | |||
±1.175494E-38~±3.402823E+38 | |||
- | ,1 | ||
- | ,1 | ||
~255 | |||
~65535 |
下面用实例阐明各种存储器变量的声明。
(1)程序存储器变量:程序存储器的数据不能批改,通常将跳转向量或表格寄存在该区,存储器类型标识符为code。
例如:unsigned char code text[] = “ENTER PARAMETER”;
(2)直接寻址内部数据存储器变量:可在一个机器周期直接寻址,因而将常用的变量放在data区。存储器类型标识符为data。
例如:unsigned char data flag; /*声明一个内部直接寻址的无符号字节变量*/
(3)直接寻址内部数据存储器变量:用8位寄存器作为指针寻址内部存储器。存储器类型标识符为idata。
例如:unsigned char idata buffer[8]; /*声明一个内部直接寻址的无符号字节数组*/
(4)位寻址内部数据存储器变量:是内部数据存储器的位寻址区,位变量对需求位操作的数据非常有用,其存储器类型标识符为bdata。
留心:位寻址变量应声明为大局变量,不然编译将犯错。
例如:unsigned char bdata bStatue; /*界说可位寻址的位变量,在片内RAM中*/
sbit statue_0 = bStatue^0; /*界说位变量bStatue的第三位的符号地址*/
数据类型能够用来拜访用bdata存储器类型标识声明的变量的位。
外部数据存储器的声明与前面比方相似,这儿不再阐明。
假定变量声明中遗失存储器类型标识符,则主动挑选默许的存储器类型。默许的存储器类型运用到悉数大局变量、静态变量、函数自变量和不能分配寄存器的主动变量。默许的存储器类型取决于编译时的存储器办法。这都是纷歧样于通常C言语的本地。
2.C51的存储器办法
存储器办法断定了用于函数自变量、主动变量和无明晰存储类型变量的默许存储器类型。可用编译器操控指令Small,Compact和Large指定编译时的存储器办法。用存储器类型标识符明晰声明一个变量,优先于默许存储器类型。
(1)Small办法
悉数变量默许坐落80C51内部数据存储器,这和运用data存储器类型标识符明晰声明是一样的。该办法变量拜访非常有用,但悉数数据方针和仓库有必要适宜内部RAM。因为运用的仓库空间抉择于纷歧样函数嵌套的深度,故对仓库的尺度恳求严峻。
(2)Compact办法
悉数变量默许坐落外部数据存储器的一页(256B)内,这和运用pdata存储器类型标识符明晰声明是一样的。地址高字节通常设置P2,编译器无法设置这个端口,故有必要在主张代码中手艺设置。该办法能包容最多256B的变量,这个束缚是用R0、R1直接寻址构成的。该办法的功率不如Small办法的功率,变量拜访速度不如Small办法的快,但比Large办法快。
(3)Large办法
悉数变量默许坐落外部数据存储器,这和运用xdata存储器类型标识符明晰声明是一样的。寻址运用数据指针(DPRT),变量拜访功率低,格外是对多字节变量,该办法的数据拜访比Small办法和Compact办法生成的代码多。
通常常常运用Small办法,它可生成最快、最紧凑和最有用的代码。通常能够明晰指定变量的存储方位。仅当运用Small办法时不适宜运用或操作才上升到Compact办法和Large办法。上一篇:单片机下载程序电路原理
下一篇:怎么学习单片机