关于单片机外部RAM的问题

[复制链接]
6504|11
 楼主| 790953623 发表于 2012-10-1 13:14 | 显示全部楼层 |阅读模式
1.问题一:单片机除256字节外,自己片上扩展了4K个字节,这四K个字节算外部RAM么还是内部RAM??还是说只有通过P0,P2以及WR,RD,ALE口等外接的专门的RAM才算外部RAM。。
2.问题二:片上扩展的RAM,就比如说那4K个字节是用idata访问,还是pdata访问??自己外扩的RAM是用xdata么??
3.问题三:如果片上扩展的RAM和自己外扩的RAM都用xdata的话,那么如何区分是对哪个RAM区进行的操作??就好比片上扩展的4K和自己外扩的4k地址地址重复,单片机如何区分??
补充:本人新手对汇编不太熟悉,所以请大神能从C的角度即idata,xdata来解答,不要说mov,movx等
znmcu 发表于 2012-10-1 14:02 | 显示全部楼层
物理内部,逻辑外部
znmcu 发表于 2012-10-1 14:02 | 显示全部楼层
znmcu 发表于 2012-10-1 14:06 | 显示全部楼层
单片机内部有专门寄存器关闭内部扩展ram。下载软件上也有选项,关闭内部扩展ram。如果不关闭,内部扩展ram还是内部,不使用外部ram。即真正的外扩ram的重叠区域不会访问到。
znmcu 发表于 2012-10-1 14:10 | 显示全部楼层
标准51体系结构中,内部前128字节ram是data,前256字节是idata,idata有一半与data重叠,所以通常使用idata即可。sfr地址与内部地址重叠,所以c51中使用sfr关键字专门对特殊功能寄存器进行定义。
znmcu 发表于 2012-10-1 14:12 | 显示全部楼层
为什么51内部只能有256的内部ram,根源在于51内核的8位地址总线。外部可扩展64k ram,其根源在于外部16位地址总线。
ningling_21 发表于 2012-10-1 14:19 | 显示全部楼层
本帖最后由 ningling_21 于 2012-10-1 14:22 编辑

问题一:单片机除256字节外,自己片上扩展了4K个字节,这四K个字节算外部RAM么还是内部RAM?

扩展的,当然是外部RAM.  用XDATA访问只要是扩展的RAM,都可以用XDATA访问
 楼主| 790953623 发表于 2012-10-1 14:23 | 显示全部楼层
4# znmcu 1.是不是说我对寄存器进行设置关闭内部RAM,这时我使用xdata时,就是直接对自己外部扩展的RAM操作,而不关闭的话,用xdata就是对内部片上扩展的RAM操作??另外还有一个问题??如果片上扩展了4K,片外扩展了64k,我不关片内RAM的话,当变量超4k后,是否自动跳转到外部的RAM上呢???
znmcu 发表于 2012-10-1 15:29 | 显示全部楼层
你答对了。
znmcu 发表于 2012-10-1 15:30 | 显示全部楼层
任何cpu,只要寻址空间有重叠,所谓的overlap,则必然有重映射。
NE5532 发表于 2012-10-1 18:40 | 显示全部楼层
楼主,你的问题没有一个跟C语言相关,不要听那些搞C语言的,他们根本就没搞懂硬件基础。

广义上,外扩RAM都叫片外RAM,但是单片机能不能自动访问这些RAM取决于构架,你没有指明单片机型号,根据你提供的信息,猜是51,那么只有通过你说的那些物理管脚扩展的RAM(总线)上的才是硬件可以直接寻址的RAM,如果你用SPI接口的RAM,那就只能自己写程序去访问了,程序也无法直接认识这种片外RAM内的变量,只有你自己通过程序编写驱动来虚拟访问。

楼主要详细知道这些,需要学汇编,学单片机内核和寻址方式才能知道。
dqyubsh 发表于 2012-10-2 05:00 | 显示全部楼层
1.问题一:单片机除256字节外,自己片上扩展了4K个字节,这四K个字节算外部RAM么还是内部RAM??还是说只有通过P0,P2以及WR,RD,ALE口等外接的专门的RAM才算外部RAM。。
你只要知道片内RAM和片外RAM,都是XRAM,都是要用三总线操作的。
2.问题二:片上扩展的RAM,就比如说那4K个字节是用idata访问,还是pdata访问??自己外扩的RAM是用xdata么??
都用XDATA。为了移植性,最好不用idata,pdata这种指令,直接无视它。
3.问题三:如果片上扩展的RAM和自己外扩的RAM都用xdata的话,那么如何区分是对哪个RAM区进行的操作??就好比片上扩展的4K和自己外扩的4k地址地址重复,单片机如何区分??
地址重叠,自动选片内;超过4K,用片外。
补充:本人新手对汇编不太熟悉,所以请大神能从C的角度即idata,xdata来解答,不要说mov,movx等

现在还分这些RAM,确实很迂腐,很过气,直接扎垃圾桶得了。如果用C语言,这些你都不用管,C本身就是屏蔽这些复杂性。

有的51内核单片机,比如68013A,一共有16K片内RAM。这些RAM既可以用来存放固件code,也可以做数据缓冲data,根本没必要区分它究竟是什么结构。统统当作XRAM,这个XRAM也仅仅是C51的助记符而已,没有那些神秘的事情。

总数是16K,code用得多,data就少,反之亦然。实在不够,你就外扩。如果你一定要把它与片外RAM做区别,那你又迂腐了。因为C51没有助记符可以区分的,你自己要清楚地知道你的数据存在哪里,当然,你不知道也没所谓,反正code+data不超界就可以用。谁要説性能,那更是胡扯,你指望C51有个P性能,用51也跟性能无关,能用就得了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

71

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部