问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

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

发布网友 发布时间:2022-04-25 16:45

我来回答

3个回答

热心网友 时间:2022-05-03 00:34

关于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等,倒过来做。如果嫌麻烦直接使用大模式也行。

热心网友 时间:2022-05-03 01:52

那你选STC89C58或者89C516,这其中就有1K的RAM,够用的吧?如果嫌少就用STC90C58AD,有4K的RAM。

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

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

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

热心网友 时间:2022-05-03 03:27

借回答收藏,回答的太好了
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
...时间会发作,很痛的,请问是这样吗?会痛多久? ...已经坏了,如今全身浮肿,尿排不出,医生说就这 我爷爷得了肝癌晚期,腹水,不能手术.听说氩氦超冷刀技术能治.哪里有... 父亲59岁得了肝癌晚期,医生说最多半年时间了,上面还有80多岁的爷爷... 长春跑大连的列车员,怎么区分正式分和临时工呢? 员工刚怀孕就被开除,开除负责人拒不认错,你如何看待该公司的态度?_百 ... 员工在职期间怀孕,老板可以无故迟退吗? 老板开除怀孕女员工违法吗 如何选购蚊帐 什么样的蚊帐最好 stc90c516rd 单片机与89C51单片机内部差别是什么啊 89C51与89C52的差别又是什么啊????? STC89C53RC和52rc和51单片机 下列单片机哪些是非51系列?+A+STC89系列+B+PIC系列+C+AVR系列+D+ARM系列 1、请问单片机STC89C52RC的含义是什么?(例如:stc是什么?89是什么?等等...)急用 单片机STC89C586RD+是什么意思? stc89c58rd+单片机能计算多少位的数据 求STC89c52详细介绍。说说它与51的区别,以及STC系列单片机的特点,优点等,最好能稍微多点。 为什么使用STC89C52单片机 STC89c52与51系列的单片机相比,有点是什么?尽量具体。 在单片机中,STC89C51的主要特性是什么? stc89c58RD各符号含义 韭菜打种后能吃吗? 三伏天养生保健 夏季养生吃什么菜 伏天适合种的蔬菜 入伏后种什么菜 入伏适合种哪些蔬菜 韭菜伏天能吃吗 一体机没有独立显卡,想装怎么办 求方案 拍卖行瓷器拍卖怎样收费及过程 北京保利拍卖公司瓷器征集部电话是多少 瓷器收藏字画收藏去哪里鉴定 2013北京春季拍卖时间咨询 stc单片机89C52与我们平常说的51单片机编程时应主意什么 啊? 单片机stc89c58的介绍 STC89C52RC单片机的缺点 如何找到STC89C52RC单片机RXD TXD GND VCC及各针脚的定义 梦见别人离婚了又再次出嫁的,而且办的风风光光的,好像顾意做给前夫看的。这有什么征兆吗 梦见同事离婚预示什么? 早上七点做的梦 梦见朋友离婚后又再婚了? 建设银行定投怎么取消 梦见别人离婚,有什么预兆吗? 建行上的基金定投解撤销后怎么赎回钱 梦见同事离婚了,我跟她因小事吵架 建行买的定投基金每个月要投300,投的那三百块钱可以随时取出来吗? 建设银行基金定投已经先解约了 还能赎回吗? 建行定投基金怎么取消 建行定投基金怎样终止? 建行的基金定投具体概念是怎么样的?适不适合一般的上班族买?有无风险? 有懂建行“基金定投”的朋友解释一下,他的收益和办理程序及风险,谢谢! 建行每月基金定投能取消么? 关于建行基金定投 在建行基金定投,先赎回了,但是还有一笔钱还在在途资金就解约了