C51关于外部RAM的读写 想具体知道硬件是怎么操作的

[复制链接]
4004|10
 楼主| zhjyuanji 发表于 2012-9-30 13:17 | 显示全部楼层 |阅读模式
char xdata CS1 _at_ 0xfe00; // CALL1使能
char xdata CS2 _at_ 0xfd00; // LK1使能
char xdata CS3 _at_ 0xfb00; // CALL2使能
char xdata CS4 _at_ 0xf700; // LK1使能
char xdata CS5 _at_ 0xef00; // LED1使能
char xdata CS6 _at_ 0xdf00; // LED2使能
char xdata CS7 _at_ 0xbf00; // LED1使能
char xdata CS8 _at_ 0x7f00;

然后程序中有这样一条代码:
powerFailure = CS1&0x40; //读入第一个芯片输出引脚的状态
if(powerFailure==0x40)
{//有电源失电
LED = 0;
}
else if(muteflag == 1)
{
LED = 1;
}
CS1到CS8是外部器件的片选端,我现在出现一个理解的问题,以前我以为xdata是指外部RAM(一个存储区),现在碰到这个也能像操作外部RAM一样的读取芯片的数据,一时转不过弯来,总工给我解释的很玄乎,是不是可以这么理解,在硬件上P2口自动输出0xfe,使第一个芯片使能,然后P1口读入该芯片输出口的八位数据(powerFailure = CS1&0x40;)
sedatefire 发表于 2012-9-30 14:18 | 显示全部楼层
当你访问xdata时,地址信号会从P1、P2口丢出
还有wr、ne等等
微机原理去翻出来看看吧
dqyubsh 发表于 2012-9-30 18:21 | 显示全部楼层
你这个定义是片选,那里的地址由所有地址线组合出来的,片选低电平时选中对应的芯片。选中的同时,数据线、控制线(读、写等)一起操作该外设芯片。这种并行操作方式,必须三总线同时操作。至于外设是RAM还是别的神马,都一样。
znmcu 发表于 2012-9-30 19:35 | 显示全部楼层
确实有很多人认为外部ram的读写是需要写驱动的。
ningling_21 发表于 2012-9-30 20:37 | 显示全部楼层
相当于读取片外RAM,读取时需要P0,P2,ALE,WR,RD互相配合实现,汇编用MOVX指令...
znmcu 发表于 2012-9-30 21:21 | 显示全部楼层
以后,你会发现外部总线是多么有用。
 楼主| zhjyuanji 发表于 2012-10-2 09:39 | 显示全部楼层
5# ningling_21
ALE,WR,RD我看了下源代码里好像没有体现
coody 发表于 2012-10-2 09:43 | 显示全部楼层
LZ找一本51的基础书看看,里面有详细的访问时序。
znmcu 发表于 2012-10-2 12:32 | 显示全部楼层
程序里是看不到的,硬件自动完成
NE5532 发表于 2012-10-2 13:05 | 显示全部楼层
CPU硬件行为,只要是外部总线访问指令,会自动调用外部总线访问的,与程序无关,就像你要用自己的脚,脑袋可以下命令,你要别人帮你跑路,就得通过语言跟他交流。
znmcu 发表于 2012-10-2 13:11 | 显示全部楼层
寻址是cpu最基本的功能,是cpu取指和运行的基础,由cpu架构内核所实现的,无需使用者介入。总线,寻址等深入认识,确实需要领悟和体系结构方面的知识。需要积累。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

61

主题

188

帖子

2

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