当前位置:首页 » 服务存储 » c51大容量存储方法
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c51大容量存储方法

发布时间: 2023-01-08 21:39:33

‘壹’ C51数组的最大容量是多少

原则上,c语言中数组所包含的元素个数理论上多少都行,如果要开一个很大的数组,比如int arrayint[10000][10000];在main()中声明该数组就会使应用程序退出,但是如果你把该数组的声明放在所有函数体之外,让它变成一个全局变量,就没有任何限制了,你想开多大的数组都可以。
但在单片机c语言程序中,实际上还是有限制的,原因在于单片机的存储空间是有限的,数组最多能有几个元素取决于单片机型号。
你定义了一个全局的数组,unsigned char型的数组,最多只能有93个元素,说明你还有其他变量占用存储空间。如果需要一个512个元素的数组,用的单片机是stc15f2k60s2,可在定义数组时进行XDATA声明,将数组存储于外部RAM当中。

‘贰’ c51的存储 类型 有几种他们分别表示的存储区域是什么

data 直接寻址区
idata 间接寻址区
xdata 外部寄存器
pdata 分页寻址区
code 程序存储区
bdata 位寻址区

‘叁’ Keil c51 三种存储模式的作用是什么啊

这个问题很多变的啦,small存储模式的数据存储在DATA区里面gmpucompact存储模式的数据存储在IDATA里,large存储模式的数据存储在XDATA里,一般默认的都是small模式,因为单片机在不加外扩RAM的时候变量区就那么大,假设你将small存储模式改为large存储模式pt但是没有外扩RAM因为samll和large的对变量的汇编访问方式不同,程序不就乱了我是这么理解的额973

‘肆’ c51单片机怎样存储大量数据

如果你的数据是静态的不用变的就可以存在code,否则当上电后code的内容只能读,不能改.数据多了只能加外存,可以用I2C总线的E2PROM(2是平方的意思),前几天买了几块AT24C256(32K),5元/块

例如:int code point[]={-1,-2,-3};就可以了。你说的不行不知道是什么意思,具体点吧

你这样赋初值是不行的,因为这种赋值语句是在RAM里面进行,point[]只可能是变量,不可能是常量,也就是它不能被定义在CODE内。所以你只能一个一个来了。一但point[]被定义为CODE就不能在main()里面再对它赋值了。:)

‘伍’ 怎么在51单片机中读取文件 如何在Keil C51使用fopen函数 也就是如何在C51中编写 能打开文件程序

首先,Keil中根本没有fopen函数,你可以打开keil的所有头文件看看。

其次,用单片机来读取文件是需要文件系统(比如FAT)来支持的,你不能“想当然”的认为计算机上的标准C函数中有文件打开函数,所以单片机中也有。更何况是51单片机!

像51单片机一般直接使用二进制存储,这样最简单快捷,文件存储反而成本高,速度慢,不适合使用。所以你可以用ROM来保存这个文本文件的内容,然后单片机读取ROM。

‘陆’ 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....

‘柒’ c51单片机怎样存储大量数据

外扩串行EEPROM,不受16位地址线64KB的限制,只是单字节读写速度慢一些,因串行传输速度本来就慢,加上其地址达16位或24位,读一个字节,比并行慢很多 ,由于可以连续读写,连接读写只需发送一次地址,而读出多个字节,速度相对快一些

‘捌’ 关于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单片机存储器容留

容留为8051核。
STC89C51单片机学习板是一款基于8位单片机处理芯片STC89C51RC的系统。
存储器是单片机的又一个重要组成部分,图6给出了一种存储容量为256个单元的存储器结构示意图。其中每个存储单元对应一个地址,256个单元共有256个地址,用两位16进制数表示,即存储器的地址(00H~FFH)。存储器中每个存储单元可存放一个八位二进制信息,通常用两位16进制数来表示,这就是存储器的内容。存储器的存储单元地址和存储单元的内容是不同的两个概念,不能混淆。