以51系列单片机中的AT89S51单片机为例,该单片机有4个8位并行双向I/O口,即P0、P1、P2、P3,共32根I/O线,在单片机中,主要承担着和单片机外部设备打交道的任务。输出口用于连接输出设备,常用的输出设备有LED、数码管、蜂鸣器、继电器、液晶显示器等。输入口用于连接单片机和输入设备,常用的输入设备有按键、开关等。此外,P0口和P2口在并行扩展时还作为总线口使用。P3口还有第二功能。
这4个并行口P0、P1、P2、P3口既有相同部分,也有各自的特点和功能。其中,P1、P2和P3为准双向输入/输出口,P0口则为双向三态输入/输出口。图4-1是并行口的结构图。由图可见,每个I/O口都由1个8位数据锁存器和1个8位数据缓冲器组成。其中8位数据锁存器与P0、P1、P2、P3同名,属于21个特殊功能寄存器中的4个,用于存放需要输出的数据,8个数据缓冲器用于对端口引脚上输入数据进行缓冲,但不能锁存,因此各引脚上的数据必须保持到CPU把它读走。下面分别介绍每个端口的特点和操作。
图4-1 并行口结构图
1.P0口
P0口是使用广泛、最繁忙的端口。由图4-1(a)可见,P0口由锁存器、输入缓冲器、切换开关与相应控制电路、输出驱动电路组成,是双向、三态、数据地址分时使用的总线I/O口。若不使用外部存储器时,P0口可当作一个通用的I/O口使用;若要扩展外部存储器,这时P0口是地址/数据总线。
(1)作I/O口。
作I/O口使用时,多路开关向下,接(控制信号为0),场效应管T1截止。P0口作输出时,内部总线若为“1”,为“0”,T2栅极为“0”,T2截止,输出端P0.x为“1”;内部总线若为“0”,为“1”,T2栅极为“1”,T2导通,输出端P0.x为“0”。P0口作输入时,必须先执行P0=0xFF指令,将锁存器置“1”(Q=1,),T2截止,否则P0.x引脚就会被嵌位在低电平。输入信号经由引脚P0.x到读引脚三态门再到内部总线。
此外,在这里还要特别说明,单片机对P0~P3口的输入上还有如下约定:首先是读锁存器的内容,进行处理后再写到锁存器中,这种操作被称为“读—修改—写操作”。
(2)作地址/数据总线。
在访问外部扩展存储器时,多路开关向上(控制信号为“1”),与门锁定。若作地址/数据总线使用,地址信号为“1”,经非门,T2栅极为“0”,T2截止,引脚P0.x为“1”;若地址信号为“0”,经非门,T2栅极为“1”,T2导通,引脚P0.x为“0”。
在访问外部存储器时,P0口输出低8位地址后,变为数据总线,读指令码,在此期间,控制信号为“0”,多路开关向下,接端,CPU自动将FFH写入P0口锁存器,T2截止,读引脚通过三态门将指令码读到内部总线。
总之,P0口具有以下特点:
·8位漏极开路型双向三态输入/输出口。
·作为通用I/O口时,需外接上拉电阻。
·作为输入口使用时,首先需要将口线置为高电平“1”,才能正确读取该端口所连接的外部数据。
·P0口可驱动8个LSTTL,其他端口只可以驱动4个LSTTL。
·在访问外部扩展存储器时,P0口身兼两职,既可作为地址总线低8位(A0~A7)使用,也可作为数据总线(D0~D7)使用,即它是分时复用的低8位地址总线和数据总线,作为地址/数据总线使用时,不需外接上拉电阻。
2.P1口
从图4-1(b)可以看出,P1口没有多路开关,P1口的T2管用内部上拉电阻代替。因此,P1口是准双向静态I/O口。和P0口一样,输入时有读锁存器和读引脚之分。在输入时(如果不是置位状态),必须选用P1=0xFF,将口线置为高电平“1”,才能正确读入外部数据。
总之,P1口具有以下特点:
·P1口为准双向输入/输出口。
·P1口内部有上拉电阻,所以实现输出功能时,不需要外接上拉电阻。
·作为输入口使用时,首先需要将口线置为高电平“1”,才能正确读取该端口所连接的外部数据。
·P1口可驱动4个LSTTL负载。
·进行在线编程(ISP)时,其中的P1.5当作MOSI用,P1.6当作MISO用,P1.7当作SCK用。(www.xing528.com)
3.P2口
从图4-1(c)可以看出,P2口有多路开关,驱动电路有内部上拉电阻,兼有P0口和P1口的特点,是个动态准双向口。
(1)作I/O口。
若单片机不扩展外部存储器,或扩展外部存储器但不超过256B时,P2口作为I/O口使用,这时多路开关向左,使用方法同P1口。
(2)作高8位地址。
若扩展外部存储器且超过256B时,P2口不能作I/O口,只能作执行MOVX指令16位地址的高8位,即A8~A15,这时多路开关向右,P2R0、P2R1表示16位地址,R0或R1内容为低8位地址,P2口为高8位地址。
总之,P2口具有以下特点:
·P2口为准双向输入/输出口。
·P2口内部有上拉电阻,所以实现输出功能时,不需要外接上拉电阻。
·作为输入口使用时,首先需要将口线置为高电平“1”,才能正确读取该端口所连接的外部数据。
·P2口可驱动4个LSTTL。
·在访问外部扩展存储器时,可作为地址总线高8位(AB8~AB15)使用。
4.P3口
从图4-1(d)可以看出,P3口是个双功能静态双向I/O口。它除了有作为I/O口使用的第一功能外,还具有第二功能。P3口的第一功能和P1口一样。P3口的第二功能各管脚定义如表4-1所示。
表4-1 P3口引脚第二功能
为适应引脚的第二功能的需要,在结构上增加了第二功能控制逻辑,在真正的应用电路中,第二功能显得更为重要。由于第二功能信号有输入/输出两种情况,下面我们分别加以说明。
对于第二功能为输出的引脚,当作I/O口使用时,第二功能信号线应保持高电平,与非门开通,以维持从锁存器到输出口数据输出通路畅通无阻。而当作第二功能口线使用时,该位的锁存器置高电平,使与非门对第二功能信号的输出是畅通的,从而实现第二功能信号的输出。对于第二功能为输入的引脚,在口线上的输入通路增设了一个缓冲器,输入的第二功能信号即从这个缓冲器的输出端取得。而作为I/O口线输入端时,取自三态缓冲器的输出端。这样,不管是作为输入口使用还是作为第二功能信号输入,输出电路中的锁存器输出和第二功能输出信号线均应置“1”。
总之,P3口具有以下特点:
·P3口为准双向输入/输出口。
·作为输入口使用时,首先需要将口线置为高电平“1”,才能正确读取该端口所连接的外部数据。
·P3口内部有上拉电阻,所以实现输出功能时不需要外接上拉电阻。
·P3口可驱动4个LSTTL。
·作第二功能使用。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。