8051共有4个8位I/O口,共32口线。
每位均有自己的锁存器(SFR),输出驱动器和输入缓冲器。
P0口的结构与操作
控制信号为0时,P0口做一般I/O口。
控制信号为1时,P0口为地址/数据复用总线。
P0口做一般I/O口使用
- 数据输出
写脉冲加在C上
- 若D=0,则$\bar Q$=1,则下拉FET导通,P00引脚输出0
- 若D=1,则$\bar Q$=0,则下拉FET截止,P00引脚高阻
注意:P0口作为一般I/O口时,要外接上拉电阻,以避免数据输出时,出现三态。
- 数据输入
直接读端口引脚处的数据
由下面的三态缓冲器将端口数据送入内部总线
读锁存器Q端的数据
由上面的三态缓冲器将端口数据送入内部总线
读端口引脚处的数据与读锁存器处的数据的区别
- 读锁存器的数据为了避免读错引脚上的电平
- 读锁存器的数据为了适应“读-修改-写”类指令
“读-修改-写”类指令
指令的特点
先读口(锁存器Q端)
对读入的数据进行修改
再把修改后的数据写到端口上规律
当目的操作数为I/O口或其中的某一位时,均为“读-修改-写”类指令,要从锁存器中读取数据
当源操作数为I/O口或其中的某一位时,要直接读引脚处数据
P0作为一般输入输出接口时是一个准双向口
- 原因
前一时刻,如果输出数据0,则Q=1,下拉FET导通,P00=0
下一时刻,要输入数据,由于下拉FET处于开通状态,数据不可能被正确输入,因而是一个准双向口 - 解决办法
输入数据前,先把该口置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 | 外部数据存储器读 |
其它说明
- I/O性质的另一观点
- P0为三态双向I/O
因当要输入数据时,先给P0锁存器置1,这时场效应管关断,该口线成为高阻状态,故称P0为三态双向口。 - P1
P3为准双向口P3锁存器置1,这时场效应管关断,但由于P1
因当要输入数据时,先给P1P3内部均有上拉电阻,该口线被拉成高电平,故称P1P3为准双向口。
- I/O的输出负载能力
- P0口的每一位输出可以驱动8个LS TTL输入。
- P1~P3口的每一位输出可以驱动4个LS TTL输入。
负载能力产生的原因: 如果各口线内部输出驱动电路中的电流过大,可能导致输出信号电平的紊乱。