PORTとPINの読み取りの違い


9

PORTAとPINAの違いは何ですか?ポートとそのピンの関係は何ですか?私は本当に混乱しています!!! PORTの読み取りの例:(読み取りピンはここでは役に立ちません)

アセンブリf = 1MHZ ATmega8 1msごとにPORTBを補完する必要があります。(Dutycycle = 50%)

    LDI R16,$FF
    OUT DDRB,R16
    MAIN: LDI R16,00
    DELAY:CPI R16,200
    BREQ LOOP
    INC R16
    RJMP DELAY
    loop:IN R17,PORTB
    COM R17
    OUT PORTB,R17
    OUT R17,PORTB
    RJMP MAIN

水晶玉を使用して、使用しているマイクロコントローラー(およびコード:どのプログラミング言語)を見つけるのですか?
Wouter van Ooijen 2013

編集済みです。
ハンナ

これはあなた自身のコードですか、それとも例からですか?例だとしたらどこから来たの?なぜ「ここではピンの読み取りは役に立たない」と言うのですか?
angelatlarge 2013

以前AVRスタジオでテストしました。INR17、PINBは正しいと思いますか?
ハンナ

回答:


13

PORTは出力バッファ、PINは入力バッファです。

ピンを「高」または「低」電圧に設定する場合は、PORTレジスタに書き込みます。

現在ピンに供給されている電圧を知りたい場合は、PINレジスタを読み取ります。

これらのレジスタのビットは、汎用入出力ポートの対応するピンを表します。

これは、単一のピンに接続されたAVR内の電子機器の簡略化された回路図です(完全なデータシートについては、こちらご覧ください)。

この回路ブロックは、ピンごとに繰り返されます。これらのうち8つがポート(たとえば、ポートA)を形成します。

ここに画像の説明を入力してください

左端の正方形(外界への物理的な接続を表す)から始めて、3つのパスを確認できます。

  1. 一番上のパスはソフトウェアで選択可能なプルアップ抵抗です
  2. 中央のパスは、ピンが出力として設定されている場合に使用されます
  3. 最下位パスは、ピンが入力として構成されている場合に使用されます

ピンが内部周辺機器と共有されている場合、この回路の一部またはすべてをバイパスできることに注意してください。たとえば、A / Dコンバーター(ADC)。


+1ポートが入力として構成されている場合、PORTの任意のビットに1を書き込むと、そのピンの内部プルアップ抵抗が有効になることにも注意してください。
マットヤング

PORTはいつ読むべきですか?
ハンナ

PINから読み取ります。PORTからの読み取りは、何も有用なものにはしません。
Matt Young

@user-PORTから読み取ると、プルアップ抵抗の状態がわかります(プルアップがそのピンで有効になっているかどうかにかかわらず)。
DrFriedParts 2013

PORTを読むサンプルを追加しました
Hanna

4

DrFriedPartsの回答に完全に同意しますが、それを追加したいと思います。実際に読んでPORT、ポート/ピンがOUTPUT高または低(DDR=の場合1、ポート/ピンが出力として構成されている)として構成されているか、内部プルアップ抵抗がアクティブになります(DDR=の場合0、ポート/ピンは入力として構成されます)。このようにして、次のシナリオのように、一般的なストレージとして、または出力/入力プルアップの状態に関する情報を渡すために、ポートポートを(かなりばかげた方法で)使用できます。

おそらく、プログラムの一部がポートに何かを書き込んだり、プルアップをアクティブ化/非アクティブ化したり、プログラムの別の部分がそれを読み取っPORTて、その構成方法を見つけたりします。PORT書き込みの直後に読むのPORTは意味がありません。に書き込んだPORTことで、の価値がわかりますPORT


より良いコードを教えてもらえますか?IN R17、PINBがそこに答えないのはなぜですか?
ハンナ

あなたの質問からあなたが何をしようとしているのかはっきりしていません...あなたの質問でそれを明確にできます:このコードスニペットの目的は何ですか?特定の周波数とデューティサイクルでポートをトグルするだけなのですか?
angelatlarge 2013

はい!!!これだけ
Hanna

1

目的からすると、PORTからの読み取りは実際には意味があります。問題のピンは出力ピンであり、書き込んだ最後の値を読み取り、切り替えて、書き戻したいだけです。したがって、ポートレジスタを外部から観察可能なRAMのバイトとして使用しています。

一方、この特定のアプリでは、単に値をレジスターに保持するだけでよく、PORTレジスターを読み戻す必要すらありません。


では、なぜPINの読み取りが正しくないのでしょうか。
Hanna

PINから取得する値は、原則として、外部でピンに接続されているものに依存します。特定のアプリケーションでは、以前に自分で書き込んだ値にのみ関心があります(もちろん、これはIの典型ではありません) / Oピン)。ただし、実際には、PORTとPINの値が同じであることを期待しています(試してみましたか?)。
microtherion 2013

AVR studio.Iにあなたが言ったことはtrue.Weだけのポート値を補完する必要があると思う前に、はい、私は...それをテストしてみた
ハンナ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.