【问题标题】:What happens if I don't set a port in 8051 as input or output?如果我不将 8051 中的端口设置为输入或输出会怎样?
【发布时间】: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

【问题讨论】:

    标签: assembly 8051 mcu


    【解决方案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 之前包含另一个值,您将有一个快捷方式。

    【讨论】:

      猜你喜欢
      • 2017-02-20
      • 2011-12-22
      • 2015-02-13
      • 2019-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多