P0口的字节地址为80H,位地址为80H~87H。 P0口的各位口线具有完全相同但又相互独立的逻辑电路,P0口某一位的位结构的电路原理图如图2.10所示。
P0口某一位的电路包括:
(1)一个数据输出锁存器,用于进行数据位的锁存。
(2)两个三态的数据输入缓冲器,分别用于锁存器数据和引脚数据的输入缓冲。
(3)一个多路的转接开关MUX,开关的一个输入来自锁存器,另一个输人为“地址/数据/'。输入转接由“控制”信号控制。之所以设置多路转接开关,是因为PO口既可以作为通用的I / O口,又可以作为单片机系统的地址/数据线使用。即在控制信号的作用下,由MUX实现锁存器输出和地址/数据线之间的接通转接。
(4)数据输出的驱动和控制电路,由两只场效应管(FET)组成,上面的那只场效应管构成上拉电路。
在实际应用中,P0口绝大部分多数情况下都是作为单片机系统的地址/数据线使用,当传送地址或数据时,CPU发出控制信号,打开上面的与门,使多路转接开关MUX打向上边,使内部地址/数据线与下面的场效应管反相接通状态。这时的输出驱动电路由于上下两个FET处于反相,形成推拉式电路结构,大大的提高了负载能力。而当输入数据时,数据信号则直接从引脚通过输入缓冲器进入内部总线。
P0口也可作为通用的I/O口使用。这时,CPU发来的控制信号为低电平,封锁了与门,并将输出驱动电路的上拉场效应管截止,而多路的转接开关MUX打向下边,与D锁存器的Q端接通。
当P0口作为输出口使用时,由锁存器和驱动电路构成数据输出通路。由于通路已有输出锁存器,因此数据输出可以与外设直接相接,无需再加数据锁存器电路。进行数据输出时,来自CPU的写脉冲加在D锁存器的CP端,数据写人D锁存器,并向端口引脚输出。但要注意,由于输出电路是漏极开路电路,必须外接上拉电阻才能有高电平输出。
当P0口作为输入口使用时,应区分读引脚和读端口(或称读锁存器)两种情况。为此,在P0口电路中有两个用于读入的三态缓冲器。所谓读引脚就是读芯片的引脚上的数据,这时,使用下方的缓冲器,由“读引脚”信号把缓冲器打开,引脚上的数据经缓冲器通过内部总线读进来;而读端口则是通过上面的缓冲器把锁存器Q端的状态读进来。
以上内容引自《新编MCS-51单片机应用设计》
电路仿真图
不上拉输出不了高电平,想输出“高”时,引脚处于“悬空”状态
51系列单片机的P0口作为通用I/O口使用时,内部输出电路为OD(漏极开路,CMOS),必须外接上拉电阻才能有高电平输出;而P1、P2、P3口内部输出电路中有上拉电阻故不需要接上拉电阻。