频道栏目
读书频道 > 系统 > 其他综合 > 深入理解8051单片机系统
0.5 I/O地址解码与设计
2015-12-02 14:54:11     我来说两句
收藏   我要投稿

本文所属图书 > 深入理解8051单片机系统

本书详细介绍了8051单片机的各种功能。主要内容包括8051微控制器、8051汇编语言编程、跳转指令、循环指令、调用指令、I O端口编程、8051寻址方式、算术逻辑指令与程序、8051 C语音编程、8051硬件接线、8051定时  立即去当当网订购

图0-23 74LS373 D锁存本节使用TTL逻辑门74LS373和74LS244来展示简单I/O端口的设计。为了简单起见,我们使用逻辑门如AND 和反相器用作解码器。用于I/O指令的地址总线解码概念和存储器是一样的。步骤如下:

1.控制信号IOR和IOW 与解码器一起使用(在存储器映射I/O,使用了RD以及WR信号)。

2.解码地址总线。

使用74LS373进行输出端口设计

每台计算机中,不管CPU什么时候通过数据总线将数据送出,数据都必须锁存在接收器件中。存储器内部拥有锁存器锁住数据,而对简单的I/O端口,必须设计锁存器。74LS373能实现这项功能。注意,在图0-23中,为了让74LS373作为锁存器工作,OC引脚就必须接地。而对于输出锁存,经常将地址解码器的输出与控制信号IOW相与以完成锁存动作,如图0-24和图0-25所示。


 


 


 

使用74LS244进行输入端口设计

图0-26 74LS244八进制缓冲器类似地,当通过数据总线得到数据时,需要经过三态缓冲器。


 

如同存储器芯片一样,这样的一个三态缓冲器一般在内部,因此不可见。对于简单的输入端口,我们使用74LS244芯片,图0-26所示为74LS244的内部电路。注意,因为1G和2G分别只控制74LS244的4位,所以它们必须同时有效以激活8位输入。

图0-27所示为74LS244用做系统数据总线的输入端口。请注意图0-27和图0-28中的地址解码器和IOR控制信号是怎样一起激活三态输出的。

74LS244不仅充当缓冲器的角色,也提供充足的驱动能力以将输入的数据送到CPU。事实上,74LS244芯片广泛用于缓冲以及为单向总线提供高驱动能力。在双向总线中,可以使用74LS245。

例0-18和例0-19所示为连接到系统的I/O。

绝对与线性选择地址解码

在地址解码过程中,要么是所有地址线,要么是其中的一部分被解码。如果所有地址线都参与解码,则称为绝对解码(absolute decoding)。如果只是选择出来的一部分地址线参与解码就称为线性选择解码(linear select decoding)。线性解码器比较便宜,因为输入越少,用于解码的门则越少。缺点就是它会产生别名,因为相同的端口有多个地址。如果选择了线性解码,就必须在系统映射表(存储和I/O映射)中声明所有的设备地址。

图0-29所示为一个与例0-18中很相似的输出电路,但仅解码A0~A10。这输出电路有32个别名,包括029EH,069EH,…,FE9EH。显然,使用线性编码会让电路更简单,但会产生别名且浪费地址空间。


 

外设I/O 与存储器映射I/O

采用将存储器和I/O访问控制信号分开的方式与I/O进行通信称为外设I/O。一些设计者也将之称为外围I/O(peripheral I/O)。然而,在很多计算机和微控制器中,不区分I/O和存储器的控制信号,只是分配不重叠的I/O地址和存储器地址。在这些计算机中,访问I/O就像访问存储器一样。这种总线叫做存储器映射I/O(memory-mapped I/O)。图0-30所示为存储器映射I/O的简单系统。


 

例0-18使用74LS373为图0-17所示的系统提供输出端口,且分配地址029EH给该设备。

解:


 


例0-19使用74LS244将8个开关连接到系统总路线上,并且分配地址0401H给该输入设备。

解:


 

下面是外设I/O与带有16根地址线(A0~A15)的系统存储器映射I/O的区别:

1.在外设I/O中,特殊的I/O指令用于访问I/O设备。然而,在存储器映射I/O中,必须使用访问存储器位置的指令来访问I/O,而不是使用输入和输出指令。在这种方式中,存储器位置与I/O端口之间就没有区别。

2.在存储器映射I/O电路连接中,控制信号RD和WR既用于访问I/O又用于访问存储器装置。这与外设I/O不同,后者是使用IOR和IOW的。

3.存储器映射I/O的缺点主要是它使用的是存储器地址空间,这可能会导致存储器空间有存储空间碎片。

4.在存储器映射I/O中,整个地址必须被解码,否则I/O别名将覆盖存储器空间。这与外设I/O不同,后者可以使用线性编码。这让存储器映射I/O的解码电路更加昂贵。

例0-20和例0-21中将看到用于存储器映射I/O系统的输入和输出电路。

例0-20

使用74LS373,设计用于存储器映射I/O系统的输出端口,并分配地址029EH给该设备。

解:


 


例0-21使用74LS244将8位的开关连接到存储器映射I/O系统上,并分配地址0401H给设备。

解:


 

复习题

1.设计者使用(   )(锁存器、三态缓冲器)作为输出,使用(    )(锁存器、三态缓冲器)作为输入。

2.为什么在I/O设计中使用锁存器?

3.为将74LS373作为锁存器,OC就必须永远设置成(    )。

4.在存储器映射I/O中,哪个信号用于选择输出设备,哪个用于选择输入设备?

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:0.4.2 存储器地址解码
下一篇:0.6.1 CPU内部结构
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站