前提・実現したいこと
PIC 12F683を使用し2つのSW入力(MODE選択,LED ON/OFF)でLEDの点灯時間(MODE1:1sec,MODE0:5sec)を変えていましたがMODE0の時に4.5sec以下の時間SW(ON/OFF)を押している間はLEDは押している間点灯するが4.6sec以上SWを押し続けてもLEDの点灯は5secで終了させて欲しいという要望が出て対応に苦慮しています。
発生している問題・エラーメッセージ
5sec点灯モードで5sec点灯しかしないかSWを押している間点灯し続けるという状況です。
該当のソースコード
新しい要望が出る以前に使用していたソースです。
#define MODE GP3 #define SW GP4 #define LED GP5 void main(void) { OSCCON=0b01100000;//内部4MHz ANSEL=0;//アナログ入力無効 CMCON0 = 0b00000111;//コンパレータ無効 TRISIO = 0b00011000 ;//GP3,GP4は入力 LED=1;//初期値として、LEDを消す while(1) { if(SW==1) { //SWが押されたら if (MODE == 1) { //モードが1なら LED = 0 ; // LEDをオン __delay_ms(1000) ;//1秒待って LED=1;//消灯 while(SW);//スイッチを押したままなら離すのを待つ __delay_ms(5);//チャタリング対策 } else { // モードが0なら LED = 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を組み合わせています。
回答2件
あなたの回答
tips
プレビュー