嵌入式系统I/O编程

本文概述

  • I / O端口及其功能
  • I / O端口和位寻址
  • 一位指令
在8051微控制器中, 通过使用四个端口和40个引脚来执行I / O操作。 I / O操作端口使用32个引脚, 每个端口有8个引脚。其余的8引脚用于提供
让我们看一下微控制器的40引脚塑料双列直插式封装(PDIP)集成电路:
嵌入式系统I/O编程

文章图片
注-在微控制器的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的结构, 该端口带??有外部连接的上拉电阻:
嵌入式系统I/O编程

文章图片
让我们看一下将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<
I / O端口和位寻址 在编写8051的代码时, 它是8051的最常用功能。有时只需要使用端口的1或2位, 而不是使用整个8位。 8051微控制器提供了使用端口每一位的功能。
当以一位方式使用端口时, 我们提供语法“ 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, 则跳转到目标(如果没有位, 则跳转)

    推荐阅读