第三节 I/O口
MCS-51共有四个8位的I/O口,分别记作P0、P1、P2、P3。每个口都包含一个锁
存器、一个输出驱动器和输入缓冲器。实际上,它们已被归入特殊功能寄存器之列,并且具有字节寻址和位寻址功能。
在访问片外扩展存储器时,低8位地址和数据由P0分时传送,高8位地址由P2口传送。在无片外扩展存储器的系统中,这四个口的每一位均可作为双向的I/O端口使用。
MCS-51单片机的P1、P2、P3口内部有拉高电平,称为准双向口,可以驱动四个LSTTL负载。P0口是开漏输出的,内部没有拉高电路,是三态双向I/O口,可以驱动八个LSTTL负载。这些口在结构和特性上基本相同,但又各具特点。
一、P0口
P0口的口线逻辑电路如图27所示。电路中包含一个数据输出锁存器、两个三态数据输入缓冲器、一个数据输出的驱动电路和一个输出控制电路。当对P0口进行写操作时,由锁存器和驱动电路构成数据输出通路。由于通路中已有输入锁存器,因此数据输出时可以与外设直接连
图2-7 P0口位结构
接,而不需再加数据锁存电路。
P0口既可以作为通用的I/O口进行数据输入/输出,也可以作为单片机系统的地址/数据线使用,为此在P0口的电路中有一个多路转接电路MUX。在控制信号的作用下,多路转接电路可以分别接通锁存器输出或地址/数据线。当作为通用的I/O口使用时,内部的控制信号为低电平,封锁与门,将输出电路的上拉场效应管截止,同时使多路转接电路MUX接通锁存器Q端的输出通路。
当P0口作为输出口使用时,内部的写脉冲加在D触发器的CLK端,数据写入锁存器,并向端口输出。
当P0口作为输入口使用时,应区分读引脚和读端口两种情况,为此,在端口电路中有两个用于读入驱动的三态缓冲器。所谓读引脚即读芯片引脚的数据,这时使用下方的数据缓冲器,由“读引脚”信号把缓冲器打开,把端口引脚上的数据从缓冲器通过内部总线读进来。使用传送指令(MOV)进行读端口操作都是属于这种情况。
读端口是指通过上面的缓冲器读锁存器Q端的状态。在端口已处于输出状态的情况下,Q端与引脚信号是一致的,这样安排的目的是为了适应对端口进行“读—修改—写”操作指令的需要。例如,“ANL P0,A”就是属于这类指令,执行时先读入P0口锁存器中的数据,然后与A的内容进行逻辑与,再把结果送回P0口。对于这类“读—修改—写”指令,不直接读引脚而读锁存器是为了避免可能出现的错误。因为在端口已处于输出状态的情况下,如果端口的负载恰是一个晶体管的基极,导通了的PN结会把端口引脚的高电平拉低,这样直接读引脚就会把本来的“1”误读为“0”;但若从锁存器Q端读,就能避免这样的错误,得到正确的数据。
需要注意的是,当P0口进行一般的I/O输出时,由于输出电路是漏极开路电路,因此必须外接上拉电阻才能有高电平输出;当P0口进行一般的I/O输入时,必须先向电路中的锁存器写入“1”使场效应管截止,以避免锁存器为“0”状态时对引脚读入的封锁。
在实际应用中,P0口绝大多数情况下都是作为单片机系统的地址/数据线使用,这要比一般I/O口应用简单。当输出地址或数据时,由内部发出控制信号,打开上面的与门,并使多路转接电路MUX处于内部地址/数据线与驱动场效应管栅极反向接通状态,这时输出驱动电路由于上、下两个场效应管处于反相,形成推拉式电路结构,使负载能力大为提高。当输入数据时,数据信号直接从引脚通过输入缓冲器进入内部总线。
二、P1口
P1口的口线逻辑电路如图2-8所示。因为P1口通常是作为通用I/O口使用的,所以在电路结构上与P0口有一些不同之处:首先它不再需要多路转接电路MUX;其次是电路的内部有上拉电阻,与场效应管共同组成输出驱动电路。因此,P1口作为输出口使用时,已经能向外提供推拉电流负载,无需再外接上拉电阻。当P1口作为输入口使用时,同样也需先使驱动电路场效应管截止。
三、P2口
P2口的口线逻辑电路如图29所示。P2口电路比P1口电路多了一个多路转接电路MUX,这又正好与P0口一样。P2口可以作为通用I/O口使用,这时多路转接电路开关倒向锁存器Q端。通常情况下,P2口是作为高位地址线使用,此时多路转接电路开关应倒向相反方向。
图2-8 P1口位结构
图2-9 P2口位结构
四、P3口
P3口的口线逻辑电路如图2-10所示。P3口为多功能口,其特点在于适应引脚信号第二功能的需要,增强了第二功能控制逻辑。由于第二功能信号有输入和输出两类,因此分两种情况说明。对于第二功能为输出的信号引脚,当作为I/O使用时,第二功能信号引脚应保持高电平,与非门开通,以维持从锁存器到输出端数据输出通路的畅通。输出第二功能信号时,该位的锁存器应置“1”,使与非门对第二功能
图2-10 P3口位结构
信号的输出是畅通的,从而实现第二功能信号的输出。
对于第二功能为输入的信号引脚,在口线的输入通路上增加了一个缓冲器,输入的第二功能信号就从这个缓冲器的输出端取得。而作为I/O使用的数据输入,仍取自三态缓冲器的输出端。不管是作为输入口使用还是第二功能信号输入,输出电路中的锁存器输出和第二功能输出信号线都应该保持高电平。
P3口的第二功能输入/输出定义如表2-7所示。
表2-7
P3口第二功能定义