Ⅰ 2. 在C51语言中,说明定义的变量存储类型分别使用xdata和pdata时,两种的存储空间有何不同
xdata存储在外部RAM。使用前要对总线操作。pdata可存取256字节/页。多于一页时应在Startup.A51中指明pdata长度,操作时用P2口生成页地址。如果xdata大于256字节,还是用xdata方式较好。
Ⅱ Keil c51 三种存储模式的作用是什么啊
这个问题很多变的啦,small存储模式的数据存储在DATA区里面gmpucompact存储模式的数据存储在IDATA里,large存储模式的数据存储在XDATA里,一般默认的都是small模式,因为单片机在不加外扩RAM的时候变量区就那么大,假设你将small存储模式改为large存储模式pt但是没有外扩RAM因为samll和large的对变量的汇编访问方式不同,程序不就乱了我是这么理解的额973
Ⅲ 关于c51存储类型和其数据长度,有点不懂,求指点
你上面的表格,可以说,是完全上的逻辑错误。
c语言,一个数据类型的长度只有以下几种:
unsigned char 或者 char 固定8位的长度,即一个字节
unsigned short 或者 short 固定16位长度,即两个字节
unsigned long 或者 long 固定 32位长度,即四个字节
float固定32位长度,即四个字节
double ,固定64位长度,即8个字节,但是在C51里,是32位,因为C51是把double转换成float来编译的。
另外还有union和struct,长度是不固定的。
在C51里扩展了bit类型,1个位的长度
长度,只取决与以上类型,与data,idata,bdata,xdata,pdata没有关系,所以,你上面的表格是错误的。
而那些data,idata,bdata,xdata,pdata等等,是变量或者常量的存储空间。
51单片机有以下几个内存模块组成:
ROM或者Flash就不说了。
RAM有------内部RAM的低128字节(00-7F)
-------内部RAM的高128字节(80-FF)---【89C51单片机没有这一段空间】
-------特殊功能寄存器(SFR)(80-FF)
------外部RAM 64K(0000-FFFF)
code表示是在Flash(ROM)中,是只读的。
data 表示的是内部RAM的低128字节,可以直接寻址,速度比较快
idata 表示内部RAM高128字节,只能是间接寻址,速度比data里的数据要慢。
pdata是外部RAM,也就是xdata中的前256个,也就是外部RAM中的00--FF,只能MOVX 间接寻址,但是,因为可以用R0做为指针,所以,速度与idata是一样的。
xdata是外部RAM的全部,也可以包括前256个,也就是说,外部RAM前256个,可以用pdata和xdata定义,都行,只能是MOVX 和 DPTR联合寻址,速度最慢。
详细内容,参考下面的链接:
http://..com/question/400032408?&oldq=1
举例:
data unsigned char a;//---放在内部RAM空间的低128字节,长度是8位
data unsigned short a;//---放在内部RAM空间的低128字节,长度是16位
data unsigned long a;//---放在内部RAM空间的低128字节,长度是32位
idata unsigned char a;//---放在内部RAM空间的高128字节,长度是8位
idata unsigned short a;//---放在内部RAM空间的高128字节,长度是16位
idata unsigned long a;//---放在内部RAM空间的高128字节,长度是32位
pdata unsigned char a;//---放在外部RAM空间的低256字节,长度是8位
pdata unsigned short a;//---放在外部RAM空间的低256字节,长度是16位
pdata unsigned long a;//---放在内部RAM空间的低256字节,长度是32位
Ⅳ C51编译器支持的存储器类型有哪些
c51存储器类型有bit
sbit
data
xdata
bdata
pdata
sfr
code等,可能不全面有遗漏
对应的物理存储器是:
bit,即位数据:数据存储器位寻址区,即20h~2fh的范围,共16个字节,16*8=128个位,位地址00h~7fh,连续的。
sbit:特殊功能寄存器中的位数据:只有能够被8整除的那些特殊功能寄存器中的各个位才能被称为sbit,位地址80h~ffh,不连续的,间断的。
data:数据区,对51为00h~7fh共128个字节,对52为00h~ffh,共256个字节,用mov寻址,前128用直接寻址或寄存器(r0~r7)寻址,后128用r0、r1间接寻址。
xdata:外部数据区,0000h~ffffh连续,用dptr间接寻址(movx指令)
bdata:位寻址去的字节,20h~2fh
sfr:特殊功能寄存器(80h~ffh),直接寻址
pdata:外部数据区,p2口保持数据,用r0r1间接寻址(movx指令)
code:程序存储器,用movc指令只读
Ⅳ C51的数据类型和C语言的数据类型的区别
c语言规定了数据类型一般是什么样的。但没有具体规定这个类型是多长……
而c51指的是具体的一个环境下的编译运行环境,他一般会具体指出每个数据类型的特征……
Ⅵ C51系统中大容量数据存储方式,是定义成CODE型数组吗数据访问速度如何新手刚刚接触C51.
不是定义成Code数组,Code是用来定义常量的,是把符号定义存储到Flash或者叫Rom里.即你在程序中不会变化的东西
例如:code unsigned char i = 8;这个i就永远等于8,不能改变,如果你 i = 9;,编译器会报错的.
之所以把有些数组或者常量定义到code,是为了不让程序占用Ram,因为51单片机的Ram太少了..
而Ram又分为内部Ram,外部Ram,外部Ram又分为第一页和其他页.
外部Ram的空间比较大.
Keil默认先使用内部Ram,这是小容量存储方式,如果你设置成大容量存储方式,Keil会先使用外部Ram
,例如:unsigned char iii = 0;如果是小容量方式,这个iii被存到内部的RAM里,如果是大容量方式,
这个iii是被存到外部Ram里,相当于:xdata unsigned char iii = 0.
直到外部Ram没有空间了,才会放到内部Ram
设置成大容量方式的的方法和步骤是:
1 在你的工程项目上右键鼠标,选择:"Options for ...."
2 选择:"Target"选项卡
3 在"Memory mode"下拉框中选择Large....