单片机控制技术及应用
上QQ阅读APP看书,第一时间看更新

2.5 80C51单片机的并行I/O口

80C51单片机有4个8位的并行I/O口P0、P1、P2和P3。各口均由口锁存器、输出驱动器和输入缓冲器组成。4个并行口既有字节地址又有位地址。对各个并行口锁存器的读写,就可以实现口的输入/输出操作。4个并行口的功能有所不同,结构也存在一些差异,但每个口的位结构是相同的。所以,口结构的介绍均以其位结构进行说明。

2.5.1 P0、P2口的结构

80C51单片机中,使用内部含有程序存储器的单片机,基本上不需要外部扩展程序存储器和数据存储器,这时P0、P2口可用作通用的输入/输出口。若使用内部无程序存储器型号的单片机,就需要通过外部电路扩展程序存储器和数据存储器,此时,P0、P2口作为总线接口使用,即P0口为分时复用的低8位地址/数据总线,P2口作为高8位地址总线。

1.P0口的结构

P0口的位结构如图2-5所示。P0.X位由一个输出锁存器、一个转换开关MUX、两个三态输入缓冲器1、2、输出驱动电路(T1、T2)和一个与门4及一个反相器3组成,图中控制信号C的状态决定转换开关的位置。当C=0时,开关处于图中所示位置;当C=1时,开关拨向反相器输出端位置。

(1)P0作为通用I/O口使用

当单片机系统没有外部扩展ROM/RAM时,P0用作通用I/O口使用。在这种情况下,单片机硬件逻辑自动控制C=0,MUX开关处于当前位置。另外,C=0,与门4的输出为“0”,使输出驱动器的上拉场效应晶体管T1处于截止状态。因此,输出驱动级工作在需要外接上拉电阻的漏极开路方式。

作输出口时,CPU执行口的输出指令,内部数据总线上的数据在“写锁存器”信号的作用下由D端进入锁存器,经锁存器的Q端送至场效应晶体管T2,再经T2反相,在P0.X引脚出现的数据正好是内部总线的数据。

作输入口时,数据可以读自口的锁存器,也可以读自口的引脚。这要根据输入操作采用的是“读锁存器”指令,还是“读引脚”指令来决定。

CPU在执行“读—修改—写”类输入指令时(如ANL P0,A),内部产生的“读锁存器”操作信号,使锁存器Q端数据进入内部数据总线,在与累加器A进行逻辑运算之后,结果又送回P0口锁存器并出现在引脚上。读端口锁存器可以避免因外部电路原因造成的误读。

978-7-111-44921-8-Chapter02-33.jpg

图2-5 P0口的位结构

CPU在执行“MOV”类输入指令时(如MOV A,P0),内部产生的操作信号是“读引脚”。注意,在执行该类输入指令前要先给锁存器写入“1”,目的是使场效应晶体管T2截止,从而使引脚处于悬浮状态,可以作为高阻抗输入。否则,在作为输入方式之前曾向锁存器输出过“0”,T2导通会使引脚钳位在“0”电平,使输入高电平“1”无法读入。所以,P0口在作为通用I/O口时,属于准双向口。

(2)P0作为地址/数据总线口使用

当系统扩展片外ROM/RAM时,P0作为地址/数据总线使用。在这种情况下,单片机内硬件逻辑自动使MUX开关控制端C=1,则MUX开关接到反相器3的输出端,这时与门4的输出由地址/数据线的状态决定。

CPU在执行输出指令时,低8位地址和数据信息分时地出现在地址/数据总线上。若地址/数据总线的状态为“1”,则场效应晶体管T1导通、T2截止,引脚状态为“1”;若地址/数据总线的状态为“0”,则场效应晶体管T1截止、T2导通,引脚状态为“0”。可见P0.X引脚的状态正好与地址/数据线的信息相同。

CPU在执行输入指令时,首先低8位地址信息出现在地址/数据总线上,P0.X引脚的状态与地址/数据总线的地址信息相同。然后,CPU自动地使转换开关MUX拨向锁存器,并向P0口写入FFH,同时“读引脚”信号有效,数据经缓冲器进入内部数据总线。

