P0口是一个8位的三态双向口,可作为地址/数据分时复用口,也可作为通用的I/O接口。它包括一个8位的数据输出锁存器、两个三态缓冲器(三态门1是输入缓冲器,三态门2在端口操作时使用)、输出驱动电路(V1和V2两个MOS管)和输出控制电路(由与门3、倒相器4及模拟开关MUX组成)组成,它的任一位结构如图2-11所示。
图2-11 P0口任一位P0.X的结构
P0口有两种功能,即地址/数据分时复用总线和通用I/O接口。
1.地址/数据分时复用总线
当控制信号为高电平“1”时,P0口作为地址/数据分时复用总线用。这时又可分为两种情况:
(1)一种是从P0口输出地址或数据。控制信号为高电平“1”,使转换开关MUX把反相器4的输出端与V1接通,同时把与门3打开。如果从P0口输出地址或数据信号,当地址或数据为“1”时,经反相器4使V1截止,而经与门3使V2导通,P0.X引脚上出现相应的高电平“1”;当地址或数据为“0”时,经反相器4使V1导通而V2截止,引脚上出现相应的低电平“0”,这样就将地址/数据的信号输出。
(2)另一种是从P0口输入数据。包括读引脚和读缓冲器。如果从P0口输入数据,输入数据从引脚下方的三态输入缓冲器进入内部总线。(www.xing528.com)
2.通用I/O接口
当控制信号应为低电平“0”时,P0口作为通用I/O口使用。
控制信号为“0”,转换开关MUX把输出级与锁存器端 接通,在CPU向端口输出数据时,因与门3输出为“0”,使V2截止,此时,输出级是漏极开路电路。当写入脉冲加在锁存器时钟端CLK上时,与内部总线相连的D端数据取反后出现在Q端,又经输出V1反相,在P0引脚上出现的数据正好是内部总线的数据。当要从P0口输入数据时,引脚信号仍经输入缓冲器进入内部总线。当P0口作通用I/O接口时,应注意以下两点:
(1)在输出数据时,由于V2截止,输出级是漏极开路电路,要使“1”信号正常输出,必须外接上拉电阻。
(2)P0口作为通用I/O口输入使用时,在输入数据前,应先向P0口写“1”,此时锁存器的Q端为“0”,使输出级的两个场效应管V1、V2均截止,引脚处于悬浮状态,才可作高阻输入。因为,从P0口引脚输入数据时,V2一直处于截止状态,引脚上的外部信号既加在三态缓冲器1的输入端,又加在V1的漏极。假定在此之前曾经输出数据“0”,则V1是导通的,这样引脚上的电位就始终被箝位在低电平,使输入高电平无法读入。因此,在输入数据时,应人为地先向P0口写“1”,使V1、V2均截止,方可高阻输入。
因此,当无外扩芯片时,P0作为一般的I/O接口,直接与外设通信;而当有外扩时,P0先送出外部地址码的低8位,然后传送数据信息。此时,对于片外ROM,PC的低8位PCL由P0口送出;对于片外RAM,外部地址的低8位(DPTR的低8位DPL或者R0/R1)由P0口送出。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。