27

私はすでにデータシートとグーグルを読みましたが、まだ何かを理解していません.

私の場合、PIC18F26K20 の PIN RC6 を INPUT モードに設定しました。

TRISCbits.TRISC6 = 1;

次に、PORT と LATCH で値を読み取ると、値が異なります。

v1 = LATCbits.LATC6;

v2 = PORTCbits.RC6;

v1 は 0 を返し、v2 は 1 を返します。

それは正常ですか?どの場合に PORT を使用する必要があり、どの場合に LATCH を使用する必要がありますか?

4

8 に答える 8

35

ラッチは、値が書き込まれる出力ラッチです。ポートは実際のピンの電圧です。

それらが異なる可能性がある状況がいくつかあります。私が最も頻繁に遭遇したのは、ピンが (誤って) グランドにショートした場合です。ラッチをハイに設定すると、ラッチの読み取り値はハイになりますが、ピンの電圧はまだほぼグランドであるため、ポートの読み取り値はローになります。

あなたが説明したことにつながる別の状況は、ポートピンが正しく構成されていない場合です。私 (および私が一緒に働くすべての人) は、PIC が期待どおりに機能しない理由を突き止めるために何時間も費やしました。セクション I/O Ports -> PORT?、TRIS?、および LAT? を確認してください。データシートに登録します。容量性負荷に接続されたピンに出力を書き込んだ直後に誤った値を読み取ることについて説明しているMicrochip wiki ページで詳細を確認でき ます。

そのwikiページも説明しています:

ポート ラッチ レジスタを読み取ると出力ドライバの設定が返され、ポート レジスタを読み取るとピンで見られるロジック レベルが返されます。

また、18F14K50 の I/O ポート セクションからの抜粋を次に示します (これは、18F シリーズの残りの部分と同じはずです)。

各ポートには、その操作用に 3 つのレジスタがあります。これらのレジスタは次のとおりです。

  • TRIS レジスタ (データ方向レジスタ)
  • PORT レジスタ (デバイスのピンのレベルを読み取ります)
  • LATレジスタ(出力ラッチ)

そのため、ほとんどの場合、ラッチに書き込み、ポートから読み取ります。

于 2010-04-12T16:07:40.933 に答える
11

これがデータシートからの有用な要約です。

11.2.3LAT
レジスタI/Oピンに関連付けられたLATxレジスタは、リードモディファイライト命令で発生する可能性のある問題を排除します。LATxレジスタを読み取ると、I / Oピンの値ではなく、ポート出力ラッチに保持されている値が返されます。I / Oポートに関連付けられたLATレジスタのリードモディファイライト操作により、入力ピンの値がポートラッチに書き込まれる可能性が回避されます。LATxレジスタへの書き込みは、PORTxレジスタへの書き込みと同じ効果があります。

PORTレジスタとLATレジスタの違いは、次のように要約できます。

  • PORTxレジスタへの書き込みは、データ値をポートラッチに書き込みます。
  • LATxレジスタへの書き込みは、データ値をポートラッチに書き込みます。
  • PORTxレジスタを読み取ると、I/Oピンのデータ値が読み取られます。
  • LATxレジスタの読み取りは、ポートラッチに保持されているデータ値を読み取ります。
于 2010-04-14T14:44:35.213 に答える
4

はい、通常、PORTx と LATx を読み取ると、値が異なることがあります。

外部ハードウェアがピンを HIGH または LOW に駆動しているかどうかを読み取る場合は、ピンを (TRIS または DIR レジスタを使用して) 入力モードに設定し、PORTx を読み取る必要があります。その読み取り値は、ピンの実際の電圧が高いか低いかを示します。

ピンを High または Low に駆動する場合は、ピンを出力に設定する必要があります (TRIS または DIR レジスタを使用)。ビットを LATx レジスタに書き込む必要があります。

(そのビットを PORTx レジスタに書き込むことは正しいことのように見えるかもしれません: そのピンは -- 最終的に -- 命令どおりにハイまたはローになります。しかし、そのポートの他のピンが接続されている場合など、多くの場合があります。オープン コレクタ バス -- PORTx レジスタの 1 つのビットに書き込むと、そのポートの他のピンの状態が台無しになり、デバッグが困難な問題が発生します)。

開回路: 書き込み前に読み取り

于 2010-05-23T06:17:51.280 に答える
3

私の推奨事項は、PORT 値を読み取り専用と見なすことです。LAT 値は読み取りまたは書き込みが可能ですが、読み取り値はピンの入力値ではなく、最後に書き込まれた値になります。

古い PIC では、LATx 値は存在しませんでした。ポートに書き込む唯一の方法は、PORTx レジスタ経由でした。興味深いことに、ゼネラル インスツルメンツ (マイクロチップ以前) の時代にさかのぼる非常に古い PIC のいくつかは LATx をサポートしていましたが、マイクロチップは PIC18x ラインまでその機能を追加しませんでした。

于 2010-08-18T22:42:21.153 に答える