微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机扩展外部RAM

51单片机扩展外部RAM

时间:11-27 来源:互联网 点击:
今天这个是是以前做过的,没做成,扩展ROM的时候失败了~~

不过今天主要的就是扩展外部的RAM,这个相对比较简单点,不想外部的ROM还要设置太多的编译器~~

单片机扩展外部RAM

一、扩展总线

1、简介(这种扩展是基于总线扩展的,所以,P0、P2口就已经不可以再做它用了)

1)数据总线宽度为8位,由P0口提供;

2)地址总线宽度为16位,可寻址范围2的16次,也就是64K。低8位A7~A0由P0口经地址锁存器提供,高8位A15~A8由P2口提供。由于P0口是数据、地址分时复用,所以P0口输出的低8位必须用地址锁存器进行锁存;

3)控制总线由RD、WR、PSEN、ALE和EA等信号组成,用于读/写控制、片外RAM选通、地址锁存控制和片内、片外RAM选择。

地址锁存器一般选用带三态输出缓冲输出的8D锁存器74LS373。

2、片外RAM的操作时序

进行RAM的扩展,其扩展方法较为简单容易,这是由单片机的优良扩展性能解决的。单片机的地址总线为16位,扩展的片外RAM的做大容量为64KB,地址为0000H~FFFFH。

1)由于51单片机采用不同的控制信号指令,尽管RAM和ROM地址是重叠的,也不会发送混乱。

2)51单片机对片内和片外ROM的访问使用相同的指令,两者的选择是由硬件实现的(就是不用咱们关心的,还有他们的存储也是硬件自动实现的,你只要连接好引线就哦了~~~剩下的就是写点指令控制控制了)

3)芯片选择现在多采用线选法,地址译码法用的渐少。ROM和RAM共享数据总线和地址总线。

二、RAM的扩展原理

外部RAM的扩展是由P2口提供高8位地址,P0口分时地址作为第八位地址线和8位双向数据线

外部RAM的读时序为(这个是不用关心的,只要能看懂就哦了~~你只要写出你想要的语句来,由于单片机P0口有A/D功能,所以只要连接好硬件,还有就是知道我之前在计算机语言栏目里写过的那篇文章(貌似是~C51的运算量)里面的那些绝对地址的访问啊~还有存储器类型~~)



外部RAM的读时序为:

这里稍微说说吧:

51单片机的CPU在访问片外RAM的一个机器周期中,信号ALE出现两次(正脉冲),RAM选通信号也两次有效,这说明在一个机器周期内,CPU两次访问片外RAM,也即在一个机器周期内可以处理两个字节的指令代码,所以在51单片机指令系统中有很多单周期双字节指令。

三、RAM的扩展方法

1、数据存储器



2、数据存储器扩展电路



好了~~

可以贴出程序来喽~~





程序也就那么一点~~

将就着看吧~~

~~

RAM_6264.c(本来想用那个指针访问的~~~~试了半天~~不对啊~~无语了~~)

//------------------------------------------------------------------------------
//这个程序主要是用来验证扩展RAM的~~
//扩展RAM主要的就是连接好电路~~具体的时序不用操心~~
//这里边主要用到了我的写的计算机语言那一篇文章的内容~~
#include"reg52.h"
#include"absacc.h"//C51运行库中的预定义宏,来对51单片机的code、data、pdata和xdata空间进行绝对寻址
//------------------------------------------------------------------------------
typedefunsigned char uchar;
typedefunsigned intuint;
xdata uint x1 _at_ 0x0000;//使用c51扩展关键字 _at_ 来实现绝对地址的访问,注意:使用它定义的变量一定要是全局变量~~
//一开始我都给忘记了~~擦~~
//------------------------------------------------------------------------------
//main
void main()
{
uchar x2;

x1=0x5566;//给片外存储器的0x0000赋值0x5566

XBYTE[0x0010]=0x55;//XBYTE[0x0010]访问片外RAM的0010字节单元,并给它赋初值
x2=XBYTE[0x0010];//将XBYTE[0x0010]单元的字节(注意定义的是uchar型~~)赋给x1
}

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top