📜  嵌入式系统I/O编程

📅  最后修改于: 2021-01-01 02:49:14             🧑  作者: Mango

嵌入式系统I / O编程

在8051微控制器中,通过使用四个端口和40个引脚来执行I / O操作。 I / O操作端口使用32个引脚,每个端口有8个引脚。其余的8引脚用于提供

让我们看一下微控制器的40引脚塑料双列直插式封装(PDIP)集成电路:

-在微控制器的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的结构,该端口带有外部连接的上拉电阻:

让我们看一下将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(1号针脚8号针脚):

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

如果将端口1配置为输出端口,然后再次使用端口1作为输入端口,则将1写入端口1的所有位,如以下代码所示:-

MOV    A, #FFH        ; Value of Accumulator register A=FF hex
MOV     P1, A      ; Port 1 worked as an input port
MOV     A, P1      ; get data from P1
MOV     R5, A      ; save it in Register R5
ACALL   DELAY      ; wait
MOV     A, P1      ; get another data from P1
MOV     R6, A      ; save it in R6
ACALL   DELAY      ; wait
MOV     A, P1      ; get data from P1
MOV     R7, 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
MOV     P2, A      ; Port 2 worked as an input port
BACK:
 MOV     A, P1      ; get data from P2
MOV     P1, A      ; save it in Port 1
SJMP     BACK      ; 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 Function P3 Bit
10 Receiver (RxD) P3.0
11 Transmitter (TxD) P3.1<
12 Complement of 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 XY”,其中X是端口号,范围从0到3,Y是位数,范围从0到7。

例如:-“ SETB P1.3”设置端口1的高位3。

让我们看一下用于连续切换P1.5的汇编代码:

AGAIN:
SETB    P1.5
ACALL     DELAY
CLR    P1.5
ACALL     DELAY
SJMP    AGAIN

一位指令:

Instruction Function
CLR bit Clear the bit (bit=0)
CPL bit Complement the bit (bit=NOT bit)
SETB bit Set the bit (bit = 1)
JB bit, target Jump to target if bit = 1 (jump if bit)
JBC bit, target Jump to target if bit = 1, clear bit (jump if bit, then clear)
JNB bit, target Jump to target if bit = 0 (jump if no bit)