ラッチは、値が書き込まれる出力ラッチです。ポートは実際のピンの電圧です。
それらが異なる可能性がある状況がいくつかあります。私が最も頻繁に遭遇したのは、ピンが (誤って) グランドにショートした場合です。ラッチをハイに設定すると、ラッチの読み取り値はハイになりますが、ピンの電圧はまだほぼグランドであるため、ポートの読み取り値はローになります。
あなたが説明したことにつながる別の状況は、ポートピンが正しく構成されていない場合です。私 (および私が一緒に働くすべての人) は、PIC が期待どおりに機能しない理由を突き止めるために何時間も費やしました。セクション I/O Ports -> PORT?、TRIS?、および LAT? を確認してください。データシートに登録します。容量性負荷に接続されたピンに出力を書き込んだ直後に誤った値を読み取ることについて説明しているMicrochip wiki ページで詳細を確認でき ます。
そのwikiページも説明しています:
ポート ラッチ レジスタを読み取ると出力ドライバの設定が返され、ポート レジスタを読み取るとピンで見られるロジック レベルが返されます。
また、18F14K50 の I/O ポート セクションからの抜粋を次に示します (これは、18F シリーズの残りの部分と同じはずです)。
各ポートには、その操作用に 3 つのレジスタがあります。これらのレジスタは次のとおりです。
- TRIS レジスタ (データ方向レジスタ)
- PORT レジスタ (デバイスのピンのレベルを読み取ります)
- LATレジスタ(出力ラッチ)
そのため、ほとんどの場合、ラッチに書き込み、ポートから読み取ります。