MCS-51单片机有4个双向的8位I/O口的P0~P3口为三态双向口 P1,P2,P3口为准双向口(用作输入时,口线被拉成高电平,所以称为准双向口)。
P0口是三态双向口,通称数据总线口,因为只有该口能直接用于对外部存储器的读/写操作。 P0口还可以用来输出外部存储器的第8位地址。 由于是分时输出,故应在外部加锁存器将此地址数据锁存,地址锁存信号用ALE。
P1口是专门供用户使用的I/O口,用户可以利用它作为I/O口线使用。P1口是准双向口。每一位均由锁存器(SFR)、输出驱动器和输入缓冲器组成。 它们的上拉电阻实际上不是线性电阻,而是由场效应管构成 ,每位锁存器均由D触发器组成。
每个I/O口都有两种读入方法:读锁存器和读引脚。每种读入方法都有相应的指令 。读引脚指令一般都是以I/O端口为原操作数的指令。 执行读引脚指令时,要打开三态门输入口状态。例如:读P1口的输入状态时。读引脚指令为:MOV A.P1
根据I/O口的结构及CPU的控制方式,当执行读引脚操作后,口锁存器状态与引脚状态应当是相同的。 但当给口锁器写某一状态后,相应的口引脚是否呈现锁存器状态,就与外电路的连接有关。 例如:用I/O口线驱动三极管的基极时,该口线的位锁存器的写入1后,将使三极管导通,而三极管一旦导通后,基极电平为“0”。 如果改口线无读引脚操作时,口锁存器与引脚状态不一致。