读写单片机扩展外部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模拟