• ベストアンサー

PIC 割り込み

 PIC16f873のRB0ピンにパルス波形が常に送られてきているとして、そのHighのときのパルス幅(時間)をタイマー1で測り、その値を常にグローバル変数のHWidthに代入し更新している処理Aがあるとします。  そして、メインの処理Bを走らせている途中で、Widthの値を使いたいというときは、どのような方法を用いればいいのでしょうか? 素人質問で申し訳ありませんが、よろしくお願いします。できたら、サンプルプログラム的なものをあげていただくとありがたいです。

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

  • ベストアンサー
  • thyristor
  • ベストアンサー率76% (13/17)
回答No.1

「Widthの値を使いたい場合どうすればよいか」の部分がよくわからないので補足をお願いします(HWidthがグローバル変数なら、どこからでも参照できるはずです)。 HWidthが予想される値と違うのなら、 ・パルスが本当に入力されているか ・ピンが入力モードになっているか ・パルス幅に対し、割り込み間隔が十分短いか ・割り込み許可フラグを立ててあるか ・処理Aが正しく書かれているか 等を確認する必要があります

jojijoji
質問者

補足

さっそく返信ありがとうございます。  参照するところはわかるんですが、処理AとBを同時に走らせるには、プログラム的にはどう書いたら良いのでしょうか?  割り込み処理ですと、割り込み処理Aでパルス幅を測定している間は、メイン処理は止まってしまわないのでしょうか?常に同時にってことはできるのでしょうか? よろしくお願いします。

その他の回答 (1)

  • chirubou
  • ベストアンサー率37% (189/502)
回答No.2

最近の(PIC意外の)OSでは複数の処理を並列に走らせるにいはマルチスレッドという方法がありますが、PICでは簡単では割り込みで処理するしかないでしょう。基本的に割り込み処理ではあまり多くの事はできません。 RB0の信号がlow->highとhigh->lowで割り込みを上げるようにできれば、low->highでタイマーの値を読み、high->lowでタイマーの値を読み、その差をHWidthとすればいいのではないでしょうか。 もし、エッジ割り込みができないようであれば、定期的にタイマー割り込みを発生させ、その時にRB0がHighだったらHWidthをインクリメントする、LowだったらHWidthをゼロクリアする、とかいう処理でできるのではないでしょうか。

関連するQ&A

専門家に質問してみよう