从港口获取输入

时间:2013-03-14 11:58:36

标签: assembly 8051

我正在学习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,那么默认情况下依赖于端口值的跳转指令将变为真。

1 个答案:

答案 0 :(得分:1)

这是正确的方法,你的模拟肯定有问题。 8051引脚有这种电路:

pin circuit

source

请注意Vcc的上拉是可选的,请查看特定芯片的数据表。

此电路的工作方式是,如果将引脚设置为0,输出将被拉至地,只能读为0,因为外部不能将其拉高。如果要允许输入两个级别,则必须将引脚设置为1。在这种情况下,您可以:

    如果您有内部上拉(读为1),则
  1. 保持输出浮动
  2. 将输出提取至Vcc(读为1
  3. 将输出拉至地(读作0
  4. 因此,如果连接按钮,则应将其接线,以便将引脚接地。如果需要,添加外部上拉电阻。

    <强>更新 要明确这一点:如果您按照上面的指示连接按钮(即按下按钮使引脚接地),如果按钮未按下按钮,输入将被读为1,并且为{ {1}}如果按按>。这是连接按钮的常用方法。

    使用0的插图。注意两个开关连接到端口1引脚7和6(即两个顶部位),一个打开,另一个关闭(推)。


    如果端口位设置为零,则无论开关状态如何,输入都将为零: port bits set to 0


    如果端口位设置为1,则对于打开的输入将为MCU 8051 IDE,对于已关闭的开关,输入将为1port bits set to 1

    通向最左侧开关的红色线路表示0位于P1.7(因为输出为Vcc且未被开关拉下)。