2.1.10 AT89S51/AT89S52单片机的并行I/O口
单片机内部有P0~P3口共4个8位双向I/O口,外设可直接连接到这几条口线上,而无须另加接口芯片,P0~P3口的每个端口可以按字节输入/输出,也可以按位进行输入/输出,共32条口线,作为位控制十分方便。P0口为三态双向口,负载能力8个TTL电路。P1、P2、P3口为准双向口,负载能力为4个TTL电路,如果外设需要的驱动电流大,可加接驱动器。
AT89S51/AT89S52单片机共有4个8位的并行I/O口,分别为P0、P1、P2和P3口。这4个I/O口在单片机的使用中拥有非常重要的地位。可以说,对单片机的使用就是对其I/O口的使用。
单片机的4个I/O口既有字节地址又有位地址,所以它们可以按字节输入/输出数据,也可以按位输入/输出数据。
1.P0口的内部结构及功能
P0口的内部结构如图2.13所示,它由一个输出锁存器、两个三态输入缓冲器、一个转换开关MUX及控制电路和驱动电路组成。
图2.13 P0口的内部结构
单片机的P0口既可以作为通用I/O口使用,也可以作为地址/数据复用总线使用。单片机内部通过控制信号C来确定其工作状态,如图2.13所示。当C=0时,转换开关MUX处于图2.13中虚线所示位置,即P0口作为通用I/O口使用;当C=1时,转换开关MUX拨向反相器输出端位置,即P0口作为地址/数据复用总线使用。
1)P0口作为通用I/O口使用
P0口作为通用I/O口使用时,单片机硬件自动使控制信号C=0,转换开关MUX接锁存器反相输出端。由于C=0,因此与场效应管T1连接的与门输出为0,即场效应管T1截止。
(1)P0口作为通用输入口使用。
当P0口作为通用输入口使用时,数据可以来自锁存器,即读锁存器,也可以来自引脚,即读引脚,如图2.13所示。
所谓读锁存器,就是指通过三态输入缓冲器1读锁存器Q端的状态。
所谓读引脚,就是指由读引脚信号将三态输入缓冲器2打开,引脚上的数据经三态输入缓冲器进入内部数据总线。
(2)P0口作为通用输出口使用。
当P0口作为通用输出口使用时,CPU执行输出指令,内部数据总线上的数据在写锁存器信号的作用下进入锁存器,经锁存器端反相,再经场效应管T2反相,在P0引脚出现的数据正好是内部数据总线的数据。但必须注意,此时场效应管T1处于截止状态,当输出数据时,必须外接上拉电阻才能有高电平输出。
2)P0口作为地址/数据复用总线使用
P0口除了作为通用I/O口使用外,当单片机系统需要扩展片外存储器或其他I/O口芯片时,P0口也作为地址/数据(低8位地址)复用总线使用,单片机硬件自动使控制信号C=1,转换开关MUX连接反相器的输出端。
CPU在执行输出指令时,低8位地址信息和数据信息分时出现在地址/数据复用总线上。若地址/数据复用总线的状态为1,则与门输出为1,场效应管T1导通、T2截止,引脚输出为1;若地址/数据复用总线的状态为0,则与门输出为0,场效应管T1截止、T2导通,引脚输出为0。可见引脚输出的信息正好与地址/数据复用总线的信息相同。
CPU在执行输入指令时,首先低8位地址信息出现在地址/数据复用总线上,引脚的状态与地址/数据复用总线的地址信息相同。然后CPU自动转换开关MUX拨向锁存器,并向P0口写入0FFH,同时读引脚信号有效,数据经三态输入缓冲器2进入内部数据总线。
由此可见,P0口作为地址/数据复用总线使用时是一个真正的双向接口。
2.P1口的内部结构及功能
P1口的内部结构如图2.14所示。由于P1口仅作为通用I/O口使用,因此在内部结构上最为简单。它由一个输出锁存器、两个三态输入缓冲器和驱动电路组成。
当P1口作为通用输出口使用时,由于内部有上拉电阻,上拉电阻与场效应管共同组成输出驱动电路,已经能向外提供推挽电流负载,无须再外接上拉电阻。
当P1口作为通用输入口使用时,与P0口一样,也要先向其锁存器写入1,目的是使场效应管T截止。所以,P1口在作为通用I/O口时,属于准双向接口。
3.P2口的内部结构及功能
P2口的内部结构如图2.15所示,它由一个输出锁存器、两个三态输入缓冲器、一个转换开关MUX及一个反相器和驱动电路组成。
图2.14 P1口的内部结构
图2.15 P2口的内部结构
P2口即可以作为通用I/O口使用,也可以作为地址(高8位地址)总线使用。单片机内部通过控制信号C来确定其工作状态,如图2.15所示,当C=0时,转换开关MUX处于图2.15中虚线所示位置,即P2口作为通用I/O口使用;当C=1时,转换开关MUX拨向反相器输出端位置,即P2口作为地址总线使用。
1)P2口作为通用I/O口使用
当P2口作为输出口使用(C=0)时,与P1口一样,内部有上拉电阻,所以无须再外接上拉电阻。
当P2口作为输入口使用时,与P0、P1口一样,也要先向其锁存器写入1,目的是使场效应管T截止。所以,P2口在作为通用I/O口时,属于准双向接口。
2)P2口作为地址总线使用
P2口除了作为通用I/O口使用外,当单片机系统需要扩展片外存储器或其他I/O口芯片时,P2口也作为地址(高8位地址)总线使用,单片机硬件自动使控制信号C=1,转换开关MUX连接地址端,与P0口作为地址总线使用时相同,引脚输出的信息与地址总线的信息相同。
4.P3口的内部结构及功能
P3口的内部结构图如图2.16所示,它由一个输出锁存器、三个三态输入缓冲器、一个与非门和驱动电路组成。由于P3口有第二功能,因此在结构上与其他三个I/O口都不尽相同。
P3口与其他三个I/O口一样,既可以作为通用I/O口使用,又具有第二功能。
图2.16 P3口的内部结构
1)P3口作为通用I/O口使用
当P3口作为通用输入口使用时,与其他接口一样,也要先向其锁存器写入1。此时W信号自动为高电平1,从锁存器Q端输出的高电平信号经与非门输出,使场效应管T截止。P3口引脚的数据取决于外部信号。这时单片机内部产生读引脚信号,使三态输入缓冲器2打开,引脚上的数据经过三态输入缓冲器3(常开)、三态输入缓冲器2进入内部数据总线。
当P3口作为通用输出口使用时,与P1、P2口一样,内部有上拉电阻,所以无须再外接上拉电阻。此时,W信号自动为高电平1,为锁存器Q端数据输出打开与非门,输出数据经场效应管T从P3引脚输出。
2)P3口作为第二功能使用
当P3口使用第二功能时,8个引脚有不同的定义。
当P3口的某一位用作第二功能输出时,该位的锁存器输出端被单片机硬件自动置位,使与非门对第二功能信号的输出是打开的,从而实现第二功能信号的输出,由表2.3可知,第二功能输出的有TXD、和
。
当P3口的某一位用作第二功能输入时,该位的锁存器输出端被单片机硬件自动置位,并且W信号在接口不作为第二功能输出时保持为1,此时与非门输出为低电平,场效应管T截止,该位引脚为高阻输入。此时端口不作为通用I/O口使用,因此该引脚信号无效,三态输入缓冲器2不导通。这样从引脚输入的第二功能信号经第二功能输入三态输入缓冲器3直接送给CPU处理。
P3口为双功能口。当P3口作为第一功能使用时,其功能与P1口的相同。当P3口作为第二功能使用时,每位功能定义如表2.3所示。
表2.3 P3口的第二功能