第18回 プログラムの構造を理解する

今回からプログラムの中身を詳しく確認していきます。

目次

今回の説明

回路を完成させるために以下の順序で説明しています。このエントリの説明は(3)「プログラムを作る」の部分のプログラムの解説になります。

  1. LEDを電池と抵抗のみで光らせる回路を組み立てる
    PICマイコンの回路を組み立てる前に、まずはブレッドボードに慣れておくことにします。電池、抵抗、LEDのみを使って、ブレッドポード上に回路を組んでLEDを光らせてみます。ここでは電池、抵抗、LEDの回路記号と回路図の説明をして、回路図からブレッドボードに組む方法を説明します。まずはブレッドボードに慣れましょう!
  2. PICマイコンのベース回路を組む
    はじめの一歩の回路は、LEDを1秒に1回光らせるだけの回路です。この回路をブレッドボードに組み立てます。
  3. プログラムを作る
    LEDを1秒に1回光らせるプログラムを作成します。
  4. PICマイコンに書き込んで動作させる
    作成したプログラムをPICマイコンに書き込んで動作させてみます。
  5. ベース回路にスイッチを追加
    LEDの点滅をスイッチで開始させるために、ベース回路にスイッチを追加します。これまではLEDを光らせる、という出力制御をしましたが、今度はPICマイコンで外部から信号を入力する方法を確認します。
  6. ベース回路にブザーを追加
    スタートスイッチ付きの、1秒に1回光らせる回路を作りましたので、ブザーを追加してタイマーとして完成させます。

プログラムの構成

前回の記事では、完成したプログラムを(中身が分からないまま)コピペして、ビルド・書き込み・動作テストさせてみました。

今回からこのプログラムの中身を詳しく理解していきます。プログラム自体は短いですが、PICマイコンプログラムの基本的な部分がいろいろと詰まっていますので、一通り理解することを目指しましょう!このプログラムが理解できれば、他のPICマイコンも似たようなものですし、C言語が分かっていれば自分で作りたいものが作れるようになります!

PICマイコンのプログラムは多くの場合、以下のような構成になっています。

Pic basic 18 program structure

それぞれのブロック毎に説明していきますが、すべてのブロックを説明するとかなり長い説明になりますので、今回はコメント部分とヘッダファイルインクルード部分の説明をします。

PICマイコンプログラムの構成はだいたい上の構成になっていますが、実際の規模の大きいプログラムを見るとちょっと違うところもあります。どのような点が違う可能性があるかというと、、、

  • 「PICマイコンコンフィグレーション設定部分」というのはPICマイコンの動作仕様を設定する部分です。このような設定部分を、main.cには記述せずに別にヘッダファイル(例えばconfig.hのようなファイル名のファイル)を用意してそこに書き、それをmain.cでインクルード(#include “config.h”)することが多くあります。
  • 規模がちょっと大きくなってくると、main.cが大きくなりすぎるため、プログラムを複数の.cファイルに分けて記述されることが多くなります。今回はひとつのファイルにまとめた方がわかりやすいので、main.cのひとつのファイルでプログラムを書きました。今回作成するプログラムは応用編で機能を拡張してもそれほど規模は大きくありません。一方で、最終的には大きな規模のプログラムになる場合は、小規模の試作から始めるケースでも、最初からファイル構成を考えておくとよいと思います。
  • C言語解説書のプログラムでは、メイン関数はだいたいmain.cに記述しますが、PICマイコンプログラムではメイン関数のあるファイル名がmain.cではないケースもあります。例えば、Microchip社のサンプルコードでは、USBキーボードデバイスのサンプルプログラムのメイン関数は “keyboard.c” だったりします。

という感じです。特に最初の2項目はC言語プログラミングの話になってきますので、詳細はC言語の解説書を参照いただければと思います。なお、Microchip社からリリースされているサンプルプログラムは規模の大きいものが多く、そのようなケースではどのようにプログラムを書いていけばよいか参考になります。

コメント部分

MPLABXで、新規プロジェクトを作って、main.cを新規追加すると、main.cファイルの先頭にコメントが自動的に記述されます。内容は、ファイル名と作成者です。

今回はこのままにしますが、自分でいくつもプログラムを書いていくとだんだんわからなくなってきますので、今後いろいろなプログラムを作成されるときは、これ以外にも以下の内容を記述しておくとよいと思います。

  • プログラムの内容。例えば、LEDを1秒に1回光らせるプログラム、など。
  • プログラムのターゲットとなる回路の情報(回路図の保存場所など)
  • ターゲットのPICマイコン。PIC12F1822、など。
  • 使用するコンパイラ。XC8、など。
  • プログラムバージョン
  • 簡単な変更履歴

ところで、昔はプログラムの先頭コメント部分に結構細かく変更履歴を書くケースが多かったと思います。でも最近は変更履歴を書くにしても簡単な内容にとどめて、実際はバージョン管理システムで管理することが多くなってきました。例えばGitHubというWebサービスを聞いたことがないでしょうか。GitHubはGitというバージョン管理システムでソースコードを共有・管理するWebサービスです。

このバージョン管理システムですが、実はMAPLABX IDEにも搭載されています。MPLABX Version5.10時点では

  • Git
  • Mercurial
  • Subversion

が利用できます(macOS/Windowsとも)。これらのバージョン管理システムはそれぞれ特徴があり、使い方も異なります。使い方については書籍やサイトがありますのでご興味があれは勉強してみてください。なお、MPLABXで利用する場合、”Team”メニューからそれぞれのバージョン管理システムメニューで管理します。

というわけでいろいろと説明してしまいましたが、まずはデフォルトで進めてみて、自分でいろいろと工夫してみましょう。またバージョン管理システムはツールとして使えるといろいろと役に立ちますのでこちらも是非勉強してみてください。

ヘッダファイルインクルード部分

新規プロジェクトを作ってmain.cファイルを新規追加すると、そのファイルにはデフォルトで xc.h がインクルードされています。

ヘッダファイルのインクルードについては、基本的な機能のプログラムでしたらこの xc.h をインクルードすればOKです。

ところで、#include文でインクルードしているファイルの内容を確認したいケースがありますよね。この場合、MPLABX IDEでは、すぐにそのファイルを開けるショートカットが用意されています。例えば、xc.hを開きたい場合、macOSの場合は「commandキー」を押しながら、Windowsの場合は「Controlキー」を押しながら、「<xc.h>」の文字列をクリックします。

クリックすると、新しいタブで「xc.h」の中身が表示されます。

Display xc h

インクルードファイルの内容を確認したいケースは結構ありますので、この開き方を覚えておくとよいと思います。。

コメント部分とインクルード部分はこれで説明は終わりです。

次回はPICマイコンコンフィグレーション設定部分の説明をします。

更新履歴

日付 内容
日付 内容
2016.8.30 新規投稿
2018.11.24 インクルードファイルをxc.hのみに変更
通知の設定
通知タイミング
guest
0 コメント
本文中にフィードバック
全てのコメントを見る
目次