2

PICで出力を動作させることができ、さまざまな出力ラッチをハイ/ローに設定すると、LEDの束をオンとオフで踊らせることができます。しかし、ピンの状態で読むのが大変です。

以下のコードを参照してください。構成を設定し、TRISCを入力として定義し、TRISBを出力として定義します。無限ループでは、RC6がハイかローかを確認し、結果に応じてBラッチ全体をハイまたはローに設定します。

#include <htc.h>

__CONFIG(1, FOSC_IRC   & FCMEN_OFF & IESO_OFF);
__CONFIG(2, PWRTEN_OFF & BOREN_OFF & WDTEN_OFF);
__CONFIG(3, MCLRE_OFF);
__CONFIG(4, STVREN_ON  & LVP_OFF   & DEBUG_OFF);
__CONFIG(5, 0xFFFF);
__CONFIG(6, 0xFFFF);
__CONFIG(7, 0xFFFF);

void main(void)
{
  TRISC = 0xFF; // input
  TRISB = 0x00; // output

  while (1)
  {
    if (PORTCbits.RC6 == 0)
      LATB = 0b00000000;
    else
      LATB = 0b11111111;
  }

  return;
}

コードは警告やエラーなしで正常にコンパイルされます。コードロジックが単にラッチをハイとローに設定している場合、それは正常に機能しますが、ピンの状態を正常に読み取ることができませんでした。

何か案は?

PIC18F14K50とMPLABv8.43、およびHiTechANSICコンパイラを使用しています。

私の接続は、VDD(ピン1)への+ 5V、アースへのVSS(ピン20)です。+ 5VからC6(ピン8)まで、100Kの抵抗とB7(ピン10)からグランドまでのLEDがあります。RC6を切り替えるには、ワイヤーをC6に接続/切断します。

     ┌────────┐
+5v -│ 01  20 │- gnd
    -│ 02  19 │-
    -│ 03  18 │-
    -│ 04  17 │-
    -│ 05  16 │-
    -│ 06  15 │-
    -│ 07  14 │-
+5v -│ 08  13 │-
    -│ 09  12 │-
led -│ 10  11 │-
     └────────┘
4

3 に答える 3

5

残念ながら、PICのADCピンは電源投入時にアナログ入力として構成されています。そのピンをデジタル入力として使用するには、そのピンのADC機能を無効にする必要があります。

ANSELHのビット0をクリアすると、RC6がデジタル入力に設定されます。その後、コードが機能します。

これは、セクション9.4:ポートアナログ制御のデータシートに記載されています。

PIC18F/LF1XK50データセット

于 2012-04-05T14:20:24.377 に答える
2

設定...

TRISC = 1; // input

... PORTCのピンRC0のみを入力ピンとして設定する必要があり、他のすべてのピンは出力として定義されます。したがってPORTCbits.RC6 == 0、RC6ピンの正しい入力状態を返さないでください。

TRISC = 255PORTCのすべてのピンを入力として設定する必要があります。

于 2012-04-05T00:35:00.607 に答える
1

他のいくつかのPIC18バリアントは異なる方法で設定されていることに言及する価値があります。

PIC18F4520およびPIC18F4680では、ピンをデジタルとして構成する必要があります。これは、ANSELHではなくADCON1レジスタを介して行われます。

ビットを1に設定すると、ピンがデジタルになります。

これに加えて、対応するTRISレジスタのビットを1に設定して、それらを入力ピンにする必要があります。

于 2015-05-20T08:39:01.050 に答える