矿石收音机论坛

 找回密码
 加入会员

QQ登录

只需一步,快速开始

搜索
查看: 2749|回复: 12

求助!51单片机问题!

[复制链接]
发表于 2017-10-12 02:51:52 | 显示全部楼层 |阅读模式
小弟最近做一个东西。   用的是90C516RD+      它是64K的  

我在程序里声明一个数组  unsigned char byte[?];

我想问问   这个“?”   最大能多大?

我已经测试了    我声明了一个  unsigned char byte[1000];

我也分别给这1000个字节里写了东西    可以正常存取!

我又测试   把“1000”  再改大一些    结果就不行了    1000好像是极限!


我现在需要用到4800个字节      按道理   这个90C516RD+  是可以存下来的     

我分别声明好几个数组
unsigned char byte1[1000];
unsigned char byte2[1000];
unsigned char byte3[1000];
unsigned char byte4[1000];
unsigned char byte5[800];

还是不行   只能保存1000个字节   多了就都是FF。。。。


那位大哥给小弟解解惑

不胜感激!
     
发表于 2017-10-12 08:26:27 | 显示全部楼层
这个片子的RAM是256+1024字节,256字节片内RAM和1024字节逻辑片外实际片内的扩展RAM,也就是说如果用来做变量存储,不考虑空间分配问题,1280是最大值,如果用来存储字模或者类似的数据,这些都属于固定化的常量,可以写成unsigned char code byte[],使用它的程序ROM区存储。
回复 支持 1 反对 0

使用道具 举报

     
发表于 2017-10-12 23:30:33 | 显示全部楼层
一般的51RAM没有这么大,如果是4K/8K的STC定义时必须使用扩展内存,unsigned char xdata byte1[1000];
回复 支持 反对

使用道具 举报

     
发表于 2017-10-13 20:05:17 | 显示全部楼层
这个……51单片机的RAM没那么大。楼上几位都解释很清楚了。楼主这样定义都是使用单片机的RAM(片内或者扩展),一般RAM都不是很大的,如果楼主确实需要这么多可更改的变量,那么只能换单片机或者想办法优化程序了。如果这些变量都是固定的数据,那么可以用楼上几位介绍的方法用code把变量定义到ROM中。
回复 支持 反对

使用道具 举报

     
发表于 2017-10-14 12:45:14 | 显示全部楼层
风流侠客 发表于 2017-10-12 08:26
这个片子的RAM是256+1024字节,256字节片内RAM和1024字节逻辑片外实际片内的扩展RAM,也就是说如果用来做变 ...

同意,这些数据如果是不变的,建议放到rom中,如果是变化的,建议扩展一个I2C的外部存储,只是速度慢点
回复 支持 反对

使用道具 举报

     
发表于 2017-10-14 19:15:21 | 显示全部楼层
本帖最后由 shadow 于 2017-10-14 19:20 编辑

STC15W4K系列你值得拥有,4K RAM让你把精力集中在如何解决一个大问题而不是抠内存上。注意引脚和之前的51不兼容
STC8系列有8K RAM的,没用过不做评价

另查表等所需的read only数据无脑用code关键字。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-14 21:51:20 | 显示全部楼层
风流侠客 发表于 2017-10-12 08:26
这个片子的RAM是256+1024字节,256字节片内RAM和1024字节逻辑片外实际片内的扩展RAM,也就是说如果用来做变 ...

我这4800个字节是变量  要可写可读   unsiged char code byte[];   不行              unsigned char xdata byte[];可以用  但是容量不够啊。


这个单片机的64K 存储空间    难道必须用unsiged char code byte[];   ????????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-14 21:52:23 | 显示全部楼层
huxiangming 发表于 2017-10-12 23:30
一般的51RAM没有这么大,如果是4K/8K的STC定义时必须使用扩展内存,unsigned char xdata byte1[1000];

我这4800个字节是变量  要可写可读   unsiged char code byte[];   不行              unsigned char xdata byte[];可以用  但是容量不够啊。


这个单片机的64K 存储空间    难道必须用unsiged char code byte[];   ????????
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-10-14 21:55:44 | 显示全部楼层
shadow 发表于 2017-10-14 19:15
STC15W4K系列你值得拥有,4K RAM让你把精力集中在如何解决一个大问题而不是抠内存上。注意引脚和之前的51不 ...

    我去找找看   

我这4800个字节是变量  要可写可读   unsiged char code byte[];   不行              unsigned char xdata byte[];可以用  但是容量不够啊。


这个单片机的64K 存储空间    难道必须用unsiged char code byte[];   ????????
回复 支持 反对

使用道具 举报

     
发表于 2017-10-14 22:38:53 | 显示全部楼层
本帖最后由 shadow 于 2017-10-14 22:41 编辑
⒔號芭嚇即興 发表于 2017-10-14 21:55
我去找找看   

我这4800个字节是变量  要可写可读   unsiged char code byte[];   不 ...


51单片机的“内存”分好几种,我能分得清也就RAM和ROM,xdata,idata,pdata是用来指定RAM类型的,而code是指定为ROM的。代码段是保存在ROM里的,局部、全局变量都在RAM里(51的寄存器好像也是算在RAM里的)。除了烧写时ROM里的内容不能改变(某些允许自己折腾自己的型号不算),所以如果在ROM放数据也只能放只读的数据,常见的就是查询表或字库类的东西。

而你要的是RAM,那个64K说的是ROM,不是同一个东西。如果非要4K以上的RAM,建议放弃51这个方案,否则就算现在勉强塞进去了以后一升级需要更大内存又懵逼了。。。
回复 支持 反对

使用道具 举报

     
发表于 2017-10-14 23:06:11 | 显示全部楼层
本帖最后由 Edward 于 2017-10-14 23:08 编辑
⒔號芭嚇即興 发表于 2017-10-14 21:55
我去找找看   

我这4800个字节是变量  要可写可读   unsiged char code byte[];   不 ...


换单片机吧,可以试试C8051,有的型号可以外挂RAM,容量可以很大,比如C8051F120,内置8k RAM,可外部扩展64k RAM,足够用了。如果还不够,那么你需要ARM,上DDR了……

对了C8051基本上和51一样的,完全兼容51的指令,很容易过渡。
回复 支持 反对

使用道具 举报

     
发表于 2017-10-14 23:41:11 | 显示全部楼层
⒔號芭嚇即興 发表于 2017-10-14 21:52
我这4800个字节是变量  要可写可读   unsiged char code byte[];   不行              unsigned char xda ...

换STC15W4K系列的有4KRAM,还不够的话要外接RAM芯片了。
回复 支持 反对

使用道具 举报

     
发表于 2017-10-15 09:25:27 来自手机 | 显示全部楼层
试试stc8a8k系列片子吧,据说内部集成扩展ram是8k,我还没试用过。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 加入会员

本版积分规则

小黑屋|手机版|矿石收音机 ( 蒙ICP备05000029号-1 )

蒙公网安备 15040402000005号

GMT+8, 2025-4-28 13:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表