• 締切済み

PICで既定の時間数ループを回したい

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

みんなの回答

  • KEIS050162
  • ベストアンサー率47% (890/1879)
回答No.4

言語の知識があっても組込み系が初めてならば、いきなり割り込み処理はハードルが高すぎますね。 少なくとも、C言語でこれをどうやって記述するかは、マイコンボードの仕様やコンパイラに依存します。 秋月のキットかなにかをお使いでしょうか? マイコンのデータシートやキットの仕様書などを熟読された上で、 そのキットのサンプルコードをいくつか入手して、マイコンのレジスタの設定や、割り込みハンドルの仕方など一通り理解しないと、#2さんのせっかくのアドバイスもちんぷんかんぷんなのではないかと思います。 そうでなければ、お使いのボードや、コンパイラ環境などをお書きになると、もう少し具体的なアドバイスがもらえるかも知れません。 まずは、この辺りの資料類を熟読してみてください。 ご参考に。

全文を見る
すると、全ての回答が全文表示されます。
  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.3

No2です。 すいません、調べてみるとレジスタへの書き込みは(少なくともHI-TECH Cで)ポインタ演算ではありませんでした。 単純に値の代入でいけます。便利ですね…。 割込みについても参考になりそうなページがありました。 http://technologicaladvance.blog.fc2.com/blog-entry-20.html

全文を見る
すると、全ての回答が全文表示されます。
  • SortaNerd
  • ベストアンサー率43% (1185/2748)
回答No.2

3通り思いつきます。 1. 回数で指定してループを回す 何回で1秒になるかは現物合わせです。 プログラムはもっとも単純です。 欠点は、ループ内の処理時間が一定でないと使えないことと、繰り返し回数がコンパイラに依存することです。 2. タイマーをポーリング 基本的な流れは、 TMR0を走らせ、ループごとにTMR0の値をチェックし、目標の値を越えていたら終了。 TMR0の設定はOPTIONレジスタに値を書き込むことで行います。TMR0の値をチェックするのはTMR0レジスタから値を読み込むことで行います。 PICのC言語は使ったことが無いので具体的な記述は分かりませんが、ポインタ演算でOPTIONレジスタに値を設定している箇所が既にあるでしょうからそれを参考にしてください。 具体的な設定値はデータシートを見てください。内部クロックで動作、プリスケーラは最大にしておくのが良いでしょう。 なおTMR0は1秒をカウントできませんので、10ミリ秒を100回数えるなどの工夫が必要です。 3. タイマー割込み 一番スマートなやり方です。 TMR0がオーバーフローする際に割り込みを発生させ、一定回数後にループを抜けるという流れです。 C言語での書き方は分かりません。

全文を見る
すると、全ての回答が全文表示されます。
  • black2005
  • ベストアンサー率32% (1968/6046)
回答No.1

ソフトウェアで1秒間をカウントするなんて無謀。 16F84Aにはタイマ0(TMR0)という8bitタイマが内蔵されているので、それを使って1秒間を作る。

saya19
質問者

補足

具体的にはどうしたらいいんでしょうか?

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

