① 51单片机作外部RAM扩展问题
在ALE信号的下降沿之后,P0口已经由输出0的状态转变为输入的状态,或者说那两个MOS管已经断开了和地线的联系,所以就没有你担心的问题了。
或者说,Intel在设计51单片机时已经替你考虑过这问题了。
② 51单片机的扩展原理
51单片机具有八位数据总线(p0口)和16为地址中线(p2p0口),所以其扩展原理就是利用数据和地址总线的方式来扩展外部rom或者ram的。且又专门的指令来读写扩展的存储器数据。分别是movx和movc。
③ 51单片机内部ram,外部ram的区别
单片机的这 512 字节的 RAM在地位上并不都是平等的,而是分块的,块与块之间在物理结构和用法上都是有区别的,因此形成51单片机内部ram和外部ram的区别。
一、从使用字节区别。标准 51单片机的片内 RAM 地址从 0x00H~0x7F 共 128 个字节。而现在我们用的 51 系列的单片机都是带扩展片内 RAM 的,即 RAM 是从 0x00~0xFF 共 256 个字节。而片外 RAM 最大可以扩展到 0x0000~0xFFFF 共 64K 字节。
二、从连接地址区别。片内 RAM 和片外 RAM 的地址不是连起来的,片内是从 0x00 开始,片外也是从 0x0000 开始的,分别形成data,即片内 RAM 从 0x00~0x7F;idata,即片内 RAM 从 0x00~0xFF;pdata,即片外 RAM 从 0x00~0xFF;xdata,即片外 RAM 从 0x0000~0xFFFF。
一般情况下,使用 data 区域,data 不够用了,就用 xdata,如果希望程序执行效率尽量高一点,就使用 pdata 关键字来定义。其它型号有更大的 RAM 的 51 系列单片机,如果要使用更大的 RAM,就必须得用 xdata 来访问了。
(3)51单片机ram扩展扩展阅读:
51单片机对所有兼容Intel 8031指令系统的统称,8004单片机成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机属于基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
51单片机的RAM用以存放可以读写的数据,如运算的中间结果、最终结果以及欲显示的数据,ROM用以存放程序、一些原始数据和表格。四个8位并行I/O口,既可用作输入,也可用作输出。T/C包括两个定时/记数器,既可以工作在定时模式,也可以工作在记数模式。
④ 51单片机用线选法拓展外ram最多可拓展多少个6116芯片
6116芯片,是 2K*8 的,地址线有 11 条。
51单片机,有 16 条地址线。
用线选法拓展外ram最多可拓展 5 个6116芯片。
⑤ 51单片机定义数组太大RAM不够用如何扩展
选用内存比较大的单片机或按8080总线扩展内存
不管是片上256B以外的内存还是外扩内存,编程中变量前都要加xdata 修饰
其实你只要用xdata 修饰,编译就能通过,但如果你实际上没有扩展内存,运行时才会出错
⑥ 51单片机怎样扩展32k的ram,使其地址范围为2000H-5FFFH
1、地址范围为2000H-5FFFH,只有16K。
2、将16KRAM的寻址地址脚a0-a12连接到单片机的16位扩展后的低13位地址线A0-A12上。A14接到a13上。然后用异或逻辑,将单片机A13,A14这两位做逻辑得到RAM的/CS=(A14^A13)。
=====
建议更换内部扩展RAM,或变换寻址地址范围。
⑦ 51单片机64kb扩展ram问题
看你的数组的大小,不过才有64个字节,内部RAM足够了,也不用扩展外部的RAM的。
再多点,选AT89C52,又可以增加128字节的内部RAM了,根本就不用扩展RAM。
用AT89C52,要使用增加的128B,要声明成idata变量就行。
再说你用xdata的问题,这不能只是声明外部RAM变量,仿真图中还必须真的扩展外部RAM存储器芯片才行,估计你的仿真图肯定没有画,那就不行的。
⑧ 51单片机RAM扩展
要让51外扩展的RAM起作用,关键是要确保在MCU相关引脚上产生正确的外部读写时序(我这里默认你硬件连接全部正确).
首先很关键的一步是要仔细看你使用的MCU的资料,
下面我仅对C语言需要注意的地方讲解(汇编这里就略了,因为对于新手来说,讲的复杂并不是好事)
1、对于ATMEL、WINBOND等MCU,可以在C里,直接用 xdata 保留关键字来对变量进行声明,这样在访问这些变量时就能直接产生外部读写信号。
2、对于STC的MCU(比较新的MCU类,我这里就列举目前的STC类MCU内部用1024个字节RAM扩展),这里有更多的功能选择,位于内部8EH地址上的AUXR是RAM的扩展管理寄存器,其中的EXTRAM位(位1):
0 : 内部扩展的EXT_RAM可以存取
RD+ 系列单片机:
在00H 到3FFH 单元(1024 字节),使用MOVX @DPTR 指令访问,超过400H 的地址空间总是访问外部数据存储器(含400H 单元),MOVX @Ri 只能访问00H 到FFH 单元。
RC 系列单片机:
在00H 到FFH 单元(256 字节),使用MOVX @DPTR 指令访问,超过100H 的地址空间总是访问外部数据存储器(含100H 单元),MOVX @Ri 只能访问00H 到FFH 单元。
1: External data memory access.
外部数据存储器存取,禁止访问内部扩展RAM,此时MOVX @DPTR / MOVX @Ri 的使用同普通8052 单片机
下面是对于STC RD+的C语言简单举例子:
unsigned char xdata sum;
sum = 20;
这里在 EXTRAM 为0的情况下,如果sum的地址超过400H(含400H),那么就能产生外部RAM的读写时序,如果sum的地址小于400H,那么只能访问内部扩展的RAM,但不会产生外部RAM的读写时序。
这里在 EXTRAM 为1的情况下,那么就直接产生外部RAM的读写时序。
好了,就讲这样简单吧,总之,在使用MCU硬件前,必须先对该硬件资料熟悉,使用的时候,才能游刃有余。
⑨ 51单片机扩展RAM不用P0口可以吗
你说的是P0口也外接了ADC吗,那简单接在一起就行了,P0可以同时接ADC和RAM,注意地址不要从了就行
实在不想用P0口也是可以的,用软件实现,爱用哪个口就用哪个口,但占用周期多,速度会受到一点影响
⑩ 关于51单片机外扩RAM的问题。请大侠们帮忙解答,先谢过。
现在的rom和ram都很丰富,rom有好几k的,你写程序肯定够了,除非你要用大量的数据,才会使用大量的程序空间,比如几十k,才会考虑去扩充。
扩充是用p0口和p2口扩充,p0口是数据,p2口是地址,用373锁存就可以扩展了。地址如果不是很大,可以用138译码,这样可以扩展多片芯片,如果很大,就采用线选咯。