MCS-51单片机有32只IO引脚,分别组成P0、P1、P2、P3四个端口。P0~P3口是单片机与外部联系的重要通道,下图为几种典型的应用电路。P0~P3都可作为并行输入或输出I/O口,其中:P0和P2还可作为外部总线端口(地址/数据分时复用)P3还有第二输入或输出功能2.5并行输入/输出接口可作为并行IO输入通道(例如,按键/开关连接通道)可作为并行IO输出通道(例如,数码管显示器连接通道)可作为串行通信通道(例如,双机通讯的连接通道)可作为外部设备的连接通道(例如,存储器扩展通道)2.5并行I/O口1、P1口2、P3口3、P0口4、P2口P1口的结构组成P1.n=1个锁存器+1个场效应管驱动器V+2个三态门缓冲器读锁存器内部总线写锁存器读引脚锁存器QDP1.nQVCCP1.n内部上拉电阻读锁存器内部总线写锁存器读引脚锁存器QDP1.nQVCCP1.n内部上拉电阻V21P1口具有输出、读引脚、读锁存器三种工作方式。读锁存器内部总线写锁存器读引脚锁存器QDP1.nQVCCP1.n内部上拉电阻读锁存器内部总线写锁存器读引脚锁存器QDP1.nQVCCP1.n内部上拉电阻输出时:D端=1→/Q=0→V截止→P1.n=1D端=0→/Q=1→V导通→P1.n=0读引脚时:P1.n→读引脚三态门1→内部总线读锁存器:Q端→读锁存器三态门2→内部总线V21V的状态会影响P1.n的状态:如V导通→P1.n电平≡0(钳位)→读引脚可能出错为正确读出P1.n引脚电平,需要读引脚前应先使V截止令D=1→/Q=0→V截止→读P1.n→不会出错可见,P1口作为输入口时是有条件的(应先写1),而输出时无条件,因此,称P1口为准双向口。读锁存器内部总线写锁存器读引脚锁存器QDP1.nQVCCP1.n内部上拉电阻读锁存器内部总线写锁存器读引脚锁存器QDP1.nQVCCP1.n内部上拉电阻V2.5并行I/O口1、P1口2、P3口3、P0口4、P2口P3口的结构组成P3.n=1个锁存器+2个三态缓冲器+1个第二功能控制单元+1个输出驱动单元锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻3412第二输入功能V锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻P3口具有P1的三种工作方式+第二功能方式输出时:D端=1→Q=1→V截止→P1.n=1D端=0→Q=0→V导通→P1.n=0读引脚时:P1.n→读引脚三态门1→内部总线(需先写1)读锁存器:Q端→读锁存器三态门2→内部总线3412第二输入功能V第二输出功能=“1”(与非门开锁)P3口的第二功能方式:输出时:第二输出功能=1→与非门输出0→V截止→P3.n=1第二输出功能=0→与非门输出1→V导通→P3.n=0输入时:P3.n→三态门4→第二输入功能D端写“1”(与非门开锁)(第二输出功能先写“1”)锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻3412第二输入功能VP3口第二功能定义引脚名称第二功能定义P3.0RXD串行通信数据接收端输入P3.1TXD串行通信数据发送端输出P3.2外部中断0请求端口输入P3.3外部中断1请求端口输入P3.4T0定时器/计数器0外部计数输入端口输入P3.5T1定时器/计数器1外部计数输入端口输入P3.6片外数据存储器写选通输出P3.7片外数据存储器读选通输出INT0WRINT1RD2.5并行I/O口1、P1口2、P3口3、P0口4、P2口P0口的结构组成P0.n=1个锁存器+2个三态缓冲器+1个输出控制电路(非门X+与门A+电子开关MUX)+1个输出驱动电路(场效应管V2+V1)P0口既可以作为准双向通用I/O口实现输入/输出功能,也可作为单片机双向地址/数据线实现外设扩展功能。控制端=0时,电路简化形式:→封锁与门A≡0→地址/数据端与A输出无关控制端=0→MUX下通→/Q与V1栅极直通→V2截止→V1漏极开路P0口通用I/O方式为准双向口为使漏极开路的V1有效,必须通过上拉电阻与电源接通,上拉电阻的阻值一般为4.7Ω~10kΩ。注意:P1、P2、P3口无需外接上拉电阻(已有内部上拉电阻)读锁存器内部总线写锁存器读引脚锁存器QDP1.nQVCCP1.n内部上拉电阻读锁存器内部总线写锁存器读引脚锁存器QDP1.nQVCCP1.n内部上拉电阻锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻锁存器QDP3.nQP3.n读锁存器内部总线写锁存器读引脚第二输出功能VCC内部上拉电阻3412第二输入功能VP0口的通用IO工作方式(控制端=0)输出时:D端=1→Q反端=0→V1截止→P0.n=1D端=0→Q反端=1→V1导通→P0.n=0读引脚时:P0.n→读引脚三态门1→内部总线(需要先写“1”)读锁存器:Q端→读锁存器三态门2→内部总线P0口的地址/数据分时复用方式(控制端=1,锁存器自动为0XFF)“地址/数据”端无条件输入/输出,是严格意义上的双向口“地址/数据”方式下没有漏极开路问题,无需外接上拉电阻P0口总结:•P0口做地址/数据总线口使用时,不必外加提升电阻。••P0口做一般I/O口使用时,由于输出驱动电路工作于开漏状态,故需外接上拉电阻。•P0口做地址/数据总线口使用时,由于访问外部存储器期间,CPU会自动向口0的锁存器写入0FFH,所以,对用户而言,P0口用作地址/数据总线时,则是一个真正的双向口。•P0口做一般I/O口使用时,P0口是一个准双向口,即输入数据时,应先向口写“1”,使两个FET均截止,然后方可作高阻抗输入。一般情况下,P0口已当作地址/数据口使用时,就不能再作通用I/O口使用。2.5并行I/O口1、P1口2、P3口3、P0口4、P2口P2口的结构组成锁存器QDP2.nQP2.n读锁存器内部总线写锁存器读引脚地址控制VCC内部上拉电阻MUX多路开关锁存器QDP2.nQP2.n读锁存器内部总线写锁存器读引脚地址控制VCC内部上拉电阻MUX多路开关P2.n=1个锁存器+2个三态缓冲器+1个输出控制单元+1个输出驱动单元VP2口可以实现通用I/O口和地址输出口两种功能输出时:D端=1→Q端=1→V截止→P2.n=1D端=0→Q端=0→V导通→P2.n=0读引脚时:P2.n→读引脚三态门→内部总线(需要先写“1”)读锁存器:Q端→读锁存器三态门→内部总线P2作为通用I/O口时(控制端=0)锁存器QDP2.nQP2.n读锁存器内部总线写锁存器读引脚地址控制VCC内部上拉电阻MUX多路开关锁存器QDP2.nQP2.n读锁存器内部总线写锁存器读引脚地址控制VCC内部上拉电阻MUX多路开关V输出时:地址端=1→V截止→P2.n=1地址端=0→V导通→P2.n=0P2作为地址输出口时(控制端=1)锁存器QDP2.nQP2.n读锁存器内部总线写锁存器读引脚地址控制VCC内部上拉电阻MUX多路开关锁存器QDP2.nQP2.n读锁存器内部总线写锁存器读引脚地址控制VCC内部上拉电阻MUX多路开关VP0~P3小结1.结构2.功能B0HA0H90H80HSFR地址★第二功能★★总线端口★★★★准双向IO口P3P2P1P0★★★内部上拉电阻★★★输出控制★★MUX开关★★★★D锁存器P3P2P1P0MCS51内部并行I/O口的应用MCS51四个I/O端口共有三种操作方式:输出数据方式,读端口数据方式和读端口引脚方式。在数据输出方式下,CPU通过一条数据操作指令就可以把输出数据写入P0P3的端口锁存器,然后通过输出驱动器送到端口引脚。因此,凡是端口操作指令都能达到从端口引脚上输出数据的目的,例如如下指令均可在P0口输出数据:MOVP0,A;累加器A中的内容送P0口ANLP0,A;P0口的内容和A中的内容相与后送P0口读端口数据方式是一种对端口锁存器中数据进行读入的操作方式,CPU读入的这个数据并非端口引脚的数据。(读-修改-写类指令)ANLP0,A;(P0)-(P0)&(A)ORLP0,#DATA;(P0)-(P0)|DATADECP0;(P0)-(P0)-1例如读P1口低四位引脚上的信号的程序为:MOVP1,#0FH;使P1口低4位锁存器置1MOVA,P1;读P1口低4位引脚信号读引脚方式可从端口引脚上读入信息。在这种方式下,CPU首先必须使欲读端口引脚所对应的锁存器置1,以便驱动器中的T2管截止,然后打开输入三态缓冲器,使相应端口引脚上信号输入CPU内部数据总线。因此,在读引脚时必须连续使用两条指令。