本文概述
- I / O端口及其功能
- I / O端口和位寻址
- 一位指令
让我们看一下微控制器的40引脚塑料双列直插式封装(PDIP)集成电路:
文章图片
注-在微控制器的DIP结构中, 我们可以通过使用IC中间存在的切口来识别第一个和最后一个引脚, 该切口称为微控制器的缺口。第一个销钉位于槽口的左侧, 最后一个销钉位于槽口的右侧。
I / O端口及其功能 在微控制器中, 有四个输入/输出端口P0, P1, P2和P3, 每个端口都是具有8个引脚的8位端口。 RESET期间, 所有端口均用作输入端口。当端口的第一个端口为0时, 它将成为输出端口。为了将其重新配置为输入, 必须将高电平信号(1)发送到端口。
端口0(Pin No 32-Pin No 39):
端口0包含8个引脚。可以用作输入或输出。通常, 我们将P0与10K欧姆上拉电阻相连, 以将其用作开漏的输入或输出端口。
它也称为AD0-AD7, 它可以同时用作地址和数据传输端口。当我们想增加外部ROM时, P0既用作数据总线, 又用作地址总线。
地址锁存使能(ALE)引脚号31指示PO是否用作地址或数据。
当ALE = 0时, 它将提供数据D0-D7。
当ALE = 1时, 它将提供地址A0-A7。
让我们看一下端口0的结构, 该端口带??有外部连接的上拉电阻:
文章图片
让我们看一下将Port 0用作输入的汇编语言代码:
MOV A, #FFH;
(comments: A=FFH i.e. A=1111 1111)
MOV P0, A;
(Port 0 all pin have 1's so that it work as Input)
端口1(Pin No 1-Pin No 8):
它也是一个8位端口, 可以用作输入或输出。不需要外部连接的上拉电阻, 因为它们已经在内部存在。重置后, 端口1用作输入端口。
如果将端口1配置为输出端口, 然后再次使用端口1作为输入端口, 则将1写入端口1的所有位, 如以下代码所示:
MOV A, #FFH;
Value of Accumulator register A=FF hex
MOVP1, A;
Port 1 worked as an input port
MOVA, P1;
get data from P1
MOVR5, A;
save it in Register R5
ACALLDELAY;
wait
MOVA, P1;
get another data from P1
MOVR6, A;
save it in R6
ACALLDELAY;
wait
MOVA, P1;
get data from P1
MOVR7, A;
save it in R7
端口2(21号针脚-28号针脚):
端口2总共使用8个引脚, 也可以用作输入和输出操作。与端口1相同, P2也不需要外部上拉电阻。端口2可以与P0一起使用, 以为外部存储器提供16位地址。因此, 如引脚图所示, 它被指定为(A0-A7)。
如果将端口2配置为输出端口, 那么为了再次将其用作输入端口, 我们将1写入端口2的所有位, 如以下代码所示:
MOV A, #FFH;
Value of Accumulator register A=FF hex
MOVP2, A;
Port 2 worked as an input port
BACK:
MOVA, P1;
get data from P2
MOVP1, A;
save it in Port 1
SJMPBACK;
Keep doing that
端口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表:
Pin | 功能 | P3位 |
---|---|---|
10 | Receiver (RxD) | P3.0 |
11 | Transmitter (TxD) | P3.1 < |
12 | INT 0的补码 | P3.2< |
13 | INT 1 | P3.3< |
14 | Timer 0(TO) | P3.4 < |
15 | Timer 1(T1) | P3.5 < |
16 | Write (WR) | P3.6< |
17 | Complement of read (RD) | P3.7< |
当以一位方式使用端口时, 我们提供语法“ SETB X.Y”, 其中X是端口号, 范围从0到3, Y是位数, 范围从0到7。
例如:-“ SETB P1.3”设置端口1的高位3。
【嵌入式系统I/O编程】让我们看一下用于连续切换P1.5的汇编代码:
AGAIN:
SETB P1.5
ACALLDELAY
CLR P1.5
ACALLDELAY
SJMP AGAIN
一位指令
指令 | 功能 |
---|---|
CLR位 | Clear the bit (bit=0) |
CPL bit | Complement the bit (bit=NOT bit) |
SETB bit | Set the bit (bit = 1) |
JB位, 目标 | 如果bit = 1则跳转到目标(如果bit则跳转) |
JBC位, 目标 | 如果bit = 1, 则清除目标(清除位)(如果跳过, 则清除) |
JNB位, 目标 | 如果位= 0, 则跳转到目标(如果没有位, 则跳转) |