C51单片机存储类型及存储模式

时间:2023-03-11作者:佚名

1C51存储类型

对于在片外扩充的接口,可以根据硬件形成的地址,用#define语句进行定义,例如:

#define unsigned char xdata adAddr_at_0x2000/*定义了片外接口地址为2000H*/

C51编译器支持80C51及其派生系列的体系结构,并提供对80C51所有存储区的访问。每个变量可以用表1中所列的存储器类型明确地分配到指定的存储空间。

1 C51存储类型与80C51存储空间的关系

数据类型

字节

值的范围

char

8

1

128127

unsigned char

8

1

0255

enum

16

2

3276832767

short

16

2

3276832767

unsigned short

16

2

065535

int

16

2

3276832767

unsigned int

16

2

065535

long

32

4

21474836482147483647

unsigned long

32

4

04294967295

float

32

4

±1.175494E-38~±3.402823E 38

bit

1

01

sbit

1

01

sfr

8

1

0255

sfr16

16

2

065535

对内部数据存储器的访问比对外部数据存储器的访问快许多,因此应当将频繁使用的变量放在内部数据存储器,而把较少使用的变量放在外部数据存储器中。

下面用实例说明各种存储器变量的声明。

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的第三位的符号地址*/

bit数据类型可以用来访问用bdata存储器类型标识声明的变量的位。

外部数据存储器的声明与前面例子相似,这里不再说明。

如果变量声明中遗漏存储器类型标识符,则自动选择默认的存储器类型。默认的存储器类型应用到所有全局变量、静态变量、函数自变量和不能分配寄存器的自动变量。默认的存储器类型取决于编译时的存储器模式。这都是不同于一般C语言的地方。

2C51的存储器模式

存储器模式确定了用于函数自变量、自动变量和无明确存储类型变量的默认存储器类型。可用编译器控制指令SmallCompactLarge指定编译时的存储器模式。用存储器类型标识符明确声明一个变量,优先于默认存储器类型。

1Small模式

所有变量默认位于80C51内部数据存储器,这和使用data存储器类型标识符明确声明是相同的。该模式变量访问非常有效,但所有数据对象和堆栈必须适合内部RAM。因为使用的堆栈空间决定于不同函数嵌套的深度,故对堆栈的尺寸要求严格。

2Compact模式

所有变量默认位于外部数据存储器的一页(256B)内,这和使用pdata存储器类型标识符明确声明是相同的。地址高字节通常设置P2,编译器无法设置这个端口,故必须在启动代码中手工设置。该模式能容纳最多256B的变量,这个限制是用R0R1间接寻址造成的。该模式的效率不如Small模式的效率,变量访问速度不如Small模式的快,但比Large模式快。

3Large模式

所有变量默认位于外部数据存储器,这和使用xdata存储器类型标识符明确声明是相同的。寻址使用数据指针(DPRT),变量访问效率低,特别是对多字节变量,该模式的数据访问比Small模式和Compact模式生成的代码多。

一般经常使用Small模式,它可生成最快、最紧凑和最有效的代码。通常可以明确指定变量的存储位置。仅当使用Small模式时不适合应用或操作才上升到Compact模式和Large模式。

相关阅读

各种电机电流及额定电流的计算,一次全部教给你!

交流电动机的电流如何计算 低压380/220V三相四线制系统,是我国各地广泛采用的供电系统。各类低压用电器铭牌一般都标明容量,如何根据容量的大小,很快算出额定负荷电流,以配装...
2023-06-11
各种电机电流及额定电流的计算,一次全部教给你!

锂电池充电电路原理图 分享3个锂电池充电电路方案

3个锂电池充电电路方案 锂电池充电电路一 原理图如下 都是比较小的,SOT-23-6 封装 此方案的优势是器件可以扩容,也就是可以替换成容量更大的mos管。 锂电池充电电路二 锂电池充电电...
2023-08-11
锂电池充电电路原理图 分享3个锂电池充电电路方案

四种晶体管开关电路详解

“晶体管开关”,是使用晶体管控制电路通断的开关。根据实际应用场景,也称“模拟开关(analog Switch)”或“逻辑开关(Logic Switch)”。它或许是一些电子发烧友们DIY时遇到的第一个电路...
2023-06-12
四种晶体管开关电路详解

高压开关柜的使用和故障检测

虽然在购买使用高压开关柜之前,相应的验收检查工作已经展开,但是在现实中难免有先天性质量问题的设备投入运行,另外,由于外力及机器老化的原因,高压开关柜也很难保持永久...
2023-03-21

家里电灯关掉后一直闪烁,老电工辛苦一下午终于找到了原因!

明明已经关灯了,电灯却一下一下的闪,虽然这种闪烁对用电没有什么影响,但是漆黑的夜里电灯一闪一闪的,你以为拍鬼片啊!为什么家里电灯关掉后还会闪?如何解决? 电灯关灯后...
2023-06-11
家里电灯关掉后一直闪烁,老电工辛苦一下午终于找到了原因!

热销商品

FEITA 镊子碳纤维合成塑料防静电无尘净化塑胶手动工具镊子93302

FEITA镊子93302采用高强度碳纤维合成塑料材质,兼具轻量化与耐用性,适用于精密操作场景。其独特的防静电设计有效避免静电对电子元件的损害,广泛应用于半导体、光学、...
1.2

江南国标rvv铜芯电缆软线3 4多芯平方rvvp护套信号屏蔽线线缆电线

江南国标rvv铜芯电缆软线34多芯平方rvvp护套信号屏蔽线线缆电线,是一种高性能的电缆产品,适用于各种信号传输和控制场合。该电缆采用优质铜芯,具有优良的导电性能和...
1.96

内六角扳手套装单个内六方螺丝刀进口S2款加长特长平头内6角2.5mm

这款进口S2材质内六角扳手套装,专为精密机械维修与装配设计,采用高品质S2合金钢制造,具备卓越的硬度、耐磨性与抗扭强度,有效防止使用过程中断裂或变形。套装中包含2....
1.4

橡胶条U型防撞包边条橡胶卡条玻璃嵌条配电箱机柜u型条密封条封王

橡胶条U型防撞包边条是一种多功能密封与防护配件,广泛应用于配电箱、机柜、玻璃门窗及各类设备边缘。采用优质橡胶材质,具备优异的弹性、耐老化、防水防尘和抗冲击...
0.8

10副装护目镜打磨劳保防飞溅男女骑行机械实验防风沙灰尘防护眼镜

这款10副装护目镜专为多场景防护设计,适用于打磨、机械加工、实验操作、骑行及户外作业等环境。采用高透光防雾镜片,有效抵御飞溅物、风沙、灰尘及化学液体喷溅,保障...
19.8

网站栏目