📅  最后修改于: 2021-01-07 05:45:15             🧑  作者: Mango
在8051中,使用四个端口和40个引脚进行I / O操作。以下引脚图显示了40个引脚的详细信息。 I / O操作端口保留32个引脚,每个端口有8个引脚。其他8个引脚分别指定为V cc ,GND,XTAL1,XTAL2,RST,EA(bar),ALE / PROG(bar)和PSEN(bar)。
它是40引脚PDIP(塑料双列直插式封装)
注–在DIP封装中,您可以通过IC中间的切口来识别第一个引脚和最后一个引脚。第一销是在该切割标记的左侧和装在楦销(即,40在这种情况下个销)是切割标记的右边。
四个端口P0,P1,P2和P3每个都使用8个引脚,从而成为8位端口。复位后,所有端口均配置为输入,准备用作输入端口。当第一个0写入端口时,它将成为输出。要将其重新配置为输入,必须将1发送到端口。
它具有8个引脚(32至39)。它可以用于输入或输出。与P1,P2和P3端口不同,我们通常将P0连接到10K欧姆上拉电阻,以将其用作开漏的输入或输出端口。
它也被指定为AD0-AD7,允许同时用作地址和数据。对于8031(即无ROM芯片),当我们需要访问外部ROM时,P0将同时用于地址和数据总线。 ALE(引脚号31)指示P0是否具有地址或数据。当ALE = 0时,它提供数据D0-D7,但是当ALE = 1时,它具有地址A0-A7。如果没有外部存储器连接,则必须在外部将P0连接到10K欧姆上拉电阻。
MOV A,#0FFH ;(comments: A=FFH(Hexadecimal i.e. A=1111 1111)
MOV P0,A ;(Port0 have 1's on every pin so that it works as Input)
它是一个8位端口(引脚1到8),可用作输入或输出。它不需要上拉电阻,因为它们已经在内部连接。复位后,端口1被配置为输入端口。以下代码可用于将55H和AAH的交替值发送到端口1。
;Toggle all bits of continuously
MOV A,#55
BACK:
MOV P2,A
ACALL DELAY
CPL A ;complement(invert) reg. A
SJMP BACK
如果将端口1配置为用作输出端口,则要再次将其用作输入端口,请通过对其所有位写入1来对其编程,如以下代码所示。
;Toggle all bits of continuously
MOV A ,#0FFH ;A = FF hex
MOV P1,A ;Make P1 an input port
MOV A,P1 ;get data from P1
MOV R7,A ;save it in Reg R7
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 another data from P1
MOV R5,A ;save it in R5
端口2总共占用8个引脚(引脚21至28),并且可用于输入和输出操作。与P1(端口1)一样,P2也不需要外部上拉电阻,因为它们已经在内部连接。它必须与P0一起使用,以为外部存储器提供16位地址。因此,它也被指定为(A0–A7),如引脚图所示。将8051连接到外部存储器时,它为16位地址的高8位提供了路径,并且不能用作I / O。复位后,端口2被配置为输入端口。以下代码可用于将55H和AAH的交替值发送到端口2。
;Toggle all bits of continuously
MOV A,#55
BACK:
MOV P2,A
ACALL DELAY
CPL A ; complement(invert) reg. A
SJMP BACK
如果将端口2配置为用作输出端口,则要再次将其用作输入端口,请通过对其所有位写入1来对其编程,如以下代码所示。
;Get a byte from P2 and send it to P1
MOV A,#0FFH ;A = FF hex
MOV P2,A ;make P2 an input port
BACK:
MOV A,P2 ;get data from P2
MOV P1,A ;send it to Port 1
SJMP BACK ;keep doing that
它也是8位的,可用作输入/输出。此端口提供一些非常重要的信号。 P3.0和P3.1分别是RxD(接收器)和TxD(发送器),并共同用于串行通信。 P3.2和P3.3引脚用于外部中断。 P3.4和P3.5分别用于定时器T0和T1。 P3.6和P3.7是写(WR)和读(RD)引脚。这些是低电平有效引脚,这意味着当它们被赋予0时它们将被激活,并且在基于8031的系统中用于向外部ROM提供读和写操作。
P3 Bit | Function | Pin |
---|---|---|
P3.0 | RxD | 10 |
P3.1 < | TxD | 11 |
P3.2 < | Complement of INT0 | 12 |
P3.3 < | INT1 | 13 |
P3.4 < | T0 | 14 |
P3.5 < | T1 | 15 |
P3.6 < | WR | 16 |
P3.7 < | Complement of RD | 17 |
端口0的双重作用-端口0也被指定为AD0–AD7,因为它既可以用于数据也可以用于地址处理。将8051连接到外部存储器时,端口0可以提供地址和数据。然后8051微控制器将输入复用为地址或数据,以节省引脚。
端口2的双重作用-端口P2除了用作I / O之外,还用于与端口0一起为外部存储器提供16位地址总线。端口P2也被指定为(A8–A15),而端口0提供了I / O。通过A0–A7的低8位。换句话说,我们可以说当8051连接到最大为64KB的外部存储器(ROM)时,这可以通过16位地址总线实现,因为我们知道216 = 64KB。 Port2用于16位地址的高8位,不能用于I / O,这是寻址外部ROM的任何程序代码的方式。
V cc-引脚40为芯片提供电源,并且为+5 V.
Gnd −引脚20为参考提供接地。
XTAL1,XTAL2(第18号引脚和第19号引脚) − 8051具有片上振荡器,但需要外部时钟来运行。石英晶体连接在芯片的XTAL1和XTAL2引脚之间。该晶体还需要两个30pF的电容器来产生所需频率的信号。每个电容器的一侧接地。 8051 IC有各种不同的速度,并且都取决于此石英晶体,例如,一个20 MHz的微控制器需要频率不超过20 MHz的晶体。
RST(9号引脚) -它是输入引脚和高电平有效引脚。在此引脚上施加高脉冲即1时,微控制器将复位并终止所有活动。此过程称为上电复位。激活上电复位将导致寄存器中的所有值丢失。它将程序计数器设置为全0。为了确保有效的复位输入,高电平脉冲必须至少在两个机器周期内保持高电平,然后才允许其变为低电平,这取决于电容器的值及其充电速率。 (机器周期是一条指令执行所需的最小频率)。
EA或外部访问(引脚号31) -它是输入引脚。该引脚为低电平有效引脚。施加低脉冲后,它将被激活。如果微控制器(8051/52)具有片上ROM,则EA(bar)引脚连接到V cc 。但是,在没有片上ROM的8031微控制器中,代码存储在外部ROM中,然后由微控制器获取。在这种情况下,我们必须将(31号插针)EA连接到Gnd,以指示程序代码存储在外部。
PSEN或程序存储使能(29号引脚) -这也是一个低电平有效引脚,即在施加低电平脉冲后被激活。它是一个输出引脚,与基于8031(即ROMLESS)的系统中的EA引脚一起使用,可以将程序代码存储在外部ROM中。
ALE或(地址锁存使能) -这是输出引脚,高电平有效。特别适用于8031 IC将其连接到外部存储器。可以在决定将P0引脚用作地址总线还是数据总线时使用它。当ALE = 1时,P0引脚用作数据总线,而当ALE = 0时,P0引脚用作地址总线。
它是8051编写8051的代码时使用最广泛的功能。有时我们只需要访问端口的1或2位,而不是整个8位。 8051提供了访问端口各个位的功能。
当以一位方式访问端口时,我们使用语法“ SETB X. Y”,其中X是端口号(0至3),Y是数据号D0-D7的位号(0至7)。其中D0是LSB,D7是MSB。例如,“ SETB P1.5”设置端口1的高位5。
以下代码显示了如何连续切换P1.2位。
AGAIN:
SETB P1.2
ACALL DELAY
CLR P1.2
ACALL DELAY
SJMP AGAIN
Instructions | Function |
---|---|
SETB bit | Set the bit (bit = 1) |
CLR bit | clear the bit (bit = 0) |
CPL bit | complement the bit (bit = NOT bit) |
JB bit, target | jump to target if bit = 1 (jump if bit) |
JNB bit, target | jump to target if bit = 0 (jump if no bit) |
JBC bit, target | jump to target if bit = 1, clear bit (jump if bit, then clear) |