3.1 单片机数字输入/输出端口的概述
3.1.1 单片机数字输入/输出端口的作用
单片机的数字输入/输出端口(简称I/O口)主要有两个作用:一是进行开关量(即高电平或者低电平)的输入和输出;二是用作复用功能(如总线接口、串行通信接口等)。
当端口作一般I/O口使用并作为输入时,一般需外接上拉电阻。以P 0.0为例,接上拉电阻的电路连接如图3-1所示。典型的上拉电阻的阻值为5.1 kΩ或者10 kΩ。如果将某个I/O口线作为输出,尽量采用灌电流方式,而不要采用拉电流方式,这样可以提高系统的负载能力和可靠性。以P 0.0控制发光二极管电路为例说明,电路连接如图3-2所示。
图3-1 上拉电阻连接方法
图3-2 拉电流方式和灌电流方式
a)拉电流方式 b)灌电流方式
由于内部电路设计的原因,在I/O口输入之前需要首先输出高电平,然后再读入引脚的状态(具有这种特征的I/O口称为准双向口)。由于复位时,自动将I/O口的锁存器置位“1”,可以直接读入引脚的状态。
P0口用作数据总线或者地址总线低8位时,P0口是真正的双向口,不需要接上拉电阻。P0口用作I/O口时,是一个准双向口,此时应接上拉电阻。
由于STC8A8K64S4A12单片机集成了大量的I/O接口,可以在设计系统时将部分引脚固定用于开关量输入,部分引脚固定用于输出,不需要在输入和输出功能之间切换,不需要将I/O口设置为准双向口工作模式,也就不存在输入状态之前先输出高电平的问题。
当单片机用于并行总线扩展方式(例如扩展RAM)时,用于总线的P0口和P2口以及用于控制总线的口线不能再用作I/O功能。这是因为,P0口已当作地址/数据总线口使用时,由于访问外部存储器的操作不断,P0口不断出现低8位地址或者数据,故此时P0口不能再作通用I/O口使用。同样,P2口已当作地址总线口使用时,由于访问外部存储器的操作不断,P2口不断送出高8位地址,故此时P2口不能再作通用I/O口使用。总线方式下,即使没有用完的P2口线或者P0口线也不能用于I/O功能。
3.1.2 带有总线扩展的单片机系统典型构成
组成单片机应用系统时,有以下两种方式。
一是不带总线扩展构成方式。这种情况就是单片机的P0口、P2口不用于总线方式,也不需要控制总线接口。所有的端口都可以用于普通I/O功能或者其他非并行总线功能(例如异步串行通信、SPI、I2C等)。
二是带总线扩展构成方式。如果存储器容量不够,或者需要扩展并行I/O(例如使用并行LCD时),则可以使用端口进行总线方式的系统扩展。一个带有存储器(或者并行I/O)扩展的单片机应用系统的连接示意图如图3-3所示。
图3-3 带有存储器(或者并行I/O)扩展的单片机应用系统连接示意图
由图3-3中可以看出,单片机应用于总线扩展方式时,8位的数据总线由P0口提供,16位的地址总线由P2口和P0口构成。其中,P0口通过地址锁存器输出地址总线的低8位,地址总线的高8位由P2口提供。通常用作地址锁存器的芯片有74LS373、74LS573等。和引脚的作用分别是提供写控制信号和读控制信号。ALE信号用于锁存器的锁存控制,以锁存由P 0口输出的地址。由地址总线的部分地址信号作为译码器的输入,常见的译码器有74LS138等。译码器的输出控制各个芯片或者并行I/O口的片选信号控制,只有为低电平的芯片才被选中,并和单片机进行信息交互。