P0口有8位,每位包括1个输出锁存器(D锁存器)、2个三态缓冲器和2个场效应管,其中P0.x为外部引脚,MUX为模拟开关。如下图所示。
下面分析P0口的工作过程,分为两个部分,一个是作为地址/数据总线的复用口,一个是作为通用I/O接口使用。
作为地址/数据总线的复用口,分析如下,1、当P0口作为地址或数据输出时,CPU送来的控制信号为高电平,使“与门”开启,硬件自动使转向开关MUX打向上面,接通反相器的输出。(a)当输出的地址/数据信息=1时,“与门”输出1,T1导通,T2截止,P0.x引脚输出为1;(b)当输出的地址/数据信息=0时,“与门”输出0,T1截止,T2导通,P0.x引脚输出为0。
由T1和T2两个场效应管形成的推拉式结构,大大提高负载能力,T1这时起到内部上拉电阻的作用。
2、当P0口作为数据输入(访问外部存储器)时,从外部引脚P0.x读入信息,CPU送来的控制信号为低电平,MUX接通D锁存器的/Q端, CPU自动向P0口写入FFH,使T2截止,而T1因为低电平的控制信号也截止,从而保证数据信息的高阻抗输入,从外部输入的数据直接由P0.x引脚通过输入缓冲器BUF2进入内部总线。
作为通用I/O接口,分析如下,CPU送来的控制信号为低电平,MUX打向下面,接通锁存器的/Q,“与门”输出为0,T1截止,形成了P0口输出电路为漏极开路输出。1、作为输出口时,CPU写脉冲加在D锁存器的CP端,内部总线的数据写入D锁存器,并由引脚P0.x输出,(a)当D锁存器为1时,/Q端为0,T2截止,输出为漏极开路,此时,必须外接上拉电阻才能有高电平输出;(b)当D锁存器为0时,T2导通,P0口输出为低电平。2、作为I/O输入时,分为两种“读锁存器”和“读引脚”,(a)当CPU发出“读锁存器”指令时,锁存器的状态由Q端经上方的三态缓冲器BUF1进入内部总线,(b)当CPU发出“读引脚”指令时,锁存器的Q端为1,T2截止,引脚的状态经下方的BUF2进入内部总线。