C51存贮器类型
C51编译器完全支持8051微处理器及其系列的结构,可完全访问MCS-51硬件系统所有部分。每个变量可准确地赋予不同的存贮器类型(data,idata,pdata,xdata,code)。访问内部数据存贮器(idata)要比访问外部数据存贮器(xdata)相对要快一些,因此,可将经常使用的变量置于内部数据存贮器中,而将较大及很少使用的数据单元置于外部数据存贮器中。
存贮器类型
|
描 述
|
data
|
直接寻址内部数据存贮器,访问变量速度最快(128bytes)
|
bdata
|
可位寻址内部数据存贮器,允许位与字节混合访问(16 bytes)
|
iIdata
|
间接寻址内部数据存贮器,可访问全部地址空间(256bytes)
|
pPdata
|
分页(256bytes)外部数据存贮器,由操作码MOVX @Ri访问
|
xdata
|
外部数据存贮器(64K),由MOVX @DPTR访问
|
code
|
代码数据存贮器(64K),由MOVC @A+DPTR访问
|
变量说明举例:
data char charvar;
char code msg[]=”ENTER PARAMETER:”;
unsigned long xdata array[100];
float idata x,y,z;
unsigned char xdata vector[10][4][4];
sfr p0=0x80;
sbit RI="0x98";
char bdata flags;
sbit flago="flags"^0;
如果在变量说明时略去存贮器类型标志符,编译器会自动选择默认的存贮器类型。默认的存贮器类型进一步由控制指令SMALL、COMPACT和LARGE限制。例如:如果声明char charvar,则默认的存贮器模式为SMALL,charvar放在data存贮器;如果使用COMPACT模式,则charvar放入idata存贮区;在使用LARGE模式的情况下,charvar被放入外部存贮区或xdata存贮区。
存贮器模式
存贮器模式决定了自动变量和默认存贮器类型,参数传递区和无明确存贮区类型的说明。在固定的存贮器地址变量参数传递是C51的一个标准特征,在SMALL模式下参数传递是在内部数据存贮区中完成的。LARGRE和COMPACT模式允许参数在外部存贮器中传递。C51同时也支持混合模式,例如在LARGE模式下生成的程序可将一些函数分页放入SMALL模式中从而加快执行速度。
存贮器模式
|
描 述
|
SMALL
|
参数及局部变量放入可直接寻址的内部寄存器(最大128bytes,默认存贮器类型是DATA)
|
COMAPCT
|
参数及局部变量放入分页外内部存贮区(最大256bytes,默认存贮器类型是PDATA)
|
LARGE
|
参数及局部变量直接放入外部数据存贮器(最大64K,默认存贮器类型是XDATA)
|
if ($ != jQuery) { $ = jQuery.noConflict(); } var isLogined = false; var cb_blogId = 45554; var cb_entryId = 1552895; var cb_blogApp = "papam"; var cb_blogUserGuid = "c3f8460b-63cf-dd11-9e4d-001cf0cd104b"; var cb_entryCreatedDate = '2009/8/24 14:49:00';
关键字:C51 存储类型
引用地址:
C51存储类型
推荐阅读最新更新时间:2024-03-16 15:11
如何用C51实现单片机和PLC之间通讯的实例
1、 HMI(人机界面)以其体积小,高性能,强实时等特点,越来越多的应用于工业自动化系统和设备中。 它有字母、汉字、图形和图片等不同的显示,界面简单友好。配有长寿命的薄膜按钮键盘,操作简单。它一般采用具有集成度高、速度快、高可靠且价格低等优点的单片机 作为其核心控制器,以实现实时快速处理。PLC和单片机结合不仅可以提PLC的数据处理能力,还可以给用户带来友好简洁的界面。本文以Modbus通讯协议为例,详细讨论了一个人机系统中,如何用C51实现单片机和PLC之间通讯的实例。 2、Modbus通讯协议 Modbus协议是应用于电子控制器上的一种通用语言。通过此协议,控制器相互之间、控制器经由网络和其它设备之间可以通信。 Mo
[单片机]
C51 编程,要求按照指定的次序按键
//有个题目,要求顺序按下四个按键。 //如果不按照指定的次序来按,将显示出错误提示。 //要求如下: //第一次、SW1 按住时 D1 亮,松开时 D1 灭(如第一次按的不是 SW1,是SW2、3、4的话,D5 常亮); //第二次、SW2 按住时 D2 亮,松开时 D2 灭(如第二次按的不是 SW2,是SW1、3、4的话,D5 常亮); //第三次、SW3 按住时 D3 亮,松开时 D3 灭(如第三次按的不是 SW3,是SW1、2、4的话,D5 常亮); //第四次、SW4 按住时 D4 亮,松开时 D4 灭(如第四次按的不是 SW4,是SW1、2、3的话,D5 常亮)。 //第四次、当 SW4 松开后 D6 常亮。 /
[单片机]
单片机控制交通灯c51程序
先上图 /* 程序效果:单片机模拟控制交通灯程序,规则如下:当南北通车时,此时南北的绿灯亮,东西的红灯亮,之后南北的绿灯闪烁3次,过后黄灯亮,延时片刻,转东西绿灯亮同时南北红灯亮,之后东西的绿灯闪烁3次,过后黄灯亮,延时片刻;数码管显示的值都同步,结束。全部代码由http://www.51hei.com站长开发(由于站长对交通灯的规则不是特别了解,产生于事实冲突,敬请包涵) */ #include reg52.h //头文件 #define uchar unsigned char//宏定义 #define uint unsigned int uchar code table ={0x00,0x01,0x02,0x
[单片机]
【C51自学笔记】定时器
CPU时序: 振荡周期:为单片机提供定时信号的振荡源的周期(晶振周期或外加振荡周期) 状态周期:2个振荡周期为1个状态周期,用S表示。振荡周期又称S周期或时钟周期。 机器周期:1个机器周期含6个状态周期,12个振荡周期。 指令周期:完成1条指令所占用的全部时间,以机器周期为单位。 例如:外接晶振为12MHz时,89S52单片机的4个时间周期的具体值为: 振荡周期=1/12us; 状态周期=1/6us; 机器周期=1us; 指令周期=1~4us; 注意: 定时器/计数器和单片机的CPU是相互独立的。定时器/计数器工作的过程是自动完成的,不需要CPU的参与。 51单片机有两组定时器/计数器,
[单片机]
PID调节C51程序(3)
#include stdio.h #include math.h struct _pid { int pv; /*integer that contains the process value*/ int sp; /*integer that contains the set point*/ float integral; float pgain; float igain; float dgain; int deadband; int last_error; }; struct _pid warm,*pid; int process_point, se
[单片机]
地址锁存器74ls373和273的区别以及和c51单片机
74LS273 是带公共时钟复位八D触发器 74LS373 是三态同相八D锁存器 273与373的引脚排列是相同的,唯一的差别是两者1、11脚的功能不同. 对273 (1).1脚是复位CLR,低电平有效,当1脚是低电平时,输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q6)、19(Q7)全部输出0,即全部复位; (2).当1脚为高电平时,11(CLK)脚是锁存控制端,并且是上升沿触发锁存,当11脚有一个上升沿,立即锁存输入脚3、4、7、8、13、14、17、18的电平状态,并且立即呈现在在输出脚2(Q0)、5(Q1)、6(Q2)、9(Q3)、12(Q4)、15(Q5)、16(Q
[单片机]
keil C51语言编程如何缩减编译代码长度
1、整形数字符做乘除法的C51程序,代码比较大。约9B左右,所以尽量不做乘除法。 例如:uchar a=6;a=a*6;第二行代码要9个字节,而平时的语句只有2B。 2、定义变量的语句,不赋值或者不参与运算是不算代码的,能用短变量就用短变量,省RAM也省代码空间. 例如:uchar a; 这句有没有代码长度不变。但是赋非0值 uchar a=5;字符型,就要3B的代码长度。 uint a=5;整形变量赋值要6B字节,比较大,所以能定义短变量就定义短变量。 unsigned long int a=6.0;或者 long int a=6.0;会增加9B的代码。赋值整数浮点数一样。 3、对长整形变量,有符号变量比无符号变量
[单片机]