STC89C52,51增强型单片机内部资源问题

如图所示
ram512,不过变量较多,请教别人说有1k扩展ram,我datasheet里面没看到啊,就看到如图所示的1k的EEPROM,
并且他要我定义要用char xdata flag _at_0x0000;的形式
1.下载程序的时候不要禁止什么,我搞不清楚了?

2.EEPROM可以随意做扩展RAM用么?EEPROM不是rom嘛,怎么做ram用了啊?

3.Flash程序存储器8K就是当ROM用?flash不是可以擦除还是什么的嘛,我以为可以做ram用呢,全部混掉了,请教高手指导下,麻烦能一个一个回答,我好做笔记整理
满意回答追分

关于STC89C52:
1、STC89C52只有512字节的的RAM,包括2部份,一是256字节的内部RAM,二是256字节的外部RAM;STC89C54以上的芯片才有1K的RAM(内256+外1024)。
2、1K的EEPROM(应为2K)出厂时内置有支持串行下载功能的代码,配合官方下载软件完成代码的串口下载。这个区域在实际应用当中也可用于可保存断电后不能丢失的数据,但实际操作上不能像RAM那样直接读写,需要通过专门的寄存器操作来完成读写。
3、EEPROM不是ROM,也不是RAM,EEPROM也没有用作RAM--你先这样记,这个问题说起来内容比较多,后面细谈。
4、Flash程序存储器8K就是当ROM用(这句话严格的讲应该说成“Flash程序存储器8K就是当程序存储器用”):基本上是这样。关于ROM、FALSH后面细说。

是否需要1K的RAM:可在编译完成后观察编译结果,如果能编译成功,应该有类似下面的信息:“program size:data=9.0,xdata=1,code =2345”,其中data的整数部份就是你实际需要的内部RAM字节数,xdata是你实际需要的外部RAM字节数,code是代码长度。你可以根据这个信息选择最合适的STC单片机型号。具体到STC89C52:data<256,xdata<256,code<8192就行

对上述的一些概念补充说明(包括_at_)
1、51单片机的C语言中有个需要关注的概念就是变量或数据的存储模式(PC机是否有类似的情况我不了解)。在C51中的存储模式是data、bdata、idata、pdata、xdata、code共6种:
data、bdata、idata:就是说变量或数据位于单片机的内部RAM中(ST89C52有256字节),访问速度最快。
pdata、xdata:就是说变量或数据位于扩展的外部RAM中(ST89C52内集成了256字节),相对内部RAM访问速度要慢。
code:就是程序代码,位于单片机的程序存储其中(ST89C52内含8192字节)

KEIL C编译时在有个选项叫数据存储模式(Memory Model),如果选择小模式,则程序中的变量一般会放在内部RAM(data)中,选择其它模式则会放在外部RAM(xdata或pdata,采用这两种存储模式的变量在物理上都放在外部RAM中,只是寻址方式有所不同,整体上pdata更快些);当然,如果在定义变量时就声明了存储模式,编译时会根据声明决定该变量在哪个区。比如:char data flag就是指定将flag放在内部RAM中;char xdata flag _at_0x0000则指定放在外部RAM中,而且地址是0x0000。
"_at_" 用于指定变量在内存中的地址。指定地址的方法优点在于调试方便,比如仿真单步运行时可以直接到该地址去更直观的观察变量的实际变化情况,若不指定则编译器会自己决定放在什么地方,只能通过.M51文件去获取该变量的地址了。其缺点则是容易出错,由于人为的因素,可能会成各变量的地址重叠。所以实际应用中一般都不指定地址,编译器会自动安排的,除非是特殊要求。

这里针对内部RAM和外部RAM再说几句:早先的单片机(8031、8032)外部RAM和程序存储器都需要通过P0口P2口来扩展的,51单片机本身没有哪怕是1个字节的外部RAM,扩展起来很麻烦。后来随着发展才演变到现在几乎所有的单片机都或多或少的集成了RAM和程序存储器,这样大多数应用只需要设计功能电路就可以了,不需要再去扩展,这就降低了不少成本。

2、关于FLASH、ROM、PROM、EPROM、EEPROM、RAM
我们现在一般都会把单片机的程序存储器叫ROM,早先的硬件程序代码确实是放在ROM型的器件中(包括电脑的BIOS),所以ROM就是程序、程序就是ROM,大家都理解,就成习惯了。其实这是不对的,真正的ROM现在很少用了。下面就这几个名词解释一下:

