访问片外数据存储器时
1、单片数据存储器的连接与访问
图5-4为单片机与一片数据存储器芯片6264(引脚如图5-5所示,引脚功能见表5-3)的连接图,在进行6264的扩展时需要注意以下几点:
CS是片选信号,高电平有效,6264工作时该引脚必须处于高电平(直接连接至+5V电源即可)。
CE是片选信号,低电平有效,6264工作时该引脚必须为低电平,为了降低芯片功耗和防止干扰信号对6264中数据的影响,该引脚通常不直接接地,而是连接到单片机的高位地址总线上,其目的是通过单片机输出的地址信号控制6264,仅当CE引脚上出现低电平时6264工作,其他情况下6264不工作。
WE引脚是写选通信号,低电平有效,单片机的WR引脚与WE引脚相连,WR引脚的低电平控制6264通过数据总线接收来自于单片机的数据,对应于单片机的输出(写)操作。
OE是读选通信号,低电平有效,单片机的RD引脚与OE引脚相连,RD引脚的低电平控制6264通过数据总线将数据传送给单片机,对应于单片机的输入(读)操作。
单片机的数据总线与6264的数据总线对应相连,单片机的数据总线是未经过地址锁存器锁存的P0口。
单片机地址总线的低位与6264的地址线相连,这里6264的地址线指的是引脚A12~A0,即6264的片内地址线,片内地址线上传输的地址用于选择6264中的存储单元。
单片机地址总线的高位与6264的片选信号CE相连,用于选择6264并使其工作。
表5-4给出了确定6264地址范围的方法,由该表可知,图5-4中的6264芯片有4组不同但作用等价的地址,其原因是:在6264扩展时,未用到的A14~A13引脚共有4个可能的电平状态组合,每个组合对应于一组芯片地址,在实际应用中,通常将未用的地址线引脚设置为高电平1,这是因为,在扩展多个存储器芯片或I/O接口芯片时,未与6264片内地址线相连的单片机地址线可能被连接到其他芯片的片选引脚,而多数芯片的片选信号是低电平有效的,因此为了保证在进行6264读写操作时不误读写其他扩展芯片,应当将未用到的地址线设置为高电平“1”,这是存储器和I/O接口扩展时应遵循的基本原则之一。
2、多片数据存储器的连接与访问
将通过例子说明单片机同时扩展多个数据存储器的方法。
【例1】基于“线选法”的多片存储器扩展,已知:图5-6所示单片机系统扩展了两片6264,要求:
1)分别确定1号和2号6264芯片的地址范围。
2)编写程序,从1号和2号6264芯片片内地址A12~A0为1111100000010B的存储单元中各取一个字节,并分别存入单片机片内RAM地址为50H和51H的单元中。
图5-6基于“线选法”的多片存储器扩展电路原理图
分析:在本例中两个6264芯片需要不同的片选信号,当A14为低电平“0”时选中1号6264,而A15为低电平“0”时则选中2号6264,这种用单片机的高位地址线作片选信号的存储器扩展方法被称为“线选法”,需要特别注意的是,因为1号和2号6264芯片共用单片机的低13位地址线(A12~A0)和8位数据线(D7~D0),所以单片机地址线A14和A15不能同时为低电平,否则当对其中一片6264进行读写操作时会误操作另一片6264。
解:
1)1号和2号6264的地址范围见表5-5,需要注意的是,1号和2号6264的片选信号不能同时为0;未用到单片机地址信号P2.5引脚状态不影响对两片6264存储器芯片的访问,通常将其设置为高电平。
2)1号和2号6264芯片片内地址A12~A0为1111100000010B的存储单元的指令访问地址分别为1011111100000010B=0BF02H和0111111100000010B=7F02H,其中高3位地址分别对应于A15和A14,以及未用到的地址信号A13(此处设置为高电平1)。
程序如下:
#include <reg52.h> #define uint unsigned int #define uchar unsigned char void main(void) { uchar data_1, data_2; data_1 = XBYTE[0xBF02]; // 读取1号6264中的数据 data_2 = XBYTE[0x7F02]; // 读取2号6264中的数据 // 将读取到的数据存入片内RAM XBYTE[0x50] = data_1; XBYTE[0x51] = data_2; }
相关问题与解答
问题1: 如何确保在扩展多个存储器芯片时,不会发生误读写操作?
答: 确保在扩展多个存储器芯片时,不会发生误读写操作的方法包括以下几点:
1) 使用不同的片选信号来区分不同的存储器芯片,可以使用单片机的高位地址线作为片选信号,这样每个存储器芯片都有唯一的片选信号组合。
2) 避免地址冲突:在设计电路时,要确保不同存储器芯片的地址范围没有重叠,这可以通过合理设置片选信号和地址线来实现。
3) 使用译码器:对于复杂的系统,可以使用译码器来生成更多的片选信号,从而支持更多的存储器芯片。
4) 注意未使用的地址线:在扩展多个存储器芯片时,未使用的地址线应设置为高电平,以防止意外选中其他芯片。
5) 编程时小心:在编写访问存储器的程序时,要确保只访问目标存储器芯片的地址范围,避免误操作其他芯片。
问题2: 为什么在扩展多个存储器芯片时,未用到的地址线通常设置为高电平?
答: 在扩展多个存储器芯片时,未用到的地址线通常设置为高电平的原因是为了确保存储器访问的正确性和避免误操作,具体原因如下:
1) 防止误选:如果未用到的地址线悬空或设置为低电平,可能会导致意外选中其他存储器芯片,从而导致数据错误或系统故障。
2) 确保唯一性:通过将未用到的地址线设置为高电平,可以确保每个存储器芯片都有唯一的地址范围,从而避免地址冲突。
3) 简化设计:将未用到的地址线设置为高电平可以简化电路设计和编程逻辑,使得系统更加稳定可靠。
4) 符合标准:这是一种常见的设计实践,符合大多数微控制器和存储器扩展的标准做法。
小伙伴们,上文介绍了“访问片外数据存储器时”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/641203.html