我正在学习8051汇编编程。我在我的书中读到“为了使端口成为输入端口,必须通过将1写入所有位来编程端口。”这不是错的吗?
如果我将所有位设置为1,并且想要在输入处输入1010
,我将按下连接到第2针和第4针的按钮输入1010,但端口将读取所有1。我在Keil uVision Simulation上尝试了它,发现了这个问题。
这是一个问题还是我误解了?
org 00h
Reset:
mov P0,#00h
mov P1,#00h
mov P2,#00h
mov P3,#00h
TakeInput:
jb P2.0,Addition// in assembler simulation, this condition is true if I set P2 to #0ffh, which is not required. The user should set this bit for making this condition true
sjmp TakeInput
Addition:
mov A,P0 添加A,P1
mov P3,A
acall Delay
ajmp Reset
Delay:
mov R0,#1
here:
mov R1,#1
again:
djnz R1,again
djnz R0,here
ret
end
如果我没有将所有端口重置为0,那么默认情况下依赖于端口值的跳转指令将变为真。
答案 0 :(得分:1)
这是正确的方法,你的模拟肯定有问题。 8051引脚有这种电路:
(source)
请注意Vcc
的上拉是可选的,请查看特定芯片的数据表。
此电路的工作方式是,如果将引脚设置为0
,输出将被拉至地,只能读为0
,因为外部不能将其拉高。如果要允许输入两个级别,则必须将引脚设置为1
。在这种情况下,您可以:
1
),则Vcc
(读为1
)0
)因此,如果连接按钮,则应将其接线,以便将引脚接地。如果需要,添加外部上拉电阻。
<强>更新强>
要明确这一点:如果您按照上面的指示连接按钮(即按下按钮使引脚接地),如果按钮>未按下按钮,输入将被读为1
,并且为{ {1}}如果按按>>。这是连接按钮的常用方法。
使用0
的插图。注意两个开关连接到端口1引脚7和6(即两个顶部位),一个打开,另一个关闭(推)。
如果端口位设置为零,则无论开关状态如何,输入都将为零:
如果端口位设置为1,则对于打开的输入将为MCU 8051 IDE
,对于已关闭的开关,输入将为1
:
通向最左侧开关的红色线路表示0
位于P1.7
(因为输出为Vcc
且未被开关拉下)。