RAM:一般都叫内存,特点是读写速度快,但断电后数据丢失(后5种断电后数据不丢失)
ROM:只读存储器。特点是只能读,其内容在芯片出厂时就已经固化,如果有错只能扔掉
PROM:可编程只读存储器。特点是实际应用中只能读,但应用产品生产环节可由用户来完成对芯片的编程,只能写1次,有错的话下场同ROM。
EPROM:可重复擦写的只读存储器。特点是实际应用中只能读,但可以通过紫外线擦除(也有电擦除的),从而实现再编程,只是编程时一般需要将芯片取下来在专用设备上擦除、编程(电擦除的虽然可以在用户系统上实现擦除及编程,但必须设计专门的擦除编程电路)。上世纪90年代基本上都采用的是这种模式,如果你看到某个芯片上有个小玻璃窗,一般就是这种工艺的芯片。紫外线擦除需要15分钟的时间,也很麻烦,而且映像中编程次数只有1000次。
EEPROM:可重复擦写的非易失性存储器。特点是可读可写,且断电后数据不丢失。采取这种工艺的芯片大多数都是通过IIC总线模式来访问的。但其容量一般都不大,适合于数据不多的应用。
FLASH:可重复擦写的非易失性存储器。特点是可读可写,且断电后数据不丢失。与EEPROM的主要区别在于口线更多、存储容量更大、速度更快,还有就是擦写方式不同:EEPROM可按字节擦写,而FLASH是块擦写模式,所以速度上FALSH的读写更快。

STC单片机为什么要采取EEPROM的模式而不采用FLASH我不知道,可能是因为EEPROM相对成本较低,而且可以直接用作非易失性存储,不需要用户外扩EEPROM了。追问

在STC89C52
非常感谢你,我说下我的理解:
在Memory Model下设置compact,程序中就可以直接char i;默认的就是用的xram?
不设置Memory Model,默认small,不过我在程序里面用pdata,编译后,也会使用xram?
Program Size: data=159.1 xdata=0 code=5628这个data=159.1是不是编译时候检测到的变量定义使用ram情况,不包含程序处理中堆栈和局部变量的使用?
我要使用xram用idata还是pdata?
data不够我要存储数组怎么用?

追答

1、在Memory Model下设置compact,程序中就可以直接char i;默认的就是用的xram?
对。就是在外部RAM,不过应该是pdata,只是访问方式和xdata不一样,这点可以不用关心。
2、不设置Memory Model,默认small,不过我在程序里面用pdata,编译后,也会使用xram?
没错!
3、Program Size: data=159.1 xdata=0 code=5628这个data=159.1是不是编译时候检测到的变量定义使用ram情况,不包含程序处理中堆栈和局部变量的使用?
局部变量肯定包含在里面,堆栈我说不大好,没有在如此的极限状态下用过。不过如果编译能通过说明堆栈、局部变量等都够用。所以在建立工程前应选择好芯片。
4、我要使用xram用idata还是pdata?
用xram应使用pdata或xdata。idata和data都属于内部RAM,只是idata采用的是间接访问模式,data是直接访问模式,效率上后者更高。
5、data不够我要存储数组怎么用
编译时可以选择small模式,然后声明数组是用比如:uchar xdata xx[100],就行了,这样的话其它的变量都会使用内部RAM,只有数组由于声明了xdata会放到外部RAM中。其实这也是常规做法,只有内部变量不够的时候才会选用中模式或大模式,然后相提高代码效率时,再将那些局部变量什么的去声明为data、idata等,倒过来做。如果嫌麻烦直接使用大模式也行。

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-05-26
那你选STC89C58或者89C516,这其中就有1K的RAM,够用的吧?如果嫌少就用STC90C58AD,有4K的RAM。

1.下载的时候就别管那个“禁止”了,按照标准过程来下载。

2.EEPROM绝对不能当RAM来用!STC单片机只是把程序存储器的一部分当EEPROM来使用的。

3.Flash是可以擦除,那是为了重新给单片机烧写程序时擦除使用的。况且Flash有寿命限制,反复擦写超过一定次数后就损坏了,而RAM没这个问题。追问

就STC89c52,定义要用char xdata flag _at_0x0000;的形式说

追答

那你只能在外部扩展SRAM了,比如6116、6264、62256或者能掉电保存数据的HK1235.

追问

查到说STC89C52资源如下:
RAM(MOV访问):256B
XRAM(MOVX访问):256B
ROM:8KB
那应该就是512了

追答

没办法啊,只能外部扩展SRAM了。

追问

在data紧张的情况下,我要是还想存大的数组,shuzu[30],应该怎么弄啊 ,是不是用compact模式然后用idata shuzu[30]?,听人说idata占用过多的话会导致堆栈溢出的?

