51单片机怎么访问外部存储器?

[复制链接]
查看11 | 回复5 | 2009-2-16 18:26:50 | 显示全部楼层 |阅读模式
这是我写的一段代码,但是数据都没写进去,也没读出来。不知道错在哪。
知情者帮忙修改下,小女在此感激不尽。先谢谢了。
#include
Writefm1808(num,desAdr,*souAdr)
{CE = 0;

P0 = desAdr++; //送地址
delay(100); //延时

P0 = souAdr++;//送数据

//其中fm1808的地址和数据都是通过 P0口提供,写数据和读数据都是CE在下降沿是锁住地址
}
Readfm1808(num,*desAdr,souAdr)
{CE = 0;

P0 = desAdr++; //读地址
delay(100);// 延时

souAdr++ = P0 ;//读数据
}
void main(void)
{ int num,Adr;
inttem[4];
num=3;
Adr=0x01;
freq[3]={22,11,44};
Writefm1808(num,Adr,freq);
Readfm1808(num,tem,Adr);
}
IO口的设置在此就不罗列出来了。
我是把循环体漏了,本来是有的。如
Writefm1808(num,desAdr,*souAdr)
{CE = 0;
for(i=0;i<4;i++)
{
P0 = desAdr++; //送地址
delay(100); //延时
P0 = souAdr++; //送数据
CE=1
}
//其中fm1808的地址和数据都是通过 P0口提供,写数据和读数据都是CE在下降沿是锁住地址
}
我改成下面的格式试试也不对
Writefm1808(num,desAdr,*souAdr)
{P0 = desAdr++; //送地址
for(i=0;i<4;i++)
{CE = 0;
delay(100); //延时
P0 = souAdr++; //送数据
CE=1
}
//其中fm1808的地址和数据都是通过 P0口提供,写数据和读数据都是CE在下降沿是锁住地址
}
2.3楼的回答
char xdata *aa;
aa=0x100;
aa = 0xAA;
这样写,我还是不怎么会写
能否补充完整
谢谢

回复

使用道具 举报

千问 | 2009-2-16 18:26:50 | 显示全部楼层
如果直接是外部RAM的话.不用那么麻烦..直接用指令访问就行了.char xdata *aa;aa=0x100;aa = 0xAA;这样就可以忘外部ram0x100地址里面写东西了如果你不是总线形式的话.那就只有通过你上边的那种.时许形式.读写了.不过看你接的那种 要两次P0口的,,估计是总线形式的.就是不知道你的P0口有没有用锁存器.否则.是玩不成任务的.补充:比人问得.上面我写错了.应该是aa = 0x100;*aa = 0xAA; //这里多了一个*,,表示往地址里面写数据.当然如果你要读0x100的数据那就char da;da = *aa;去回来就行了....
回复

使用道具 举报

千问 | 2009-2-16 18:26:50 | 显示全部楼层
1.你的根本都没有读数据和写数据的操作2.而且你的程序看样子并不是所谓的写数据和读数据的操作,而是批量数据转移,既然是批量处理,就要有循环体4.CE下降沿锁存,则在拉低CE时就要准备好P0的地址信号而不是拉低后才赋值P0,操作完成后就要把CE拉高,你两步都没有完成...
回复

使用道具 举报

千问 | 2009-2-16 18:26:50 | 显示全部楼层
撇开头文件不谈,你程序中问题很多。首先,你CE时序就不对,只见你拉低,有拉高吗,而且,你这里没有喂狗,你肯定访问不了FLASH啊,一直不停的在复位。...
回复

使用道具 举报

千问 | 2009-2-16 18:26:50 | 显示全部楼层
要想访问外部存储器,必须包含头文件absacc.h!!你加上看它的头文件所包含的内容就明白了...
回复

使用道具 举报

千问 | 2009-2-16 18:26:50 | 显示全部楼层
我学单片机已经是2年前的事情了,很想帮你,可惜都忘了...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行