单片机系统结构(四)——并行I/O结构及操作

8051共有4个8位I/O口,共32口线。
每位均有自己的锁存器(SFR),输出驱动器和输入缓冲器。

P0口的结构与操作

P0口
控制信号为0时,P0口做一般I/O口
控制信号为1时,P0口为地址/数据复用总线

P0口做一般I/O口使用

  1. 数据输出
    写脉冲加在C上
  • 若D=0,则$\bar Q$=1,则下拉FET导通,P00引脚输出0
  • 若D=1,则$\bar Q$=0,则下拉FET截止,P00引脚高阻

注意:P0口作为一般I/O口时,要外接上拉电阻,以避免数据输出时,出现三态。

  1. 数据输入
  • 直接读端口引脚处的数据

       由下面的三态缓冲器将端口数据送入内部总线  
  • 锁存器Q端的数据

       由上面的三态缓冲器将端口数据送入内部总线    
  • 读端口引脚处的数据与读锁存器处的数据的区别

    • 读锁存器的数据为了避免读错引脚上的电平
    • 读锁存器的数据为了适应“读-修改-写”类指令

“读-修改-写”类指令

  1. 指令的特点
    先读口(锁存器Q端)
    对读入的数据进行修改
    再把修改后的数据写到端口上

  2. 规律
    目的操作数为I/O口或其中的某一位时,均为“读-修改-写”类指令,要从锁存器中读取数据
    源操作数为I/O口或其中的某一位时,要直接读引脚处数据

P0作为一般输入输出接口时是一个准双向口

  1. 原因
    前一时刻,如果输出数据0,则Q=1,下拉FET导通,P00=0
    下一时刻,要输入数据,由于下拉FET处于开通状态,数据不可能被正确输入,因而是一个准双向口
  2. 解决办法
    输入数据前,先把该口置1,使下拉FET截止,以便数据能正确输入

P0口作为地址/数据总线

控制信号为高电平1,转换开关接至反向器输出端,同时与门开锁

输入数据时,与作为一般I/O使用时相同,应先向该口置1(系统自动完成)
P0输出地址或数据时

  • 若输出1,则上面FET开通、下面FET关断,P0.0=1
  • 若输出0,则下面FET开通、上面FET关断,P0.0=0
    注意: P0作为数据/地址总线复用,输出数据时,不需外接上拉电阻

P1口的结构与操作

输出部分有内部上拉电阻R*约为20K,输出数据时不必外加上拉电阻
其他部分与P0端口使用相类似,也是一个准双向口

P2口的结构与操作

控制信号为0时,P2口做一般I/O口
控制信号为1时,P2口为高8位地址输出

当P2口作为普通I/O口使用时,用法和P1口类似。
P2口输出地址信息时,此时单片机完成取指操作或对外部数据存储器16位地址的读写操作。

P3口的结构与操作

做普通端口使用时,变异功能应为“1”
使用第二功能时,输出端口锁存器应为“1”

  • P3口第二功能
引脚 转义引脚 功能说明
P3.0 RXD 串行数据接收端
P3.1 TXD 串行数据发送端
P3.2 INT0 外部中断0请求
P3.3 INT1 外部中断1请求
P3.4 T0 计数器0外部输入
P3.5 T1 计数器1外部输入
P3.6 WR 外部数据存储器写
P3.7 RD 外部数据存储器读

其它说明

  1. I/O性质的另一观点
  • P0为三态双向I/O
    因当要输入数据时,先给P0锁存器置1,这时场效应管关断,该口线成为高阻状态,故称P0为三态双向口。
  • P1P3为准双向口
    因当要输入数据时,先给P1
    P3锁存器置1,这时场效应管关断,但由于P1P3内部均有上拉电阻,该口线被拉成高电平,故称P1P3为准双向口。
  1. I/O的输出负载能力
  • P0口的每一位输出可以驱动8个LS TTL输入。
  • P1~P3口的每一位输出可以驱动4个LS TTL输入。
    负载能力产生的原因: 如果各口线内部输出驱动电路中的电流过大,可能导致输出信号电平的紊乱。