関連するQ&A

  • PICでつくりたいです

    今回PICでおもちゃを作ろうと思う初心者です。 ある程度のC言語はわかり、去年は簡単なPICを使ったライントレーサを作りました。そのときには参考となるプログラム、車自体があったので簡単につくることができました。 今回は、一からPICで光から逃げるねずみのようなものを作りたいのですが、まったくどう作っていいかわかりません。 具体的に説明すると、車の上に光センサを数個付け、光の強い方向から逃げるようなものを作る予定です。 ネットでPICなどの検索をいっぱいかけたり、多少本を探してみたのですが、全然参考になるようなものがありませんでした。去年はPICの16F84Aを使用しました。 よろしくお願いします

  • PICライターを使わないC言語による書き込み

    PICライターを使わずに、アルディーノ、ラズベリーパイ、その他電子部品を使って、C言語でPICにプログラムを書き込むことは可能でしょうか。 アルディーノについては、以下のリンクを参考に検討しました。 http://www.hoihoido.com/blog/wp/?p=1902 手元にあるPIC 16F88-I/P、16F648A、12F675では、必要なピンがないので書き込めないと考えています。 ラズベリーパイについては、以下のリンク先を見て、スクラッチのプログラムなら書き込めると思いました。 https://neuralassembly.blogspot.com/2016/10/raspberry-pigpiopic.html 複雑な処理ができるように、C言語で書き込めないか調べましたが、情報は出てきませんでした。

  • pic

    pic16F877をC言語で利用しています.unsigned longでも格納できないサイズの正の整数を扱う場合どうすればいいでしょうか.

  • PICで静電容量方式タッチセンサの使い方

    PIC初心者ですm(_ _)m MPLAB IDE v8.80で、C言語でプログラムして、 PICkit3を使ってPIC12F615に書き込んでいます。 PIC12F1822を使って、タッチセンサを作成してみたいのですが、 いろいろ調べたのですが、レジスタの設定等、検出手順など全く分かりません(T_T) よろしくお願いしますm(_ _)m

  • PIC AD変換

    pic AD変換の仕方。 PIC12F675を使ってLEDの点滅プログラムを作りたいのですが、 そのとき可変抵抗器をつないでAD変換すれば点滅速度を変えられる 用になると思うのですが、AD変換のプログラムがわかりません。 どなたか教えてください。 初心者なのでできるだけ解説付きで、できれば HI-TECH C言語でお願いいたします。

  • ループについて教えてください(初心者質問)

    Ruby初心者です。 デクリメントするループの書き方がわかりません。 C言語でいうところの・・・ for(i = 10; i > 0; i--){ //処理 } という表現は、Rubyではどのように書くのが一般的でしょうか? どなたか教えてください。よろしくお願いします。

    • ベストアンサー
    • Ruby
  • PIC(16F84A)を使用して周波数判定を行い…

    PIC(16F84A)を使用して周波数判定を行いたいのですが…。 PICの16F84Aを使用し、周波数を判定して出力としてHIを出力する、LOWを出力するなどの判定を行うプログラムをC言語で行いたいと考えております。 例として100Hz以上の周波数が入ってきたときに、HIを出力したい場合、どういうプログラムを組めばよいのでしょうか? 周波数を判定する関数等はあるのでしょうか? よろしくお願いします。

  • PIC16F877Aでのサーボモータ制御

    PIC16F877Aでのサーボモータ(futaba S3003)を制御したいのですが、ネットでのソースが少なく難航しています。ちなみに言語はC言語を使っています。とくにパルス出力?のところがわかりません。どなたか教えていただきたいです。

  • PIC ( 12F683 ) の命令について

    PIC (12F683、 HI-TECH C) を使った回路で、電源ON(手動) ➡ 一定時間経過 ➡ 電源OFF (PIC自身で) できるようなC言語の命令はありますか?

  • PICを使用してのLCD制御について

    PIC(16F877A)を使用してLCDの制御を行っています。 LCDに表示を行ってから、(カーソルと呼ぶのでしょうか?)黒の■が2行目でチカチカと点滅をしていて、邪魔だなと感じるのですが、点滅させない方法があるのでしょうか? もしあるのであれば、教えて頂けますか? PICのプログラムはC言語を使用しています。 ご回答、アドバイスをよろしくお願いします。

紙が送れない - MFC-J6983CDW
このQ&Aのポイント
  • 印刷中に急に紙が送られない・ローラーのクリーニングをとのメッセージが表示されるトラブルが発生しています。
  • Windows10で使用しているMFC-J6983CDWの印刷中に紙が送られない問題が発生しています。
  • 有線LANで接続されているMFC-J6983CDWで印刷中に紙が送られないエラーが発生しています。
回答を見る