单片微型计算机原理及应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.4 MCS-51单片机并行的I/O接口

在MCS-51单片机内部包含有4个并行的I/O接口,分别称为P0口、P1口、P2口和P3口,每一个口都是8位的,每个口的位都有一个输出锁存器和一个输入缓冲器。输出锁存器用于存放需要输出的数据,每个端口的8位输出锁存器构成一个特殊功能寄存器,且冠名与端口相同;输入缓冲器用于对端口引脚上输入的数据进行缓冲,因此各引脚上输入的数据必须一直保持到CPU把它读走为止。P0、P1、P2和P3端口的电路形式不同,其功能也不同。

3.4.1 P1口

图3-10所示为P1口的位结构原理图。

图3-10 P1口的位结构示意图

图中的锁存器起输出作用,场效应管V1与上拉电阻组成输出驱动器,以增大负载能力。三态门1是输入缓冲器,三态门2在端口操作时使用。

P1口作为通用的I/O接口使用,具有输出、读引脚、读锁存器三种工作方式。

(1)输出方式

单片机执行写P1口的指令,如执行

            MOV     P1,#data

P1口工作于输出方式,此时数据data经内部总线送入锁存器存储。如果某位的数据为1,则

该位锁存器输出端Q=1,使V1截止,从而在引脚P1.X上出现高电平;反之,如果数据为0,则Q=0,使V1导通,在引脚P1.X上出现低电平。

(2)读引脚方式

单片机的有些指令用于读引脚,它们一般都是以I/O端口为源操作数的指令,如执行

            MOV     A,P1

这时,控制器打开三态门1,引脚P1.X上的数据经三态门1进入芯片的内部总线,并送到累加器A。输入时无锁存功能。

在单片机执行读引脚操作时,如果锁存器原来寄存的数据Q=0,那么由于,将使V1导通,引脚被始终钳位在低电平上,不可能输入高电平。为此,使用读引脚指令前,必须先用输出指令置Q=1,使V1截止。这就是P1被称为准双向口的原因。“准双向”的含义为输出直接操作,输入前需先置“1”,再输入。

(3)读锁存器方式

MCS-51系列单片机有很多指令可以直接进行端口操作,如ANL、ORL、XRL、JBC、CPL、INC、DEC、DJNZ、MOV PX.X,C、CLR PX.X、SETB PX.X等。这些指令的执行过程分成“读—修改—写”三步,即先将端口的数据读入CPU,在ALU中进行运算,运算结果再送回端口。执行“读—修改—写”类指令时,CPU实际是通过三态门2读回锁存器Q端的数据的。

这种读锁存器的方式是为了避免可能出现的错误。例如,用一根口线去驱动端口外的一个晶体管基极,当向口线写“1”时,该晶体管导通,导通后的PN结会把端口引脚的高电平拉低,这样直接读引脚就会把本来的“1”误读为“0”。但若从锁存器Q端读,就能避免这样的错误,得到正确的数据。也就是说,如果某位输出为1,有外接器件拉低电平,就有区别了,读锁存器状态是1,读引脚状态是0,锁存器状态取决于单片机企图输出什么电平。引脚状态则是引脚的实际电平。

是读引脚还是读锁存器,其过程CPU内部会自动处理,读者不必在意。但应注意,当作为读引脚方式使用时,应先对该口写“1”,使场效应管截止,再进行读操作,以防止场效应管处于导通状态,使引脚为“0”,从而引起误读。

P1口能驱动4个LSTTL负载。通常把100µA的电流定义为1个LSTTL负载的电流,所以P1口吸收或输出电流不大于400µA。P1口有内部上拉电阻,因此在输入时,即使由集电极开路或漏极开路电路驱动,也无须外接上拉电阻。

P1口作为一般的I/O接口使用时,记为P1.7~P1.0。

3.4.2 P3口

图3-11所示为是P3口的位结构原理图。

图3-11 P3口的位结构示意图

P3口为多功能口。当第二功能输出端保持“1”时,与非门3对锁存器Q端是畅通的,这时P3口完全实现第一功能,即作为通用的I/O接口使用,而且是一个准双向I/O接口,其功能与P1口是相同的。P3口除了作为准双向通用I/O接口使用外,每一根端口线还有第二功能,见表3-3。

在应用中,P3口的各位如不设置为第二功能,则自动处于第一功能。在更多的情况下,根据需要可将几条口线设置为第二功能,剩下的口线作为第一功能使用,此时宜采用位操作形式。

图3-11下方的输入通道中有两个缓冲器1和4。第二功能输入信号取自缓冲器4,而通用输入信号取自“读引脚”缓冲器1的输出端。