由此可见,P0口作为地址/数据总线使用时是一个真正的双向口。

2.P2口的结构

P2口的位结构如图2-6所示,P2.X位由一个输出锁存器、一个转换开关MUX、两个三态输入缓冲器、输出驱动电路和一个反相器组成。图中控制信号的状态决定转换开关的位置。当控制信号为0时,开关处于图中所示位置;当控制信号为1时,开关拨向地址线位置。

由图可见,P2口的输出驱动电路与P0口不同,只使用一个场效应晶体管,其内部设有上拉电阻。

978-7-111-44921-8-Chapter02-34.jpg

图2-6 P2口的位结构

(1)P2作为通用I/O口使用

当单片机系统没有外部扩展ROM/RAM时,P2可以作为通用I/O口使用。

CPU在执行输出指令时,内部数据总线的数据在“写锁存器”信号的作用下由D端进入锁存器,经反相器反相后送至场效应晶体管T2,再经T2反相,在P2.X引脚出现的数据正好是内部总线的数据。

P2口用作输入时,数据可以读自口的锁存器,也可以读自口的引脚。这要根据输入操作采用的是“读锁存器”指令还是“读引脚”指令来决定。

CPU在执行“读一修改一写”类输入指令时(如ANL P2,A),内部产生的“读锁存器”操作信号,使锁存器Q端数据进入内部数据总线,在与累加器A进行逻辑运算之后,结果又送回P2口的锁存器并出现在引脚。

CPU在执行“MOV”类输入指令时(如MOV A,P2),内部产生的操作信号是“读引脚”。应在执行输入指令前对锁存器写入“1”,目的是使场效应晶体管T2截止,从而使引脚处于高阻抗输入状态。所以,P2口在作为通用I/O口时,属于准双向口。

(2)P2口作为地址总线接口使用

当需要在单片机外部扩展程序存储器或数据存储器时,单片机内部硬件逻辑自动控制MUX开关接向地址线,这时P2.X引脚的状态正好与地址线输出的信息相同。

2.5.2 P1、P3口的结构

P1口是80C51单片机唯一的单功能口,仅能用作通用的数据输入/输出口。P3口是双功能口,除具有数据输入/输出功能外,还具有特殊的第二功能。

1.P1口的结构

P1口的位结构如图2-7所示。由图可见,P1口由一个输出锁存器、两个三态输入缓冲器和输出驱动电路组成。其输出驱动电路与P2口相同,内部设有上拉电阻。P1口是通用的准双向I/O口。输出高电平时,能向外提供拉电流负载。用作输入口使用时,在读入数据前必须向口锁存器写入“1”。

2.P3口的结构

P3口的位结构如图2-8所示。P3口由一个输出锁存器、三个输入缓冲器(1、2、4),其中缓冲器1、2为三态门,场效应晶体管输出驱动电路和一个与非门(3)组成。输出驱动电路内部设有上拉电阻。

978-7-111-44921-8-Chapter02-35.jpg

图2-7 P1口的位结构

978-7-111-44921-8-Chapter02-36.jpg

图2-8 P3口的位结构

(1)P3作为通用I/O口使用(第一功能)

单片机内部的硬件自动将第二功能输出线的W置1。这时,对应的口线为通用I/O口方式。作为输出时,锁存器的状态(Q端)与输出引脚的状态相同;作为输入时,也要先向口锁存器写入1,使引脚处于高阻输入状态。输入的数据在“读引脚”信号的作用下,进入内部数据总线。所以,P3口在作为通用I/O口时,也属于准双向口。

(2)P3口的第二功能

当CPU不对P3口进行字节或位寻址时,单片机内部硬件自动将口锁存器的Q端置1。这时,可以使用P3口的第二功能。P3口第二功能的各引脚的定义如下:

P3.0:串行口输入信号引脚(RXD)。

P3.1:串行口输出信号引脚(TXD)。

