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

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

1.C51存储类型

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

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

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

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

数据类型

位

字节

值的范围

char

8

1

-128~127

unsigned char

8

1

0~255

enum

16

2

-32768~32767

short

16

2

-32768~32767

unsigned short

16

2

0~65535

int

16

2

-32768~32767

unsigned int

16

2

0~65535

long

32

4

-2147483648~2147483647

unsigned long

32

4

0~4294967295

float

32

4

±1.175494E-38~±3.402823E 38

bit

1

-

0,1

sbit

1

-

0,1

sfr

8

1

0~255

sfr16

16

2

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

bit数据类型可以用来访问用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模式。

相关阅读

专业维修电工34条必备问答(上)

学工控技术,拿10万年薪 马上注册,免费学习 超过100课时视频教程,免费下载海量学习资料 1 、 带传动有何优缺点? 答:优点:传动(píng)稳,无噪声;有过载保护作用;传动距离较大...
2023-06-27

有电压表监视、过载报警、水位直接启停的水泵电动机控制电路

有电压表监视、过载报警、水位直接启停的水泵电动机控制电路 有电压表监视、过载报警、水位直接启停的水泵电动机控制电路如图所示。把图(a)采用电气设备实物连接方法构成的...
2023-06-13
有电压表监视、过载报警、水位直接启停的水泵电动机控制电路

家里连续烧坏电器,用万用表测量零线火线之间电压380V为啥?

家里连续烧坏电器,用万用表测量零线和火线之间的电压是 380V,造成这种问题的原因应该是总零线断了。 以下是一张居民用电的电力系统图草图,以此为例,给大家介绍一下居民用电...
2023-06-11
家里连续烧坏电器,用万用表测量零线火线之间电压380V为啥?

贴片陶瓷电容(MLCC)的介质类别和温度系数(TCC)解析

MLCC(Multi-layer Ceramic Capacitors)是片式多层陶瓷电容器的英文缩写。是由印好电极(内电极)的陶瓷介质膜片以错位的方式叠合起来,经过一次性高温烧结形成陶瓷芯片,再在芯片的两端...
2023-03-31
贴片陶瓷电容(MLCC)的介质类别和温度系数(TCC)解析

电动机故障排除经验分享

在工业生产以及日常生活的许多领域,电动机都发挥着至关重要的作用。然而,电动机在运行过程中难免会出现各种故障。经过多年与电动机打交道的经历,我积累了一些排除电动机故障的...
2024-09-12
电动机故障排除经验分享

热销商品

12V星空顶筒灯嵌入式阳台卧室客厅氛围迷你呼吸小射灯满天星天花

12V星空顶筒灯是一款专为营造浪漫氛围而设计的迷你嵌入式射灯,适用于阳台、卧室、客厅等空间。采用低功耗LED光源,安全节能,光线柔和均匀,支持呼吸模式与满天星效果,可...
¥ 7.65

公牛官方旗舰店开关插座空调16A插座五孔10A面板暗装多孔G12白灰

公牛官方旗舰店提供一系列高质量的开关插座和空调配件。这款16A插座五孔面板采用暗装设计,适用于多种安装环境,如墙面、天花板等。它具有10A的电流容量,可以满足家庭...
¥ 5.55

电位器旋钮电流调节螺帽直流逆变电焊机二保焊送丝机通用旋钮B102

电位器旋钮电流调节螺帽适用于直流逆变电焊机和二保焊送丝机,是一款通用的旋钮B102。该旋钮采用优质材料制造,具有耐磨损、耐高温、耐腐蚀等特点,能够长时间稳定运行...
¥ 0.7

喜美诺排插插座面板多孔排插家用宿舍接线板插排国标线板延长线

喜美诺排插,一款精心设计的多孔插座面板,专为家庭和宿舍环境而造。它不仅提供便捷的接线体验,更符合国标安全标准,确保使用过程中的安全与稳定。这款排插采用高质量材...
¥ 11.9

O型圈氟橡胶圆条丁腈胶硅胶垫片防水O三元乙丙EPDM密封件骨架油封

O型圈、氟橡胶圆条、丁腈胶、硅胶垫片、三元乙丙(EPDM)密封件及骨架油封是广泛应用于机械、汽车、航空航天及建筑等领域的关键密封元件。氟橡胶耐高温、耐腐蚀,适用...
¥ 1

网站栏目