如果我不将 8051 中的端口设置为输入或输出会怎样?

问题描述

我是初学者,最近刚开始,所以如果这是一个愚蠢的问题,请耐心等待。 所以在 8051 MCU 中我们使用 MOV P1,#00HMOV P1,#0FFH 分别将端口设置为输入或输出。 我的问题是,如果我没有特别提到端口是输入还是输出,程序还能工作吗? 我正在尝试实现一个查找表,其中 P1 将采用输入 (0-9) 并显示其正方形 在 P2。

        ORG 0000H
        MOV DPTR,#TBLE
        MOV P1,#0FFH
        MOV P2,#00H
        ;Begin Transfer
NEXT:   MOV A,P1
        MOV R1,A
        MOVC A,@A+DPTR
        MOV P2,A
        CJNE R1,#00H,NEXT
        SJMP $


        ORG 0100H
    TBLE:   DB  00H,01H,04H,09H,16H,25H,36H,49H,64H,81H
        END

解决方法

因此在 8051 MCU 中,我们使用 MOV P1,#00HMOV P1,#0FF 分别将端口设置为输入或输出。

这已经错了:

您使用 MOV P1,#00H 将端口的所有引脚设置为低电平。如果 P1 的所有引脚都是 outputs 并且想要将所有引脚设置为高电平,您还可以使用 MOV P1,#0FFH

在 8051 MCU 上,(几乎)所有引脚都是开漏输出:您可以将输出值为“高”的引脚拉到“低”,因此如果您想使用,可以将“高”输出到引脚它作为输入。

但是,您必须不时将输出引脚设置为“高”;否则引脚总是“低”,这绝对没有意义:

您可以简单地使用电源的负极,而不是使用微控制器!

...如果我没有特别提到端口是输入还是输出...

P0...P3 的重置值为 0FFH

这意味着这些寄存器在启动 MCU 后具有值 0FFH。如果您不明确写入这些寄存器,它们将保留值 0FFH

这也有道理:

如果初始值不是 0FFH,则在 MOV P1,0FFH 指令之前的几微秒内,某些引脚将处于“低”状态。

如果您有一个输入并且来自外部的值是“高”,并且在执行 P1 之前 MOV P1,0FFH 包含另一个值,那么您将有一个快捷方式。