0

8051アセンブリプログラミングを学んでいます。私は自分の本で「ポートを入力ポートにするためには、ポートのすべてのビットに 1 を書き込むことによってポートをプログラムする必要がある」と読みました。でも、これは間違っていませんか?

すべてのビットを 1 に設定し、入力時に入力したい場合は、10102 番目のピンと 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:

移動 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 にリセットしないと、デフォルトでポート値に依存するジャンプ命令が true になります。

4

1 に答える 1

1

それは正しい方法です。シミュレーションに何か問題があるに違いありません。8051 ピンには次のような回路があります。

ピン回路

ソース

プルアップVccはオプションであることに注意してください。特定のチップのデータシートを確認してください。

この回路は、ピンを に設定する0と、出力がグランドに引き下げられ0、外部から高く引き上げることができないため、読み取りのみが可能になるように機能します。両方のレベルを入力できるようにする場合は、ピンを に設定する必要があります1。この場合、次のことができます。

  1. 内部プルアップがある場合は、出力をフローティングのままにします( として読み取ります1
  2. 出力をプルしますVcc( として読み取ります1)
  3. 出力をグランドに引きます( として読み取ります0

したがって、ボタンを接続する場合は、ピンがグランドに引っ張られるように配線する必要があります。必要に応じて、外部プルアップ抵抗を追加してください。

この点を明確にするために更新 します。上記のようにボタンを配線すると (つまり、押されたボタンがピンを接地します)、入力はボタンが押されていないかのように読み取られ、ボタン1押されたかのように読み取られます。これは、ボタンを接続する通常の方法です。0

を使用したイラストMCU 8051 IDE。2 つのスイッチがポート 1 のピン 7 と 6 (つまり、上位 2 ビット) に接続されていることに注意してください。一方は開いており、もう一方は閉じています (押されています)。


ポート ビットがゼロに設定されている場合、スイッチの状態に関係なく、入力はゼロになります。 ポート ビットを 0 に設定


ポート ビットが 1 に設定されている場合、入力は1開いているスイッチと0閉じているスイッチ用になります。 ポート ビットを 1 に設定

左端のスイッチにつながる赤い配線P1.7は、Vcc(出力が1あり、スイッチによってプルダウンされていないため) であることを示します。

于 2013-03-14T12:37:57.957 に答える