• ベストアンサー

一定時間操作がなかったら、というプログラムは??

c言語初心者です。 PICのプログラムを作っています。 「もし一定時間ポートの入力が変更されなかった場合」という条件式?を作りたいのですが、どうすればいいのでしょうか。。。 もちろんifと同じで、条件を満たさなくなったらすぐに抜けてもらいたいです。 調べたのですが、よくわからなかったので質問させてもらいました。 幼稚な質問でしたら本当に申し訳ないです。 ご回答よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tadys
  • ベストアンサー率40% (856/2135)
回答No.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”の処理を行う } やりたい事の具体的内容によって色々な方法が有ります。 やりたい事が違えば、上記の方法は駄目かも知れません。 コーディングの技法よりは、やりたい事を“日本語”で正確に記述する方が大事です。

maruyama6611
質問者

お礼

お礼が遅くなってごめんなさい。 >「一定時間内に入力が変化したら”A”を実行する。変化せずに一定時間が過ぎたら”B”を実行する」 たぶんこれで大丈夫だと思います。 記述してくださったプログラムを参考に作ってみます! 回答ありがとうございした。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • OKWavex
  • ベストアンサー率22% (1222/5383)
回答No.1

タイマを設定して、タイマの値が一定値を超えたらタイマを初期化して処理をおこなう様にするとともに、ポートの入力が変更されるたびにタイマを初期化すればいいのでは?

maruyama6611
質問者

お礼

お礼が遅くなってごめんなさい。 なるほど。 調べてみます!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 一定時間たつと、リセットしたい

    C言語であるプログラムを作成中なんですが、一定時間たつとプログラムをリセットしてまた最初からプログラムを実行するような感じにしたいのですが、わからず困っています。 例えば、 if (100秒たったら) { 配列に入ってるデータなどをリセットして、 最初から実行。 } という感じにしたいと思ってます。要するに、プログラムを実行してから、時間を数え、100秒たったらまた1から実行しなおすという風にしたいと考えています。 そういう時間を数える関数などはあるのでしょうか? どなたかご教授おねがいします。

  • PICのプログラムカウンタについて

    プログラムカウンタでポートAに4bitの2進数を入力して、変換された2進数のデータをポートBに出力させることはできたのですが、 ポートCにも違うデータを同時に出力させたいのですが、どういった命令文を作ったらいいでしょうか? 例えば、ポートAが「HLHL」の入力の時にポートBでは「HLLH」、ポートCでは「LLHL」を出力させる方法です。 言語はアセンブラ、マイコンはPIC16F886です。 よろしくお願いします。

  • 一定時間が経過したら処理を行う.

    一定時間が経過したら、ある処理を行いたいです。 if(一定時間が経過したら){  // 処理 } 例えばこのプログラムを実行してから1日たったら というようにしようと考えています. どのような条件をつければよいでしょうか?

  • 置き換えのプログラム

    c言語初心者です。 入力されたタブを\tに置き換えて、入力全体を出力するプログラムを、 #include <stdio.h> main() { int c; while((c=getchar())!=EOF){ if(c=='\t') printf("\\t");   putchar(c); } } と書いて実行できたのですが、入力した文字(タブ、空白、改行などは除く)を¥(バックスシュラッシュ)に置き換えて出力するプログラムにするためには、どのように書き換えればよいのでしょうか? どなたかご教授お願いします。

  • PICのプログラムで困っています。

    現在、PICと表示器(タッチパネル)による制御のプログラムを作成中です。 まだ始めたばかりで、初心者です。表示器(松下電工GT11)とPIC(C言語CCS)を使用していますが、PICからの送信はprintf文で比較的簡単でしたが、受信がうまくできません。 経験者の方でアドバイスがありましたら、お願い致します。

  • C言語で一定時間実行し、時間が経過したら処理を終わらせるには?

    今C言語でOpenGLを用いて図形を表示させるプログラムを書いています。 一定時間(例えば5秒)だけ画像を表示させ、 時間が過ぎらたらその画像をけし、 何も描いてないウィンドウだけ表示させるようにさせたいのですが、 プログラミングは全くの初心者で、どうすればいいのかわからず 困っています。 どなたか教えていただけないでしょうか。 出来れば関数名だけでなく、サンプルプログラムなどで 教えていただければ幸いです。 すみません、宜しくお願いします。

  • 簡単なプログラムなんですが…

    C言語の簡単なプログラムなんですが、私のような初心者には良く分かりません… 出来るだけ詳しく教えていただけるとうれしいです。 下の2つのプログラムの作り方が理解できません。 (1)データ数nとn個のデータを入力して、その平均を求めるプログラム。 (2)(1)のプログラムに合計と標準偏差を計算して出力する機能を追加したプログラム。 C言語に詳しい方お願いします。

  • プログラム/perl カウントについて

    プログラム初心者です. 現在,プログラムの書き換えを行っているところです. (言語はperlです 以下のプログラムのnextの前に, 「$bbをカウントし, $bbが2回出てきたらlast」 というプログラムを書きたいと思っています. ------------------------ if($honbun =~ /$boundary/) { $bb++;         if($bb >=2)         {      last; } next; } ---------------- カウントする変数を使うべきだと思うのですが,どのようにすればいいでしょうか; 初心者質問で申し訳ないです.

  • URLから任意の数字を取得して演算後、一定の条件をもとにグラフ化するプログラムを作りたいです。

     みなさん、はじめまして。僕は最近あるプログラムを作りたいためにプログラミングを始めました。C言語からプログラミング始めたのですがC言語の途中(本によって進行の違いが若干ありますが条件分岐くらいまでやりました。)で、「本当に自分の好きなプログラムがつくれるようになるのかな?」と疑問に感じ、いろいろ調べていくうちにどうやらやりたい事はPerlのほうが適しているとわかりましたのでPerlの勉強に変えようと思いました。  しかし、いざPerlの勉強をしようと思ったのはいいものの実際に何をすれば(どんな書籍を購入して勉強すれば)思うようなプログラムを作れるのかが全然わかりません。努力は決して惜しみませんが方法をお教えして頂けますと非常に助かるのですがどうでしょうか。よろしくお願い致します。 ※申し訳ありません。なんか次数制限でひっかかっちゃったのでやりたい動作についてはタイトルに一様あるのですがタイトルではやはり言葉足らずかと思いますのでどなたかのなんらかの回答の後に補足の欄に追記させて頂きます。ほんとに申し訳ありません。恐縮です。。

    • ベストアンサー
    • Perl
  • PICで既定の時間数ループを回したい

    16f84aというPICを使っているんですけど あるループを約1秒間回す処理ってどうやって c言語で書けばよいでしょうか 教えてください c言語は結構理解してるつもりですけど PICは初心者です