assembly - 如果我不将 8051 中的端口设置为输入或输出会怎样?
问题描述
我是初学者,最近才开始,所以如果这是一个愚蠢的问题,请多多包涵。所以在 8051 单片机中我们使用
MOV P1, #00H
或MOV 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 单片机中我们使用
MOV P1, #00H
或MOV P1, #0FF
将端口分别设置为输入或输出。
这已经是错误的了:
您用于MOV P1, #00H
将端口的所有引脚设置为低电平。如果 的所有引脚P1
都输出并且想要将所有引脚设置为高电平,您也可以使用MOV P1, #0FFH
.
在 8051 MCU 上,(几乎)所有引脚都是开漏输出:您可以将输出值为“高”的引脚拉至“低”,因此如果您希望将其用作输入,则将“高”输出到引脚.
但是,您必须不时将输出引脚设置为“高”;否则引脚将始终为“低”,这绝对没有意义:
您可以简单地使用电源的负极而不是使用微控制器!
...如果我没有特别提到端口是输入还是输出...
P0
...P3
的复位值为0FFH
。
这意味着这些寄存器0FFH
在启动 MCU 后都有值。如果您没有明确写入这些寄存器,它们将保留 value 0FFH
。
这也是有道理的:
如果初始值不是0FFH
,则某些引脚会在MOV P1, 0FFH
指令前几微秒内“低”。
如果您有一个输入并且来自外部的值是“高”,那么如果在执行P1
之前包含另一个值,您将有一个快捷方式MOV P1, 0FFH
。
推荐阅读
- javascript - 如何在后台的tizen Web应用程序中每15分钟振动一次?
- python - 如何使用 python 解决 DNN(深度神经网络)模型中的 ValueError?
- javascript - 再次按下输入/按钮后重置 div/警报?
- c# - 如何在 ListView xamarin 上返回已处理的集合
- javascript - 如果从扩展反序列化为具体对象
- pytorch - 如何通过torch.nn.conv1d更简单地将张量(形状:[a,b,c])卷积到张量(形状:[1,b,1])?
- mongodb - 如何仅在 mongodb 中查找所有嵌入式属性匹配的嵌入式事件?
- ios - 更新到 iOS15 后的内部应用程序:需要更新应用程序
- java - Java双向链表节点设置
- javascript - 从数组中选择数据并在段落中显示另一个数组中的数据 - javascript