当前位置: 代码迷 >> 单片机 >> 读写单片机扩展外部RAM时的有关问题
  详细解决方案

读写单片机扩展外部RAM时的有关问题

热度:44   发布时间:2016-04-28 16:04:23.0
读写单片机扩展外部RAM时的问题
我用的扩展芯片是IS62C256AL-45UI(32K*8),电路连接方法和常规的一样,用的是74HC573。

void Externram_Initl()//初始化
{
  C_S = 0;
WR = 1;
RD = 1;
P0 = 0xFF;
P2 = 0xFF;
}

遇到的问题是按照下面的方法读写数据正常:
  addre_ram=0x1000
  exram = XBYTE[addre_ram];
  addre_ram++; //这是读

  XBYTE[addre_ram] = ram_data;
  addre_ram++; //这是写

但是我按照时序这样写却有问题,数据不完整,基本不正确
  addre_ram=0x1000
  RD = 0;
  exram = XBYTE[addre_ram];
  RD = 1;
  addre_ram++; //这是读

  RW = 0;
  XBYTE[addre_ram] = ram_data;
  RW = 1;
  addre_ram++; //这是写
请问这是什么问题,有谁遇到同样的问题吗?求解?




------解决方案--------------------
你操作RD 和RW扰乱了本来的时序了.
在读外部RAM的时候,MCU会自动加入RW 和RW时序.

exram = XBYTE[addre_ram]; 
这一步的操作,MCU先向地址线输出地址,然后RD自动出上升沿信号,数据自动读入.
你修改后的代码,先RD=0,这样由于51单片机的RD脚是内部上拉,那么RD就会保持为低电平,
对于读时序来说,没有上升沿信号,所以无法读数据.
下面的写数据同样问题.
------解决方案--------------------
是硬件自动加上去的,不用你自己操心的.
------解决方案--------------------
编译后,在芯片自己执行MOVX指令的时候,如果外扩的电路没有问题,对应的时间是单片机自己执行的

用户无需参与
------解决方案--------------------
楼主仔细看看movx指令的时序就明白了
------解决方案--------------------
那个RAM时序图是给没有硬件总线的同学用的,方便他们用IO模拟
  相关解决方案