前言
很多人在开发时遇到单片机片内RAM和ROM容量不够用的问题:
今天就来说说如何通过单片机与片外存储器的连接来解决片内RAM和ROM容量不够用的问题
提示:在阅读时如果有什么问题大家可以评论区留言
一、片内RAM是什么?
我们所熟知的8051单片机,其内部有很多存储器:
其中就有RAM:可读写存储器,也称数据存储器
RAM的容量为256字节(这里面当然包含一些特殊功能的寄存器)
二、片内ROM是什么?
8051单片机,其内部除了有RAM,还有ROM:
8051内部的ROM:只读存储器,也被称程序存储器ROM的容量为4KB
三、RAM或ROM容量会不会不够用?
通过了解,我们发现这个RAM和ROM的容量比较小,那到底够不够我们用呢?
这就要看我们是用它来干什么,正常情况下是够用的。
那万一不够用怎么办呢:
小编我就出现生过单片机内部的RAM或ROM容量不够用的情况;
下面就来通过外接RAM或ROM来解决下
四、解决办法
1.8051单片机与片外RAM或片外ROM连接
在8051单片机与片外RAM或片外ROM连接时:
使用P0.0~P0.7和P2.0~P2.7引脚输出16位地址,可以最大寻址216=65536=64K个存储单元,个存储单元可以存储1个字节(1Byte),也就是8位二进制数(8bit),即1Byte=8bit;需要注意的是:8051单片机外接RAM或ROM容量最大不要超过64KB,超出范围的存储单元就无法识别和使用了。
2.单片机从片外 RAM 写入数据
当单片机需要从片外 RAM 写入数据时:
读写时会从 P0.0~P0.7 引脚输出低 8 位地址(如00000011),再通过8路锁存器送到片外RAM的A0~A7引脚,它与P2.0~P2.7引脚输出并送到片外RAM的A8~A15引脚的高8位地址一起拼成16位地址,从64K个(即216个)存储单元中选中某个存储单元。
3.单片机往片外RAM写入数据
如果单片机要往片外RAM写入数据:
写入数据会从WR引脚送出低电平到片外 RAM 的WE脚,片外 RAM 被选中的单元准备接收数据。
与此同时,单片机的ALE端送出ALE脉冲信号去锁存器的C端,将1Q~8Q端与1D~8D端隔离开,并将1Q~8Q端的地址锁存起来(保持输出不变),单片机再从P0.0~P0.7引脚输出8位数据,送到片外RAM的D0~D7引脚,存入内部选中的存储单元。
4.单片机从片外RAM读取数据
如果单片机要从片外RAM读取数据:
跟上面同样先要发出地址选中片外RAM的某个存储单元,并让RD端输出低电平去片外RAM的OE端;
再将P0.0~P0.7引脚输出低8位地址锁存起来;
然后让P0.0~P0.7引脚接收片外RAM的D0~D7引脚送来的8位数据。
5.外部存储器是ROM(只读存储器)
如果我们外部存储器是ROM(也就是只读存储器)时:
此时单片机不使用WR端和RD端,但会用到PSEN端,并将PSEN引脚与片外ROM的OE引脚连接起来,在单片机从片外ROM读数据时,会从PSEN引脚送出低电平到片外ROM的OE引脚,除此之外,单片机读片外ROM的过程与片外RAM基本相同。
五、与片外的连接
上图所示的是8051 单片机与片外存储器连接线:
具体有:
有地址总线(AB)
数据总线(DB)
控制总线(CB)
1.地址总线
地址总线由A0~A15共16根线组成,最大可寻址216=65536=64K个存储单元:
2.数据总线
数据总线由D0~D7共8根线组成(与低8位地址总线分时使用),一次可存取8位二进制数(即一个字节)
3.控制总线
控制总线由RD、WR和ALE共3根线组成。
总结
通过上面的接线后,单片机在执行到读写片外存储器的程序时,会自动按一定的时序发送地址和控制信号,再读写数据,无需人工编程参与。
————————————————
版权声明:本文为CSDN博主「huidaoli」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huidaoli/article/details/122065108