STC89C52RC,PDF上显示ram为512.内部为256,外部为256,
是不是这个512ram都能用来定义变量,我怎么听别人说,里面
还有特殊寄存器,要占用128ram,实际运用不到3/4 RAM的空间定义变量,
是不是这样理解啊?到底512有多少能用,
STC89C52,51增强型单片机内部资源问题2
答案:2 悬赏:80 手机版
解决时间 2021-12-24 02:27
- 提问者网友:相思似海深
- 2021-12-23 05:25
最佳答案
- 五星知识达人网友:撞了怀
- 2021-12-23 06:56
我做过STC89C52RC的ram存储实验,
全局变量的极限:
data可定义95字节 + xdata可定义256字节,共351字节RAM可供用户使用。
其它的估计被特殊寄存器占用了。
。。。。。。。你也可以做实验试试,实践是检验真理的唯一标准。。。。。。。。。
全局变量的极限:
data可定义95字节 + xdata可定义256字节,共351字节RAM可供用户使用。
其它的估计被特殊寄存器占用了。
。。。。。。。你也可以做实验试试,实践是检验真理的唯一标准。。。。。。。。。
全部回答
- 1楼网友:神也偏爱
- 2021-12-23 07:56
关于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了。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