嵌入式系统 I/O 编程

2024 年 8 月 29 日 | 4 分钟阅读

在 8051 单片机中,I/O 操作通过使用四个端口和 40 个引脚来执行。 I/O 操作端口使用 32 个引脚,每个端口有 8 个引脚。 剩余的 8 个引脚用于提供

让我们看看单片机的 40 引脚塑料双列直插式封装 (PDIP) 集成电路

ES I/O Programming1

注意 - 在单片机的 DIP 结构中,我们可以通过 IC 中间的切口来识别第一个和最后一个引脚,该切口称为单片机的凹口。 第一个引脚位于凹口的左侧,最后一个引脚位于凹口的右侧。


I/O 端口及其功能

在单片机中有四个输入/输出端口 P0、P1、P2 和 P3,每个端口都是一个 8 位端口,每个端口有 8 个引脚。 在 RESET 期间,所有端口都用作输入端口。 当端口获得第一个 0 时,它就变成了一个输出端口。 要将其重新配置为输入,必须将高电平信号 (1) 发送到端口。

端口 0(引脚号 32 - 引脚号 39)

端口 0 包含 8 个引脚。 它可以被用作输入或输出。 通常,我们将 P0 连接到 10K 欧姆的上拉电阻,以用作漏极开路输入或输出端口。

它也被称为 AD0-AD7,允许它用作地址和数据传输端口。 当我们想要访问外部 ROM 时,P0 用作数据和地址总线。

地址锁存使能 (ALE) 引脚号 31 指示 PO 是用作地址还是数据。

当 ALE=0 时,它提供数据 D0-D7。

当 ALE=1 时,它提供地址 A0-A7。

让我们看看带有外部连接上拉电阻的端口 0 的结构

ES I/O Programming2

让我们看一个汇编语言代码,使端口 0 用作输入:-

端口 1(引脚号 1-引脚号 8)

它也是一个 8 位端口,可以用作输入或输出。 它不需要外部连接的上拉电阻,因为它们已经存在于内部。 复位后,端口 1 用作输入端口。

如果端口 1 配置为输出端口,那么要再次使用端口 1 作为输入端口,我们将 1 写入端口 1 的所有位,如下面的代码所示:-

端口 2(引脚号 21-引脚号 28)

端口 2 总共使用 8 个引脚,它也可以用于输入和输出操作。 与端口 1 相同,P2 也不需要外部上拉电阻。 端口 2 可以与 P0 一起使用,为外部存储器提供 16 位地址。 因此,它被指定为 (A0-A7),如引脚图中所示。

如果端口 2 配置为输出端口,那么要再次使用它作为输入端口,我们将 1 写入端口 2 的所有位,如下面的代码所示:-

端口 3(引脚号 10-引脚号 17)

端口 3 也是 8 位的,可以用作输入/输出。 此端口提供了一些重要的信号。

P3.1 和 P3.0 分别是 RxD(接收器)和 TxD(发射器),它们共同用于串行通信。

P3.3 和 P3.2 引脚用作外部中断。

P3.5 和 P3.4 用作定时器 T1 和 T0。

P3.6 和 P3.7 是写 (WR) 和读 (RD) 引脚。

让我们看看显示单个引脚功能的端口 3 表

引脚函数P3 位
10接收器 (RxD)P3.0
11发射器 (TxD)P3.1<
12INT 0 的补码P3.2<
13INT 1P3.3<
14定时器 0(TO)P3.4<
15定时器 1(T1)P3.5<
16写 (WR)P3.6<
17读的补码 (RD)P3.7<

I/O 端口和位寻址

这是为 8051 编写代码时 8051 最常用的功能。 有时只需要使用端口的 1 或 2 位,而不是使用整个 8 位。 8051 单片机提供了使用端口每一位的功能。

以单比特方式使用端口时,我们提供语法“SETB X.Y”,其中 X 是端口号,范围从 0 到 3,Y 是比特号,范围从 0 到 7。

例如:- “SETB P1.3” 将端口 1 的第 3 位设置为高电平。

让我们看一个汇编代码,用于连续切换 P1.5 的位


单比特指令

指令函数
CLR 位清除位 (bit=0)
CPL 位对该位求反 (bit=NOT bit)
SETB 位设置位 (bit = 1)
JB 位,目标如果 bit = 1,则跳转到目标(如果 bit 则跳转)
JBC 位,目标如果 bit = 1,则跳转到目标,清除位(如果 bit 则跳转,然后清除)
JNB 位,目标如果 bit = 0,则跳转到目标(如果无 bit 则跳转)
下一个主题寻址模式