利用译码器进行地址扩展【微机原理】

发布于:2025-03-14 ⋅ 阅读:(27) ⋅ 点赞:(0)

终于搞明白了,李某某讲的真是一坨!

例一: 采用8位的Z80CPU微机控制系统,按控制要求扩展一个并行接口芯片PI0一个计数器/定时器CTC一个8位的A/D转换器ADC0808一个8位的D/A转换器DACO832。指定它们的地址分别是40H~43H、44H~47H、58H和5CH。

一个并行接口芯片PI0:

40H 和 43H的二进制是多少:

两端极值取决于最后的A0 和 A1的取值 ,极大和最小分别是 00 和 11  :

这个芯片若想工作,则输入给其CE(取反)的信号必须是低电平,也就是Y0(取反)引脚必须输出低电平,那么另外三个一定是高电平,这样输出确定,输入A B C 也确定了 。

一个8位的A/D转换器ADC0808:

唯一不同的也是A0 和 A1 , 两端极值取决于最后的A0 和 A1的取值 ,极大和最小分别是 00 和 11  :

注意看,这个范围的话,两端极值取决于最后的A0 和 A1的取值 ,极大和最小分别是 00 和 11  这没话说,往前看,A7 A6 A5 A4 A3组成的0100组和,这个就是ABC的100:

也就是0000 0000 0100 0100是按照下图中编号的,下图中的号和下下图中的ABC 对应A2 A3 A4:

0100中的1对应A6,对应G1,看下下下图表格,ABC100的时候,G1是H :

试分析下图中8237A、8259A、8253,8255A的地址范围:

40H~43H 这个地址范围是十六进制(Hexadecimal)的,H 就是十六进制的标志。

具体解析:

  • 40H = 0x40 = 64(十进制)
  • 43H = 0x43 = 67(十进制)

地址范围 40H~43H 涵盖的大小是:

  • 40H43H,总共有 43H - 40H + 1 = 4 个地址空间。

对应的地址是:

  • 40H, 41H, 42H, 43H

这里有一张 十进制(Decimal)和 十六进制(Hexadecimal)的对应表格,范围是 0~20

十进制 (Decimal) 十六进制 (Hex)
0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9
10 A
11 B
12 C
13 D
14 E
15 F
16 10
17 11
18 12
19 13
20 14

A14  和  A15是无关项,组合出的4中组合会导致输出的地址有4中结局:

注意下面的译码器,输出的8个端口,只允许有一个是L,其他必须输出H:

例题:如何求取芯片1和3的地址范围:

G必须输入0(取反)输出1,译码器才可以开始工作。

要想芯片1和芯片3工作,片选CE(取反)必须输入信号0,极=即Y0输出0才可以。

芯片1的地址范围是A0到A12。

要想芯片2工作,则Y1(取反)必须输出低电平,则译码器的另外两个输出必须是两个高电平。

芯片2工作的话,A15也就是G(取反),A输入1 , B输入0 才行。

芯片2的地址范围:

片内驱两边,片外分情况考虑:

学习自:【多个存储器扩展地址计算及数据传输】https://www.bilibili.com/video/BV1AZ421E7Cz?vd_source=3cc3c07b09206097d0d8b0aefdf07958

74LS138的工作条件,G1必须是高,G2G3(取反了)必须是低,芯片才开始工作。

影响后面的是A B C的输入电平,G1G2G3一开始已经确定了。

得出的8中外部空间有规律的:第一个不同,后3位相同。

        Y0输出 001的话, ABC输入是确定的,都是001,区分高位地址和低位地址的是P2.4号引脚,也就是首个四位二进制中的最后一位不确定的位,有两种取值,属于无关项。

问题来了,为什么ABC一定是第一个4位二进制中的首位呢,无关项为什么不能是第一个: