gbchang 发表于 2020-7-30 14:48 太感谢了。 |
至于内部的锁存器,我画了个P0口的工作状态图:![]() |
至于内部锁存器,是在做总线时,数据读入用的,就是从2732中取指令或者常量表时,得到的数据。 我把P0口的几种状态画了个示意图: ![]() |
3楼和9楼答非所问,虽然内容是对的,但不是楼主想问的,使他更加疑惑了。 11楼说的对,所以我当初画51电路图时,P0口的网络标号都是类似"AD0~AD7"形式,时刻提醒这是复用总线: ![]() |
看不明白就不看了,这是上古时期用的电路,现在不会用这个了,换一个IO更多的单片机几乎是没有增加MCU方面的价钱的,74LS373却要两块一个,而且电路和程序变得更麻烦了如果你一定要学会这个,那就再回去看一下8051入门的硬件知识,好像在STC的数据手册中已经没有介绍了![]() |
地址和数据复用,不外接锁存器,如何区别是地址还是还是数据呢? |
外扩存储器时,外扩存储器的低八位地址是从P0口输出的,同时数据也必须从P0口输出,这两种输出显然是必须分开的,也就是一个端口分时轮流输出地址或者数据信号,而外扩存储器的地址和数据总线是分开的,所以必须有一个中间器件过渡,将这两种信号给分开,这就是锁存器的用处。 如果你能找到一种低八位地址和数据总线复用的存储器,也就不需要外接锁存器了,但显然你是找不到的,所以外接的锁存器就成了外扩存储器(当然指的是这种存储器而不是24C02之类)必不可少的搭档 |
是哦,楼上说的对,我咋没注意到,这个用373的主要原因是因为地址总线和数据总线都使用了单片机的P0口,所以,在先写地址,再写数据的情况下,要在写地址后将地址锁存,然后再写数据。这样IO口就达到了复用的目的,节省了一半的IO口。 |
STC15W408AS 发表于 2020-7-29 23:09 直接用MCU的io口最大支持20mA电流,用373则没有限制,电流取决于VCC的输出能力。 |
外扩存储器时,P0口是要工作在总线状态的,存储器地址的低8位信息必须要用额外的锁存器才能在读写时保持,因为地址总线低8位和数据总线复用了,这是51机的设计。 |
参与人数 1 | 黑币 +5 | 收起 理由 |
---|---|---|
![]() | + 5 | 很给力! |
breakhero 发表于 2020-7-29 23:09 意思内部锁存器实现一种端口功能,然后外部的锁存器同时实现另一种端口功能? |
1692483014 发表于 2020-7-29 22:30 想不通。提高驱动能力,难道这个锁存器芯片可以提升总线上的电流? |
就像你引用的图片里所示,地址和数据复用的端口,如果不使用锁存器锁定地址是无法正常读写存储器的,这里加的锁存器就是要把复用状态分离开来,等于把端口数量扩展。内部的锁存器无法实现这个。 |
圆就是圈圈 发表于 2020-7-29 22:19 内部不是已经有锁存器了吗? |
两个作用:隔离 和 提高驱动能力。 |
我觉得是因为P0口不仅可以做数据总线还可以做地址总线,外加所存器保证地址和数据不互相干扰 |