1、2-4 并行并行I/O 端口端口的使用 对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,亦或接受外部的控制,都是通过I/O口进行的。单片机总共有P0、P1、P2、P3四个8位双向输入输出端口,每个端口都有锁存器、输出驱动器和输入缓冲器。4个I/O端口都能作输入输出口用,其中P0和P2通常用于对外部存储器的访问。4.1 MCS-51单片机的并行端口结构与操作51系列单片机有4 4个I/O端口,每个端口都是8位准双向口,共占3232根引脚。每个端口都包括一个锁存器(即专用寄存器P0P0P3P3)、一个输出驱动器和输入缓冲器。通常把4个端口笼统地表示为P0P0P3P3。在无片
2、外扩展存储器的系统中,这4个端口的每一位都可以作为准双向通用I/O端口使用。在具有片外扩展存储器的系统中,P2口作为高8位地址线,P0口分时作为低8位地址线和双向数据总线。51单片机4个I/O端口线路设计的非常巧妙,学习I/O端口逻辑电路,不但有利于正确合理地使用端口,而且会给设计单片机外围逻辑电路有所启发。下面简单介绍一下输入/输出端口结构。4.1.1 4.1.1 P0P0口和口和P2P2的结构的结构下图为P0口的某位P0.n(n=07)结构图,它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路及控制电路组成。从图中可以看出,P0口既可以作为I/O用,也可以作为地址/数据线用。D QCLK
3、 QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚一、一、P0P0口的结构口的结构1、P0口作为普通I/O口输出时输出时CPU发出控制电平“0 0”封锁“与”门,将输出上拉场效应管T1截止,同时使多路开关MUX把锁存器与输出D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚驱动场效应管T2栅极接通。故内部总线与P0口同相。由于输出驱动级是漏极开路电路,若驱动NMOS或其它拉流负载时,需要外接上拉电阻。P0的输
4、出级可驱动8个LSTTL负载。D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚 输入时输入时-分分读引脚读引脚或或读锁存器读锁存器读引脚:读引脚:由传送指令由传送指令(MOVMOV)实现;实现;(引脚引脚指令见指令见P50P50页)页)下下面一个缓冲器用于读端口面一个缓冲器用于读端口引脚引脚数据,当执行一条数据,当执行一条由端口输入的指令时,读脉冲把该三态缓冲器打开,由端口输入的指令时,读脉冲把该三态缓冲器打开,这样端口引脚上的数据经过缓冲器读入到内部总线。这样端口引脚上的数据经过缓冲器读入到
5、内部总线。D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚 输入时输入时-分分读引脚读引脚或或读锁存器读锁存器读锁存器:读锁存器:有些指令有些指令 如:如:ANL P0ANL P0,A A称为称为“读读-改改-写写”指令,需要读锁存器。指令,需要读锁存器。上上面面一个缓冲器用于读端口一个缓冲器用于读端口锁存器锁存器数据。数据。D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚*原因:如果此时该端
6、口的负载恰是一个晶体管基极,且原端口输出值为1,那么导通了的PN结会把端口引脚高电平拉低;若此时直接读端口引脚信号,将会把原输出的“1”电平误读为“0”电平。现采用读输出锁存器代替读引脚,图中,上面的三态缓冲器就为读锁存器Q端信号而设,读输出锁存器可避免上述可能发生的错误。*D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚 P0口必须接上拉电阻;在读信号之前数据之前,先要向相应的锁存器做写1操作的I/O口称为准双向口;三态输入缓冲器的作用:(ANL P0,A)准双向口:从图中可以看出,在读入端
7、口数据时,由于输出驱动FET并接在引脚上,如果T2导通,就会将输入的高电平拉成低电平,产生误读。所以在端口进行输入操作前,应先向端口锁存器写“1”,使T2截止,引脚处于悬浮状态,变为高阻抗输入。这就是所谓的准双向口。D QCLK QMUXP0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚2 2、P0P0作为作为地址地址/数据总线数据总线 在系统扩展时,在系统扩展时,P0P0端口作为端口作为地址地址/数据总线数据总线使用时,使用时,分为:分为:P0P0引脚引脚输出地址输出地址/数据数据信息。信息。D QCLK QMUX
8、P0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚 CPUCPU发出控制电平发出控制电平“1 1”,打开,打开“与与”门,又使多路开门,又使多路开关关MUXMUX把把CPUCPU的的地址地址/数据总线数据总线与与T2T2栅极反相接通栅极反相接通,输出地,输出地址或数据。址或数据。由图上可以看出,上下两个由图上可以看出,上下两个FETFET处于反相,构处于反相,构成了推拉式的输出电路,其负载能力大大增强。成了推拉式的输出电路,其负载能力大大增强。2 2、P0P0作为作为地址地址/数据总线数据总线D QCLK QMUXP
9、0.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚 P0P0引脚引脚输出地址输出地址/输入数据输入数据 输入信号是从引脚通过输入缓冲器进入输入信号是从引脚通过输入缓冲器进入内部总线内部总线。此时,此时,CPUCPU自动使自动使MUXMUX向下,并向向下,并向P0P0口写口写“1”1”,“读读引脚引脚”控制信号有效,下面的缓冲器打开,外部数据读入控制信号有效,下面的缓冲器打开,外部数据读入内部总线。内部总线。2 2、P0P0作为作为地址地址/数据总线数据总线-真正的双向口D QCLK QMUXP0.n读读锁存器锁存器内部
10、总线内部总线写写锁存器锁存器读读引脚引脚地址地址/数据数据控制控制VCCT1T2P0P0口口引脚引脚 总结特点:总结特点:(1)P0口可作通用口可作通用I/O口使用,又可作地址口使用,又可作地址/数据总线口;数据总线口;(2)P0既可按字节寻址,又可按位寻址;既可按字节寻址,又可按位寻址;(3)P0作为输入口使用时:是准双向口;作为输入口使用时:是准双向口;(4)作通用)作通用I/O 口输出时:是开漏输出;口输出时:是开漏输出;(5)作地址)作地址/数据总线口时,数据总线口时,P0是一真正双向口,而作通是一真正双向口,而作通 用用I/O口时,只是一个准双向口。口时,只是一个准双向口。二、二、P
11、2P2的内部结构的内部结构1.1.P2P2口作为口作为普通普通I/OI/O口口D QCLK QMUXP2.n读锁存器读锁存器内部总线内部总线写锁存器写锁存器读引脚读引脚地址地址控制控制VCCRTP2口引脚CPUCPU发出控制电平发出控制电平“0”0”,使多路开关,使多路开关MUXMUX倒向锁存倒向锁存器器输出输出Q Q端,构成一个准双向口。其功能与端,构成一个准双向口。其功能与P1P1相同。相同。2.2.P2P2口作为口作为地址总线地址总线 在系统扩展片外在系统扩展片外程序存储器程序存储器扩展数据存储器且容量超过扩展数据存储器且容量超过256256B B(用用MOVX DPTRMOVX DPT
12、R指令指令)时,时,CPUCPU发出控制电平发出控制电平“1 1”,使多路,使多路开关开关MUXMUX倒倒内部地址线内部地址线。此时,。此时,P2P2输出高输出高8 8位地址。位地址。D QCLK QMUXP2.n读锁存器读锁存器内部总线内部总线写锁存器写锁存器读引脚读引脚地址地址控制控制VCCRTP2口引脚2、特点:、特点:(1)当当P2口作为通用口作为通用I/O时,是一准双向口。时,是一准双向口。(2)从从P2口输入数据时,先向锁存器写口输入数据时,先向锁存器写“1”。(3)可位寻址,也可按字节寻址可位寻址,也可按字节寻址(4)可输出地址高可输出地址高8位。位。4.1.2 4.1.2 P1
13、P1口、口、P3P3口的内部结构口的内部结构 P1口的一位的结构 它由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成-准双向口。D QD QCLK QCLK QP1.nP1.n读读锁存器锁存器内部总线内部总线写写锁存器锁存器读读引脚引脚VCCRT TP1口引脚P3的内部结构D QD QCLK QCLK QP3.nP3.n读读锁存器锁存器内部总线内部总线写锁存器写锁存器读读引脚引脚VCCRT TP3口引脚第二第二输入功能输入功能第二第二输出功能输出功能一、作为通用I/O口与P1口类似-准双向口(W=1)WP3的内部结构D QD QCLK QCLK QP3.nP3.n读读锁存器锁存器内部总线
14、内部总线写锁存器写锁存器读读引脚引脚VCCRT TP3口引脚第二第二输入功能输入功能第二第二输出功能输出功能二、第二功能(Q=1)此时引脚部分输入(Q=1、W=1),部分输出(Q=1、W输出)。W第二功能各引脚功能定义:P3.0:RXD串行口输入P3.1:TXD串行口输出P3.2:INT0外部中断0输入P3.3:INT1外部中断1输入P3.4:T0定时器0外部输入P3.5:T1定时器1外部输入P3.6:WR外部写控制P3.7:RD外部读控制 综上所述:当P0作为I/O口使用时,特别是作为输出时,输出级属于开漏电路,必须外接上拉电阻才会有高电平输出;如果作为输入,必须先向相应的锁存器写“1”,才
15、不会影响输入电平。当CPU内部控制信号为“1”时,P0口作为地址/数据总线使用,这时,P0口就无法再作为I/O口使用了。P1、P2 和P3 口为准双向口,在内部差别不大,但使用功能有所不同。P1口是用户专用 8 位准双向I/O口,具有通用输入/输出功能,每一位都能独立地设定为输入或输出。当有输出方式变为输入方式时,该位的锁存器必须写入“1”,然后才能进入输入操作。P2口是 8 位准双向I/O口。外接I/O设备时,可作为扩展系统的地址总线,输出高8位地址,与P0 口一起组成 16 位地址总线。对于 8031 而言,P2 口一般只作为地址总线使用,而不作为I/O线直接与外部设备相连。2、特点:、特
16、点:(1)作通用作通用I/O时,时,“选择输出功能选择输出功能”应保持高电平,应保持高电平,(2)工作于第二功能时,该位锁存器应置工作于第二功能时,该位锁存器应置1,(3)作输入口时,输出锁存器和选择输出功能端都应作输入口时,输出锁存器和选择输出功能端都应 置置1(4)第二功能专用输入,取自输入通道第一缓冲器第二功能专用输入,取自输入通道第一缓冲器 (G1)输出端,通用输入信号取自输出端,通用输入信号取自“读引脚读引脚”。小结:小结:1、P0口:地址低口:地址低8位与数据线分时使用端口,位与数据线分时使用端口,2、P1口:按位可编址的输入输出端口,口:按位可编址的输入输出端口,3、P2口:地址高口:地址高8位输出口位输出口4、P3口:双功能口。若不用第二功能,也可作通用口:双功能口。若不用第二功能,也可作通用I/O 口。口。5、按三总线划分:、按三总线划分:地址线:地址线:P0低八位地址,低八位地址,P2高八地址;高八地址;数据线:数据线:P0输入输出输入输出8位数据;位数据;控制线:控制线:P3口的口的8位加上位加上/PSEN、ALE共同完成共同完成 控制总线。控制总线。布置作业:布置作业:P43 1/2