P3口的负载能力和P1口相同,能驱动4个LSTTL负载。P3口作为一般的I/O接口使用时记为P3.7~P3.0;作为第二功能口使用时,提供1个全双工的串行口、2个外部中断源的中断输入、2个计数器的计数脉冲输入、2个对外部RAM及I/O口的读/写控制信号。

3.4.3 P0口

图3-12所示为P0口的位结构原理图。

图3-12 P0口的位结构示意图

P0口的输出驱动电路由上拉场效应管V2和驱动场效应管V1组成,控制电路包括一个与门、一个非门和多路开关MUX。

PO口既可以作为通用的I/O接口进行数据的输入/输出,也可以作为单片机系统的地址/数据线使用,为此在P0口的电路中有一个多路转换电路MUX。在控制信号的作用下,多路转换电路可以分别接通锁存器输出或地址/数据线输出。

P0口作为通用的I/O接口使用时,CPU内部发出控制电平0封锁与门,即与门的输出为0(不会受另一条输入端状态的限制),上拉场效应管V2处于截止状态,多路开关与Q端接通。此时输出级是漏极开路电路。这时P0口与P1口一样,有输出、读引脚和读锁存器三种工作方式。

(1)输出方式

当写脉冲加在锁存器时钟端CP端上时,与内部总线相连的D端数据取反后出现在Q端,又经输出V1反相,在P0引脚上出现的数据正好是内部总线的数据。当要从P0口输入数据时,引脚信息仍经输入缓冲器进入内部总线。

在输出数据时,由于V2截止,输出级是漏极开路电路,要使“1”信号正常输出,必须外接上拉电阻。

(2)读引脚方式

P0口作为通用I/O接口使用时,是准双向口。其特点是在输入数据时,应先把口置1,此时锁存器的Q端为0,使输出级的两个场效应管V1、V2均截止,引脚处于悬浮状态,这时才可做高阻输入。因为从P0口引脚输入数据时,V2一直处于截止状态,所以引脚上的外部信号既加在三态缓冲器1的输入端,又加在V1的漏极。若在此之前曾输出锁存过数据0,则V1是导通的,这样引脚上的电位就始终被钳位在低电平,使输入高电平无法读入。因此在输入数据时,应先向P0口写1,使V1、V2均截止,方可得到正确的引脚信息。

(3)读锁存器方式

此时V2截止,与P1口在读锁存器方式时“读—修改—写”的工作过程一样。

在P0口用做地址/数据分时功能连接外部存储器时,由于访问外部存储器期间,CPU会自动向P0口的锁存器写入FFH,因此对用户而言,P0口此时才是真正的三态双向口。

在访问片外存储器而需从P0口输出地址或数据信号时,控制信号应为高电平“1”,使转换开关MUX把反相器的输出端与V2接通,同时把与门打开。当地址或数据为“1”时,经反相器使V1截止,而经与门使V2导通,P0.X引脚上出现相应的高电平“1”;当地址或数据为“0”时,经反相器使V1导通而V2截止,引脚上出现相应的低电平“0”。这样就将地址/数据的信号输出了。

综上所述,P0口在有外部扩展存储器时,被作为地址/数据总线口,此时是一个真正的双向口;在没有外部扩展存储器时,P0口也可作为通用的I/O接口,但此时只是一个准双向口。另外,P0口的输出级能以吸收电流的方式驱动8个LSTTL负载,即灌入电流不大于800µA。

P0口作为一般的I/O接口使用时,记为P0.7~P0.0;作为数据口使用时,记为D7~D0;作为地址线使用时,要增加一个锁存器,锁存器的输出是地址线的低8位,记为A7~A0。

3.4.4 P2口

图3-13所示为P2口的位结构原理图。

图3-13 P2口的位结构示意图

P2口既可作为通用的I/O接口使用,也可作为地址总线使用,故其位结构比P1口多了一个多路控制开关MUX。

当P2口作为通用I/O接口使用时,多路开关MUX倒向锁存器的输出端Q,构成一个准双向口。其功能与P1口相同,有输出、读引脚、读锁存器三种工作方式。

P2口的另一功能是作为系统扩展的地址总线口。当单片机从片外ROM中取指令,或者执行访问片外RAM、片外ROM的指令时,多路开关MUX接通“地址”,P2口出现程序指针PC的高8位地址或数据指针DPTR的高8位地址。以上操作对锁存器的内容不受影响,所以取指令或访问外部存储器结束后,由于多路开关MUX又与锁存器Q端接通,引脚上将恢复原来的数据。

P2口的负载能力和P1口的相同,能驱动4个LSTTL负载。P2口作为一般的I/O接口使用时,记为P2.7~P2.0;作为地址口使用时是地址的高8位,记为A15~A8。