2.6.1 P0口
P0口字节地址为80H,位地址为80H~87H。P0口的位电路结构如图2-6所示。
图2-6 P0口位电路结构
P0口有如下两种功能。
1.用作系统的地址/数据总线
当需要外扩存储器或I/O时,P0口可作为系统复用的地址/数据总线。此时,图2-7中的“控制”信号为1,使模拟开关MUX打向上面,接通反相器输出,同时使与门处于开启状态。
当输出的“地址/数据”信息为1时,与门输出为1,上方的场效应晶体管导通,下方的场效应晶体管截止,P0.x引脚输出为1;当输出的“地址/数据”信息为0时,上方的场效应晶体管截止,下方的场效应晶体管导通,P0.x引脚输出为0。可见P0.x引脚的输出状态随“地址/数据”状态的变化而变化。上方场效应晶体管起到内部上拉电阻的作用。
当P0口作为数据线输入时,仅从外部存储器(或外部I/O)读入信息,对应“控制”信号为0,MUX接通锁存器的Q∗端。P0口作为地址/数据复用方式访问外部存储器时,CPU自动向P0口写入FFH,使下方场效应晶体管截止,由于控制信号为0,上方场效应晶体管也截止,从而保证数据信息的高阻抗输入,从外部存储器或I/O输入的数据信息直接由P0.x脚通过输入缓冲器BUF2进入内部总线。
由上分析,在用作系统的地址/数据总线时,P0口具有高电平、低电平和高阻抗输入3种状态的端口,因此,P0口作为地址/数据总线使用时是真正的双向端口。
2.用作通用I/O口
P0口作为通用的I/O口使用时,“控制”信号为0,MUX打向下面,接通锁存器的Q∗端,与门输出为0,上方场效应晶体管截止,形成的P0口输出电路为漏极开路输出。
P0口作通用I/O输出口时,来自CPU的“写”脉冲加在D锁存器的CP端,内部总线上的数据写入D锁存器,并由引脚P0.x输出。当D锁存器为1时,端为0,下方场效应晶体管截止,输出为漏极开路,此时,必须外接上拉电阻才能有高电平输出;当D锁存器为0时,下方场效应晶体管导通,P0口输出为低电平。
P0口作为通用I/O输入口时,有两种读入方式:“读锁存器”和“读引脚”。
当CPU发出“读锁存器”指令时,锁存器的状态由Q端经上方的三态缓冲器BUF1进入内部总线;当CPU发出“读引脚”指令时,锁存器的输出状态=1(即端为0),从而使下方场效应晶体管截止,引脚状态经下方三态缓冲器BUF2进入内部总线。
综上所述,P0口有如下特点。
1)当P0口用作地址/数据总线口使用时,是一个真正的双向口,用作与外部扩展的存储器或I/O连接,输出低8位地址和输出/输入8位数据。
2)当P0口用作通用I/O口使用时,需要在片外接上拉电阻,此时端口不存在高阻抗的悬浮状态,因此是一个准双向口。
如果单片机片外扩展了RAM和I/O接口芯片,P0口此时应作为复用的地址/数据总线口使用。如果没有外扩RAM和I/O接口芯片,此时即可作为通用I/O口使用。产生模拟开关的控制信号是由执行相应的指令来确定。