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

Posted

技术标签:

【中文标题】如果我不将 8051 中的端口设置为输入或输出会怎样?【英文标题】:What happens if I don't set a port in 8051 as input or output? 【发布时间】:2021-06-17 10:50:09 【问题描述】:

我是初学者,最近才开始,所以如果这是一个愚蠢的问题,请多多包涵。 所以在 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

【问题讨论】:

【参考方案1】:

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

这已经错了:

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

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

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

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

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

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

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

这也是有道理的:

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

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

【讨论】:

以上是关于如果我不将 8051 中的端口设置为输入或输出会怎样?的主要内容,如果未能解决你的问题,请参考以下文章

c8051f320学习,单片机不外乎时钟IO串口USB等外设用法

AudioKit - 记录默认输入(麦克风)而不将其发送到输出

为啥 execlp() 不将输出打印到终端?

如何在不将 UIScrollView 的 delaysContentTouches 设置为 NO 的情况下快速点击它时使 UIScrollView 中的按钮突出显示

汇编 输入输出指令

PaddleDetection中的目标检测模型的输入和输出