- ベストアンサー
一定時間操作がなかったら、というプログラムは??
c言語初心者です。 PICのプログラムを作っています。 「もし一定時間ポートの入力が変更されなかった場合」という条件式?を作りたいのですが、どうすればいいのでしょうか。。。 もちろんifと同じで、条件を満たさなくなったらすぐに抜けてもらいたいです。 調べたのですが、よくわからなかったので質問させてもらいました。 幼稚な質問でしたら本当に申し訳ないです。 ご回答よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
したい事は次のような事でしょうか? 「一定時間内に入力が変化したら”A”を実行する。変化せずに一定時間が過ぎたら”B”を実行する」 ただし、この条件ではまだ不十分です。 それは、”A”や”B”を実行した後どうするかが無いからです。 取りあえず、前の部分だけとしても色々やり方が有ります。 案1、 int old ; old = port; for( i=0; i<NN ; i++ ){ if( old != port ) goto AA ; } BB: /* ”B”の処理をする */ return; AA: /* ”A”の処理をする */ return; 注:この方法では割り込みが発生すると時間が狂います。正確な時間を出そうとすると難しくなります。 案2 タイマーを使います。 PICのタイマー1を使うとして、 int old ; /* タイマー1の初期化をする */ TMR1 = NN ; /* タイマーの時間を設定 */ _T1IF = 0 ; /* タイマー1のフラグをクリア */ old = port; while( _T1IF == 0 ){ /* タイマー1がオーバーフローするまで待つ */ if( old != port ) goto AA ; } BB: /* ”B”の処理をする */ return; AA: /* ”A”の処理をする */ return; 案3 割り込みを使用する。 main(){ での処理 /* タイマー1の初期化をする(割り込みを含む)*/ /* ポート変化の割り込みの設定をする */ /* 別の処理を実行する事が出来る */ } /* タイマー1の割り込み処理を記述する */ { ”B”の処理を行う } /* ポート変化の割り込み処理を記述する */ { ”A”の処理を行う } やりたい事の具体的内容によって色々な方法が有ります。 やりたい事が違えば、上記の方法は駄目かも知れません。 コーディングの技法よりは、やりたい事を“日本語”で正確に記述する方が大事です。
その他の回答 (1)
- OKWavex
- ベストアンサー率22% (1222/5383)
タイマを設定して、タイマの値が一定値を超えたらタイマを初期化して処理をおこなう様にするとともに、ポートの入力が変更されるたびにタイマを初期化すればいいのでは?
お礼
お礼が遅くなってごめんなさい。 なるほど。 調べてみます!
お礼
お礼が遅くなってごめんなさい。 >「一定時間内に入力が変化したら”A”を実行する。変化せずに一定時間が過ぎたら”B”を実行する」 たぶんこれで大丈夫だと思います。 記述してくださったプログラムを参考に作ってみます! 回答ありがとうございした。