質問: 0 ;// LEDをオン __delay_ms(5000);//5秒待って LED=1;//消灯 while(SW);//swを押したままなら離すのを待つ __delay_ms(5);//チャタリング対策 } ``` ### 試したこと ごく単純なSW入力によるLED点灯や、電源ONで各種LED点灯を行うだけのプログラムしか書いたことがないので 出力を3ポートにしてモードにより出力を選択しようとしたり、論理回路追加(AND)により制御出来ないかをやって みましたがうまく行きません。MODE0で点灯しなかったり、5sec点灯が出来ずSW押している時間だけ点灯したりしてます。本業が光学設計なので本やネットで見てもこうすれば・・というのがピンと来ません。SWを押している時間を測りその時間によってLEDの点灯時間を変えてやれば良いかなと思っていますが、具体的にどう記述するかが分っていません。 ### 補足情報(FW/ツールのバージョンなど) コンパイラ XC8にpick kit3を組み合わせています。
回答: 点灯の時間間隔をdelayで時間待ちしているため、この待ちの間はなにも処理できなくなってしまうのがまずいですね 1ms程度のタイマ割り込みなどでタイマを実装して、これで時間計測及び待ち時間到達有無を判定するようにして処理を中断させないようにする必要があります できればタイマ割り込み内でスイッチの入力&チャタリング除去もしてしまうのがベストですが。