

也就是说,在内存空间里,他们处在特殊功能寄存器的部分,且都可以按位寻址
补充
- 51的IO口灌电流能力强于拉电流能力
Cortex-M4的GPIO的灌电流能力与拉电流能力相同
- IO口在复位时的状态为高电平
- P0/P2可以作为拓展数据线/地址线
P1口:最简单的通用双向IO口❗
准双向口,输入有要求

P1口是一个结构最简单的8位准双向I/O口。
- 结构特点:
- 内部自带上拉电阻 。
- 驱动能力相对较弱,可驱动4个TTL负载 。
- 主要功能:
- 只能作为通用的I/O口使用,没有第二功能 。
- 使用注意:
- 和P0口一样,当P1口作为输入使用时,也需要先向其锁存器写入
1
,以关闭输出级的场效应管 。
P0口❗
口是一个8位的双向I/O口,也是一个功能最复杂的端口(参见Chapter8,芯片的拓展很大程度上依赖口)
- 结构特点:
- 内部没有上拉电阻,是一个漏极开路的输出结构 。
- 当作为通用I/O口使用时,必须外接上拉电阻才能正常输出高电平 。
- 驱动能力较强,可以驱动8个TTL负载 。
- 主要功能:
- 通用I/O口:作为基本的输入输出端口使用。
- 地址/数据复用总线:在访问外部存储器时,P0口分时复用,作为低8位地址总线 (A0-A7) 和8位数据总线 (D0-D7) 。此时,需要配合ALE信号和地址锁存器(如74LS373)来分离地址和数据 。
- 使用注意:
- 作为输入口使用前(也就是读引脚之前),必须先向P0口锁存器写入
1
(即MOV P0, #0FFH
),使输出级的场效应管截止,让引脚处于高阻态,以便正确读取外部信号 。 - “读”操作应区分读引脚和读锁存器两种情况:
- 读引脚:读取的是I/O外部引脚上此时此刻的真实电平状态。
- 读锁存器:读取的是I/O内部锁存器里存储的值,也就是CPU上一次向这个口写入的值
凡属于读-修改-写方式的指令从锁存器读入信号,其它指令则从端口引脚线上读入信号。

P2口

P2口也是一个8位的准双向I/O口,功能介于P0和P1之间。
- 结构特点:
- 内部自带上拉电阻 。
- 可驱动4个TTL负载 。
- 主要功能:
- 通用I/O口:作为基本的输入输出端口。
- 高8位地址总线:在访问外部存储器时,P2口作为高8位地址总线 (A8-A15) 使用 。
- 使用注意:
- 当系统未外扩或只外扩小于256B的数据存储器时(如使用
MOVX A, @Ri
指令),P2口可以作为通用I/O口使用 。 - 当系统外扩了64KB的程序存储器或数据存储器时,P2口需要提供高8位地址,此时它就不能再作为通用I/O口了 。
P3口

P3口是一个具有多种第二功能的8位准双向I/O口。
- 结构特点:
- 内部自带上拉电阻 。
- 可驱动4个TTL负载 。
- 主要功能:
- 通用I/O口:作为基本的输入输出端口。
- 第二功能(替代功能):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 | 外部RAM写选通 |
P3.7 | RD | 外部RAM读选通 |