2012-05-08 6 views
0

なぜこのコードは機能しませんか?私が望むのは、ボタンを押したときに切り替えるportbです。PIC18f452ポートリスニング問題

main 
trisb=0 
trisa=0xff 
while true 
if ra0<>0 then 
portb = not portb 
end if 
wend .end 
+0

2つの真のループをpicで実行し、スレッド化されたクラスi n javaまたはC++ ?? – gary

答えて

0

私はそれが何であるか分かりません。それは擬似コードですか?

とにかく、RA0 == 0からRA0 == 1への変更をトリガーする必要があります。書かれているように、RA0 == 1であれば、PORTBは毎回ループを切り替えるでしょう。ここで

はCに例を示します

int main(void) 
{ 
    unsigned char bButtonValue = 0; 

    TRISA = 0xFF; 
    TRISB = 0x00; 

    while (1) 
    { 
     if (RA0 != bButtonValue) 
     { 
      bButtonValue = RA0; 
      if (bButtonValue == 1) 
      { 
       PORTB= ~PORTB; 
      } 
     } 
    } 
} 

は、変更イベントをトリガする前に、いくつかのサンプルのために安定して確認してください(実際のアプリのために、あなたはスイッチ入力をデバウンスしたいと思うことを覚えておいてください

。それが動作しない場合どうなりますか?コンパイラはエラーメッセージを提供していますか?
+0

のthnxアダム うん!!私が失敗した間違いはまた、私は詐欺の割り込みを有効にする必要があり,, rb0_bitた。 ... ことができ、私は –

+0

最初に、元の例に割り込みが必要な理由を説明してください。ボタンスキャンを割り込みにしたいですか?その場合は、10msティックのタイマ割り込みを使用してください。そこからデバウンスを処理できます。 –

+0

また、割り込みサービスルーチンでループを実行してボタンをスキャンし、メインループの変数を読み取るように設定できます。これは、RTOSのない組み込みシステムでのマルチスレッドと同等です。 –