P3.2:外部中断0输入信号引脚(978-7-111-44921-8-Chapter02-37.jpg)。

P3.3:外部中断1输入信号引脚(978-7-111-44921-8-Chapter02-38.jpg)。

P3.4:定时/计数器0的外部输入信号引脚(T0)。

P3.5:定时/计数器1的外部输入信号引脚(T1)。

P3.6:片外数据存储器“写”选通输出信号引脚(978-7-111-44921-8-Chapter02-39.jpg)。

P3.7:片外数据存储器“读”选通输出信号引脚(978-7-111-44921-8-Chapter02-40.jpg)。

有些应用场合若把其中的几条口线设为第二功能,另外几条口线设为第一功能使用。这时宜采用位寻址方式。

2.5.3 并行口的负载能力

P0、P1、P2、P3口的输入和输出电平与CMOS电平和TTL电平均兼容。

P0口的每一位口线可以驱动8个LSTTL负载。在作为通用I/O口时,由于输出驱动电路是开漏方式,驱动时需外接上拉电阻;当作为地址/数据总线使用时,接口线输出不是开漏方式,无需外接上拉电阻。

P1、P2、P3口的每一位能驱动4个LSTTL负载。它们的输出驱动电路内部设有上拉电阻,所以可以方便地由集电极开路(OC门)电路或漏极开路电路所驱动,而无需外接上拉电阻。

由于单片机口线仅能提供几毫安的电流,当作为输出驱动一般晶体管的基极时,应在口与晶体管的基极之间串接限流电阻。

2.5.4 并行口的应用举例

1.并口作为输出口的应用

978-7-111-44921-8-Chapter02-41.jpg

图2-9 P1口输出控制LED电路

利用P1口作为输出口控制发光二极管的应用电路,如图2-9所示。将8个发光二极管(LED)的阳极接在一起,并将它们接在+5V电源端,这种接法也称为共阳极接法。发光二极管的阴极通过一个限流电阻分别接到P1口的8个引脚上。由此可见,若要控制8个发光二极管的点亮与熄灭,只要控制P1口8个引脚的输出电平即可达到目的。当P1口的每个引脚输出高电平时,发光二极管均不导通,此时的发光二极管不亮。而当P1口的每个引脚输出低电平时,发光二极管导通,发光二极管被点亮。

2.并口作为输入、输出口的应用

并口作为输入、输出口的应用如图2-10所示。由图可见,P1口分别连接了4个开关和4个发光二极管,组成输入/输出应用电路。4个开关S1~S4的一端连在一起并接低电平(接电源地),另一端分别接在P1口的P1.4~P1.7引脚上,同时通过4个上拉电阻接到高电平(+5V)。当对P1口进行读操作时,可以读入开关的当前状态,开关状态与P1口读入的数字量关系如下:

若开关均处于打开状态,从+5V电源→电阻R→开关S→电源地端,由于开关S是打开的不能形成电流回路,电阻R上无压降产生,所以P1.4~P1.7引脚的电平值为+5V(高电平),此时从P1.4~P1.7引脚读入的数字量值为“1111B”。

978-7-111-44921-8-Chapter02-42.jpg

图2-10 P1口输入、输出控制电路

当开关均处于闭合状态,从+5V电源→电阻R→开关S→电源地端,由于开关S是闭合的能够形成电流回路,电阻R上产生压降(压降为+5V),开关S是闭合后将P1.4~P1.7引脚的与电源地连接(低电平),此时从P1.4~P1.7引脚读入的数字量值为“0000B”。

P1.0~P1.3引脚连接4个LED,组成输出控制电路,4个LED的点亮与熄灭控制如前例所述。在此例中,将读入的开关状态,直接从P1.0~P1.3引脚输出,可以控制LED点亮与熄灭。即改变开关的状态,就可以控制LED的状态,通过编程可以实现控制的目的。

在本例中,要注意在读入开关状态之前,要对P1口写“1”(使输出端的场效应晶体管截止),然后再读入开关状态。关于并行口的编程参考本书第3章内容。