追答

既然有256字节的XRAM,那就用xdata关键字把这些变量定义到XRAM中,那就避免RAM不够用的问题了。

第2个回答  2012-05-08
借回答收藏,回答的太好了

STC89C52,51增强型单片机内部资源问题
1、51单片机的C语言中有个需要关注的概念就是变量或数据的存储模式(PC机是否有类似的情况我不了解)。在C51中的存储模式是data、bdata、idata、pdata、xdata、code共6种:data、bdata、idata:就是说变量或数据位于单片机的内部RAM中(ST89C52有256字节),访问速度最快。pdata、xdata:就是说变量或...

求stc89c52详细介绍。说说它与51的区别,以及stc系列单片机的...
STC89C52是一种采用STC生产的增强型Flash型单片机。其内部集成Flash存储器,允许用户在不需要额外编程器的情况下,通过简单的操作直接对芯片进行程序烧录。这种单片机具有高性能、低功耗的特点,适用于各种嵌入式系统的开发和应用。二、STC89C52与51系列单片机的区别 1. 性能提升:相对于传统的51系列单片机,ST...

stc89c52和51单片机的区别有哪些
STC89C52RC是宏晶公司的增强型MCS-51单片机,与Atmel公司的AT89C52相比,有以下优点:支持STC的2线制下载方式,下载程序更方便 支持6T模式(在6T模式下,6个时钟周期就是一个机器周期)片内集成了4kB容量的E²PROM 带有P4口,具有更多的I\/O 程序存储器拥有更多的擦写寿命(STC标称可以擦写10万次...

stc89c52和51单片机有什么不同呢?
1、电压不同,STC89C51电压为4.5V-5.5V,STC89LE52的电压为2.0V-3.8V;2、内部程序存储器不同,一个是FLASH,可以ISP,一个是EPROM,只能通过编程器烧录STC89c51\/52的存储器不一样,51有4K,52有8K;3、52还多了一个定时器,所以可以说52是51(这个51是指stc89c51,不是51内核)的增强型;...

stc89c51和stc89c52有什么区别?
FLASH PERAM,而。AT89C52 的内部FLASH PERAM 增加1倍,达到8K。3、52还多了一个定时器,所以可以说52是51(这个51是指stc89c51,不是51内核)的增强型;4、中断源增加:AT89C52 除了具备 AT89C51 的定时器\/计数器 T0 和定时器\/计数器 T1,还额外增加了一个定时器\/计数器 T2。单机片:...

STC89c52与51系列的单片机相比,有点是什么?尽量具体。
第一,ROM 89c51是4K,但89c52是8K。第二,RAM89c51是128字节,但89c52是256字节 第三,c51只有2个定时器,c52有3个定时器,多了个T2定时器,相应的增加了定时器2中断。 、增加了有关定时器2的特殊功能寄存器T2MOD、T2CON、RCAP2L、RCAP2H、TH2、TL2等,还有诸如T2、ET2等控制位 其它方面均与5...

51单片机跟89c51的区别有哪些
1、内部FLASH容量不同 AT89C51和AT89C52是单片机的两种型号,AT89C52是AT89C51的各个方面的升级版,AT89C51 有 4K 字节的内部FLASH PERAM,而AT89C52 的内部FLASH PERAM 相比AT89C51 增加了1倍,其容量达到8K。2、随机存取数据存储器(RAM)不同 AT89C51 有128 字节的内部 RAM,AT89C52 的内部 RAM 扩展为 ...

STC89C52 单片机的内部程序存储器与数据存储器容量各为多少?
STC89C52 单片机的内部程序存储器为8K字节;内部数据存储器容量为512字节。

AT89C51\/52与STC89C51\/52的单片机有什么区别,
1、AT89C51\/52:采用ATMEL高密度非易失存储器制造技术制造,与工业标准的MCS-51指令集和输出管脚相兼容。2、STC89C51\/52:使用经典的MCS-51内核,但是做了很多的改进使得芯片具有传统的51单片机不具备的功能。三、特点不同 1、AT89C51\/52:4k 字节Flash 闪速存储器,256字节片内数据存储器,32 个I\/O ...

stc89c52和51单片机有什么区别?
提供了51单片机所不具备的功能。在硬件特性上,AT89C51\/52的特点包括4K字节Flash,256字节片内数据存储器,32个I\/O口线等,以及串行通信口和内置振荡器。而STC89C52更进一步,拥有8K字节程序存储空间、512字节数据存储空间,以及内建的4K字节EEPROM存储空间,这些特性为其提供了更多的存储和扩展选项。

相似回答