- 单片机原理与应用:基于AT89S51+Proteus仿真
- 胡凤忠等主编
- 2410字
- 2025-02-19 23:06:59
2.5 并行I/O口结构
AT89S51/52单片机具有4个8位并行I/O端口(接口电路中的数据寄存器),分别记作P0、P1、P2、P3,共32位I/O口线。每一位I/O口线都能独立用作输入或输出,具有字节寻址和位寻址功能。这4个端口是单片机与外围设备进行信息(数据、地址、控制信号)交换的通道,在数据传输过程中,是通过对端口的访问来进行读写操作的。
2.5.1 P0口
在4个并行口中,P0口的接口电路最为复杂。在扩展外部总线时,P0口分时用作低8位地址线和8位数据线,P0口先输出片外存储器的低8位地址并锁存到地址锁存器中,然后再输出或输入数据;在单片机最小系统(不扩展外部总线的应用系统)中,P0口可以用作通用输入/输出口使用。
P0口各位的逻辑结构如图2-7所示,8个D触发器构成了P0口锁存器(即特殊功能寄存器P0),字节地址为80H。接口电路由一个数据输出锁存器、两个三态数据输入缓冲器、数据输出驱动电路和输出控制电路构成。
1.P0口用作低8位地址/8位数据总线使用
在扩展外部总线系统中,P0口是作为单片机外部系统总线的低8位地址/8位数据分时复用口使用,此时是真正的双向口。
当由P0口输出地址或数据时,由CPU内部发出控制信号“1”打开上面的与门,并使多路转接电路MUX处于内部地址/数据总线与驱动电路场效应晶体管T2栅极反相接通状态。输出驱动电路T1与T2处于反相,形成推拉式电路结构,使负载能力大为提高。
当由P0口输入数据时,数据信号则直接从引脚通过输入缓冲器进入内部总线。
图2-7 P0口每位结构图
二维码2-1
2.P0口用作通用I/O口使用
在单片机最小系统中(不扩展外部系统总线),P0口为通用I/O口,此时CPU内部发出控制信号“0”封锁与门,使输出场效应晶体管T1截止,同时多路开关MUX将输出锁存器端与输出场效应晶体管T2的栅极接通。
当从P0口输出时,内部的写脉冲加在D触发器的CL端,数据写入锁存器,并向端口引脚输出,由锁存器和驱动电路构成数据输出通路。由于通路中已有输出锁存器,因此数据输出时可以与外设直接连接,而不需要再加数据锁存电路。
当从P0口输入时,分为读引脚和读端口两种情况,为此在接口电路中有两个用于读入的三态缓冲器。读引脚就是读芯片引脚的数据,由“读引脚”信号把下方的数据缓冲器打开,把端口引脚上的数据经缓冲器读入内部总线。读端口则是读锁存器Q端的状态,这样设计的目的是为了适应“读-修改-写”指令的需要,本来Q端与引脚的信号是一致的,不直接读引脚而读锁存器是为了避免可能出现的错误。
需要注意的是,当读引脚时,必须先向电路中对应的锁存器写入“1”,使T2截止,以避免锁存器为“0”状态时对引脚读入的错误,因为如果T2导通,引脚钳位为低电平,读入总是0。此外,当P0口作为通用I/O口使用时,由于输出电路是漏极开路电路,需外接上拉电阻,因此有时也称为准双向口。
2.5.2 P1口
P1口为准双向I/O口,其每位的结构如图2-8所示,由锁存器、输出驱动电路和输入缓冲器组成,P1口引脚内接有上拉电阻。P1口由8个这样的电路组成,其中8个D触发器构成了P1口锁存器(即特殊功能寄存器P1),字节地址为90H。
当Pl口作为输出口使用时,将数据写入P1口某一位的锁存器,并向端口引脚输出。如输出“1”,Q=1,T截止,引脚上拉为1;如输出“0”,Q=0,T饱和导通,引脚为“0”。
当P1口用作输入口使用时,同样也有读引脚和读锁存器两种情况。对于“读-修改-写”指令,是先读锁存器,再修改锁存器,之后输出;对于读引脚指令,同样需要保证其锁存器锁存“1”,使输出驱动电路的场效应晶体管T截止,以免引脚电平读入的错误。
图2-8 P1口每位结构图
二维码2-2
P1口除了可以作为通用I/O口使用外,其P1.0、P1.1引脚还可以作为定时/计数器T2(AT89S52)的控制引脚,P1.5、P1.6、P1.7还可以用于在系统编程ISP。
2.5.3 P2口
P2口每位的结构如图2-9所示,由锁存器、多路开关、逻辑门、输出驱动电路和输入缓冲器组成。8个D触发器构成了P2口锁存器(即特殊功能寄存器P2),字节地址为A0H。
图2-9 P2口每位结构图
二维码2-3
在不扩展外部系统总线时,P2口可以作为通用I/O口使用,此时多路开关MUX自动和Q端接通,既可以做输入,也可以做输出。做输出时无须外接上拉电阻,做输入时,同样需要保证锁存值为1(使T截止)。
在扩展外部系统总线时,P2口输出高8位地址总线,与P0口低8位地址线一起构成16位地址总线。此时MUX在CPU的控制下转向内部地址线的一端,引脚输出地址信号。
2.5.4 P3口
P3口每位的结构如图2-10所示,与P1口结构相比多了一个与非门和一个三态缓冲器。与非门的作用相当于一个转换开关,实现第二输出功能;三态缓冲器的作用是实现第二输入功能。8个D触发器构成了P3口锁存器(即特殊功能寄存器P3),字节地址为B0H。
图2-10 P3口每位结构图
二维码2-4
当作为通用I/O口输出使用时,第二输出功能端保持高电平,与非门打开,锁存器输出通过与非门和场效应晶体管T输出到引脚。做输入时也需要向对应的锁存器写入1,当CPU执行读引脚指令时,第二输入功能自动关闭,读引脚信号有效,引脚信号读入CPU。
当端口用于第二输出功能时,锁存器输出Q为1,打开与非门,第二输出功能端信号通过与非门和场效应晶体管T送至端口引脚,从而实现第二功能信号输出;第二输入功能时,端口引脚的第二功能信号通过缓冲器送到第二输入功能端。
综上所述,P0~P3口都可作为准双向通用I/O口使用,其中P1~P3无须外接上拉电阻,P0口需外接上拉电阻;在需要扩展外部系统总线时,P0口作为8位数据总线和低8位地址总线的分时复用口,P2口作为高8位地址总线。
下面通过几张图来看一下并行I/O口的使用。图2-11中,K1~K4这4个按键分别通过P0.0~P0.3接入单片机,P0.0~P0.3做通用输入口使用,P0口应外接上拉电阻;D1~D3这4个LED分别接入P2.4~P2.7,这里P2.4~P2.7做通用输出口使用,无须外接上拉电阻。图2-12中,按钮BUT通过P3.2接入单片机,P3.2做通用输入口;LED1和LED2两个输出显示设备分别使用P0口和P2口,P0和P2都做通用输出口,但P0口需要外接上拉电阻RP1。图2-13是外部扩展存储器,此时P0和P2是外部总线,不是普通I/O口。
图2-11 按键、LED设备的连接
图2-12 按键、数码管设备的连接
图2-13 扩展外部存储芯片的连接