您的位置  > 互联网

如何使用373来做到拓展地址总线的作用?

你需要了解的几个知识点地址和数据

地址:单片机中数据的存储单元。 这些单位都有自己的名称。 这个名字就是地址。 该地址由一系列二进制代码表示。 也就是说,如果知道这串地址,就可以找到这个地址单元对应的存储空间中存储的数据。 数据是指每个存储单元中存储的二进制值。

什么是巴士

简单地说,公交车就是一条线路或一组线路。 这些线路在不同的时间会出现不同的状态来传递信息。 需要注意的是,有时不同的设备会挂载在同一组总线上。 如果它们不同时,要接受信息,必须启用其中一台设备并禁用其余设备。 这就像在楼下喊,每个人都能听到,但如果你只想一个人听到,就把其他人的窗户都关上,然后打开那个人的窗户。

知道了数据、地址和总线之后,就有了地址总线和数据总线:如果单片机想要读取一些外部数据,就需要输出地址并读回数据。 这就需要地址总线输出地址,数据总线读回数据。 如果总线上经常挂载多个外设,则需要片选要操作的外设。 提供片选信号的总线有的地方称为控制总线。

定时

当微控制器提供地址并读回数据时,需要与存储芯片进行协调。 否则,芯片会在地址建立之前开始取数据,单片机也会在数据建立之前开始读取数据。 为此,给出了一个标准,就是单片机的时序,基于这个时序,就可以设计外设与单片机之间的接口。 如果你想学习读单片机的时序,可以在csdn上搜索相关博客。

373芯片

373可以认为是由一组D触发器组成的器件。 除了使能端子外,它还具有一组 (8) 个数据输入和一个锁存信号输入。 输出端子为一组(8个输出)。 它实现的功能也非常简单。 当锁存信号为高电平时,其输出随着输入的变化而变化,当锁存信号为低电平时,其输出不变化,保持不变。 换句话说,锁存信号变为低电平那一刻的输出不会改变,直到下一个高电平锁存信号到来为止。

138解码器

网上资料很多,基本每本数码电子教材都有介绍。

想法简介

知道读取数据需要地址,并以地址总线为载体输出地址,那么对于地址总线位数有限(n位)的单片机来说,只能访问$2^ n$个数据单元。如果想访问更多,就得尽力扩展这些数据总线。 在讲这部分的时候,我们没有考虑单片机与外部存储设备之间的控制总线连接,也没有考虑外部存储设备与373共享总线的问题。

方法:

1.引入新的地址位以使用其他资源进行寻址

2、使用373等时序电路来扩展地址总线

第一种方法

通过引入新的地址位来扩展此方法是很常见的。 只需要从单片机的IO资源引出一条线到外设地址线即可。 这样,原来的地址总线(n位)加上后来引入的(k位),地址空间总共就有$2^{k+n}$,从而实现了数据的扩展。 这种方法受单片机IO资源量的控制,即K有上限,它能扩展的数据位数也是有限的。

第二种方法

前面提到,单片机的数据写入操作可以分为以下两个过程: 1、通过地址总线发送地址(n 位) 2、通过数据总线发送数据(d 位)

然后我们将这个过程复杂化来实现扩展(实际上是将两个循环合并为一个循环)

1'。 通过地址总线发送片选信号选择373(即使373芯片已使能)

2'。 数据总线上的数据被锁存在373的输出端。需要注意的是,这里输出的数据实际上是我们想要的实际地址的高位。

3'。 通过地址总线发送实际地址的低n-1位,这样我们就可以将地址空间扩展到n+7位

4'。 这时,从地址总线上读回真正的数据。

这样,根据上面的思路,单片机的接线也需要进行专门的配置。 结合图像可以更好地理解我们复杂的流程图。

进一步的理解(想法2)使用138解码器进一步扩展。

刚才我们直接使用地址总线中的一个位作为373的片选信号,现在我们在地址总线和373的片选端添加一个组合逻辑电路,可以实现多个373的片选,进一步扩展外部空间。

让我们来看看。 如果使用其中一根地址总线进行扩展,则还剩下 (n-1) 个地址总线和新扩展的 8 个地址总线(373 有 8 位)。 这样,我们就有了 $2^{n+ 7}$ 个地址空间。 与最初的$2^n$相比,已经扩大了整整$2^7$倍。

而如果我们使用138解码器进行解码,会发生什么呢?

首先我们需要一个片选138的地址,然后需要3根地址线作为138的输入,这样就可以将138的8个输出作为8 373个芯片的片选信号。 由此,我们的地址总线就变成了$8-1-3+8*8$,一共68个,对应的地址空间为$2^{68}$。

支付的价格

上述地址空间的扩展非常诱人,但也付出了巨大的代价,无论芯片成本和系统稳定性如何。 单片机读取一次数据所需的时间也呈指数增长。

如果我们原本读取一次数据,需要一秒(实际上远没有那么长)。 这个过程包括发送地址、等待存储芯片响应、读回数据。

现在如果我们读回一条数据怎么办? 我们从流程来看。 68线和地址线都需要赋值。 即需要给全部8 373 赋值。 这本身需要 8 个周期,加上最后一次真正的读操作。 此扩展将读取操作的时间延长了 9 倍。 所以这本质上是以牺牲时间为代价来扩大存储空间的。 因此,这种方法可能更适合需要大量数据且读写不频繁的情况,或者这种方法可能根本没人用/搞笑。

关于控制总线

在讲基本思想的时候,我们提到373和外部存储芯片共用控制总线和数据总线,不存在问题。 这是因为控制总线对于不同的微控制器有不同的接线方法。 需要研究单片机读写外部数据的时序图来设计接线方法。 网上有很多教程,你可以搜索一下看看。 建议不要使用它们。 这部分我们先用51单片机开始,因为51单片机使用的地址和数据的复用比较复杂。

外部存储芯片共享数据总线的问题就更简单了,只要在选择373(138)时不选择存储芯片即可。 只是在选择存储芯片时不要选择373(138)。回想一下我之前提到的,地址总线用作373(138)的片选信号。 这个问题可以通过将片选信号反相然后连接到存储芯片的使能端来解决。

一些细节

在这些介绍中,我默认数据输出是8位,与373的数字完全相同,但实际上可能有16位或32位。 在这种情况下,可以使用两个或四个373来连接数据端口。 只要一到四个373使用同一个片选信号就可以了。

总结现实意义

单纯扩大存储空间并没有多大意义,但实际上,当使用单片机控制外设时,外设可以作为存储芯片使用。 对于单片机来说,它并不知道外面连接的是什么,它只是根据程序和预定的时序在不同的线上输出高低电平,我们就可以按照自己的意愿接线,用原来的时序进行读取和读取。写入外部数据来控制外设。

其实,当用有限的IO口控制较多的外设时,上面的内容并没有多大用处,因为目前的外设基本都是采用串口通信来解决上述问题。

总线结构,不同的外设挂载在同一条总线上是很常见的,相当于很多人共用一个书房。 总线上广播一组数据,每个人都可以听到。 如果它不影响其他人,它只对一个人说话。 然后就要求其他人捂住耳朵。 只有被指出的人才能听到。 并且由于它捂住耳朵,无法通过广播获得这个片选信号。 唯一的办法就是通过其他方式打开它的耳朵,那就是我们。 所谓专用片选信号。 特别要注意的是,如果两个芯片的输出相连,很容易烧毁芯片。

通信系统中有很多共享通道的例子有助于理解。 了解他们是非常有趣的。