【初心者向け】C言語によるPICプログラミングの方法を解説!
今回の記事では、マイクロコンピュータの一種の「PIC」をC言語で動かす方法を解説していきます。
はじめに
PICは「ピック」と発音し、マイコンの一種です。
マイコンはmicro computerの略で「超小型コンピュータ」を意味するものですが、近年はさまざまな機器の制御用としてのマイクロコントローラ(micro controller)の意味合いが強く、エアコン、炊飯器、電気ポットなどにも使われています。
例えばパソコンはワープロ、TVチューナー、各種アプリケーションソフトなどで、汎用的に便利に使うことが出来ますが、「LEDを点滅させる」ことを簡単に行うことは難しいものです。
これに対しマイコンを用いると簡単に安くLEDを点滅させることが出来ます。
また、部屋の温度を測定し表示させることなどはパソコンでも可能です。
特定用途の制御に向いている
しかし、温度測定のためにわざわざパソコンを用いると価格が高くなり、このような用途には不向きです。
そこで、「LEDを点滅させる」「温度を測る」などの特定用途の制御に用いるのがマイコンの仕事(役目)です。
PICもマイコンの一種で Peripheral Interface Controller の略で「ピック」と発音します。
直訳すると、Peripheralは「周辺機器」、Interfaceは「接続部分」ですから、「周辺機器の接続部分を制御する」ものです。
今回はこの「PIC」のプログラミングについて紹介します。
「独学でのプログラミング学習に苦戦していませんか?」
独学でのプログラミング学習の挫折率は9割以上と言われています。
✔プログラミングを身につけて、年収をUPさせたい
✔ITエンジニアになって、働き方を変えたい
✔生活を変えたいけど、何からやればよいか分からない
と思っているあなたへ向けて、
挫折率9割に負けない「プログラミング学習必勝法」を無料でプレゼントします!
完全無料なので、悩む前に今すぐ下のバナーをクリックして資料を読んでみてください!
\簡単30秒/
下のバナーからLINE友だち追加をして、無料で限定資料をGET!
PICの開発環境について
PIC の開発用の言語としては、アセンブラ言語が良く用いられています。これはアセンブラ言語の開発環境が無料で手に入り、多くの参考書で取り扱っているためです。
一方、C言語での開発環境も提供されています。しかし、複数のメーカから提供されており仕様が異なることやANSI C に準拠していないこと、コンパイラの価格が高額であることなど、いくつかのデメリットも存在します。
以下に手に入れることの出来るコンパイラについて示します。
PIC C コンパイラ(HI-TECH社)
HI-TECH 社のコンパイラには、製品版とフリーの PICC Lite が提供されています。現在、手に入るフリーのCコンパイラであり、近年よく用いられているコンパイラです。PICC Lite は、ANSI 準拠なので、ふつうのC言語の文法と同じように、演算、配列、ポインタ関数、構造体等を用いたプログラミングが可能です。
まだ、日本言の解説ページなど資料が少ないのが辛いところですが、オーム社から出版されている「C言語ではじめるPICマイコン―フリーのCコンパイラではじめよう」が解説書として出版されています。
PIC のメーカである Microchip Technology 社が提供している開発環境 MPLAB で使用することが出来ます。
使用できる PIC の種類やプログラムサイズに制限がありますので、本格的な開発には向かないかもしれませんがC言語でのプログラミングの最初の選択にはちょうどいいと思います。
CCS Cコンパイラー(CCS 社)
CCS C Compiler は、書籍等で良く取り上げられており、一般的に良く用いられています。
日本語の解説ページなどもたくさんあり、最も資料の多いコンパイラです。PIC のメーカである Microchip Technology 社が提供している開発環境 MPLAB で使用することが出来ます。
価格が少し高いですが、きちんとしたプログラムを行うのであれば、 CCS 社のコンパイラを購入することを考えるといいでしょう。
MPLAB C18 コンパイラ(Microchip 社)
MPLAB C18 コンパイラは、Microchip Technology 社が提供しているCコンパイラであり、純正の開発言語になります。
このコンパイラも高価ですが、きちんとしたプログラム開発を行うのであれば購入を考えると良いと思います。
PicC C Compiler(Grich 社)
秋月で販売されている PicC C Compiler(Grich 社)は2000円と低価格であり、簡単なものですが日本語の解説書も付属しているので最初の選択としてはいいと思います。
ここでは、HI-TECH PICC Lite を用いたC言語によるプログラミングについて説明します。
ただし、2012年3月に、Hitech社を2009年4月に買収したMicrochip 社が新しいPIC用Cコンパイラ「MPLAB XC8」が発表されました。
ブランド名「Hitech PICC」の名称変更したものです。
HI-TECH C Compiler for PIC10/12/16 MCUs was 9.83
HI-TECH C Compiler for PIC18 MCUs was 9.80
この2つを統合してMPLAB XC8 version 1.00として発表されています。
MPLABのインストール
MPLABは現在更新を終了していますが、(現在はMPLABX)PICプログラミングの足がかりとしては十分使用できます。
以下のページから、ダウンロードし、インストールしてください。
インストール手順も以下のページを参考にしてください。
「プログラミング学習に苦戦しているあなたへ」
独学でのプログラミング学習の挫折率は9割以上と言われています。
✔プログラミングを身につけて、年収をUPさせたい
✔ITエンジニアになって、働き方を変えたい
✔生活を変えたいけど、何からやればよいか分からない
と思っているあなたへ向けて、
挫折率9割に負けない「プログラミング学習必勝法」を無料でプレゼントします!
完全無料なので、悩む前に今すぐ下のバナーをクリックして資料をGETしましょう!
\簡単30秒/
下のバナーからLINE友だち追加をして、無料で限定資料をGET!
動作確認(LED点滅プログラムの作成)
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
このプログラムは、500 msec 毎に LED が点灯・消灯を繰り返すものです。
以下にアセンブラで作成した同様のプログラムを示す。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
“未経験”でもたった1ヶ月で営業からエンジニアとして転職!『WebCamp』受講者インタビュー
PIC C コンパイラ(HI-TECH社)の文法
変数のデータ型と変数の宣言
ICC Lite で使用できる変数の型は以下のようになります。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
プログラムで変数を用いるためには、最初に変数の宣言を行います。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
数字の表記
PICC Lite では、整数の表記として 10 進数、2 進数、8 進数、16 進数を用いることが出来ます。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
分岐
分岐として、if 文と switch 文がある。if を使用する分岐には、if 文、if ~ else 文、else if 文があります。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
多重分岐
多重分岐には、switch ~ case 文を使用します。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
繰り返し
繰り返しとして、for 文、while 文、do ~ while 文がある。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
関数
ユーザ定義関数を ANSI C と同じように用いることが出来ます。
ただし、関数の入れ子は8回までしか行うことはできず、再起呼び出しは使用できません。
PICC Lite には多くのライブラリ関数が用意されています。
代表的な代表的なヘッダファイルを以下に示します。
1. pic.h :PIC マイコン制御関数のヘッダファイル
2. stdlib.h :ユーティリティ関数のヘッダファイル
3. math.h :数学関数のヘッダファイル
4. string.h :文字列操作関数のヘッダファイル
以下に上記ヘッダファイルで定義されている関数の代表的なものについて紹介します。
この他にも多くの関数がヘッダファイル内で定義されています。詳しくは、ヘッダファイルをご覧ください。
PIC マイコン制御関数:pic.h
unsigned char eeprom_write( unsigned char addr ) :データ EEPROM の読み出し
void ei( void ) :割り込みを発生できるようにする
ユーティリティ関数:stdlib.h
int atoi( const char *str ) :文字列を整数に変換する
double atof( const char *str ) :文字列を実数に変換する
int rand( void ) :乱数を返す
void srand( unsigned int seed ) :乱数列の初期化
数学関数:math.h
double cos( double x ) :cos(x) の結果を返す
double tan( double x ) :tan(x) の結果を返す
double asin( double x ) :sin-1(x) の結果を返す
double acos( double x ) :cos-1(x) の結果を返す
double atan( double x ) :tan-1(x) の結果を返す
double fabs( double x ) :x の絶対値を返す
double pow( double x, doubel y ) :xy の結果を返す
double sqrt( double x ) :√x の結果を返す
double log( double x ) : loge(x) の結果を返す
double log10( double x ) :log10(x) の結果を返す
文字列操作関数:string.h
char * strcat( char *str1, const char *str2 ) :文字列str1に文字列str2を連結する
size_t strlen( const char *str ) :文字列の長さを返す
char * strchr( const char *str, int ch ) :文字列中に文字があった場合に最初文字位置へのポインタを返す
char * strstr( const char *str1, const char str2 ) :文字列str1の中で文字列str2と一致する最初の位置へポインタを返す
入出力ポートの制御
PICC Lite で PIC の制御プログラムを作成する場合、アセンブラと同じように SFR(Special Function Register:特殊機能レジスタ)
を用いることによって、入出力ポートの制御を行います。
PIC マイコンとして PIC16F84A を使用する場合は、入出力ポート PORTA と PORTB があり、このレジスタの値によって入出力の状態が決まります。
また、PORTA と PORTB の設定を決めるレジスタとして TRISA と TRISB があり、このレジスタの値を設定する場合、アセンブラではバンクの切り替え
を行わなければなりませんが、PICC Lite では自動的に行われるのでバンクの切り替えは必要ありません。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
このプログラムでは、TRISB や PORTB への値の代入が 16 進数で行われていますが、2 進数や 10 進数でも大丈夫です。
このプログラムで使用している遅延関数 DelayMs() は、PICC Lite のサンプルファイルにある delay.h と delay.c によって定義されていますので参照してみてください。
また、ポート毎のレジスタだけでなく、ピン毎のビット変数が PICC Lite で用意されています。このビット変数を使用することによって、多くの分岐を簡単に行うことが出来ます。
PORTA のピン(RA0~RA4)PORTBのピン(RB0~RB7)に対応するビット変数は、それぞれ RA0~RA4 と RB0~RB7 になります。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
プログラム例
LED の順次点灯プログラム
RB0 ~ RB4 に LED が接続され、LOW 状態で点灯、HIGH 状態で消灯となる回路で、順次点灯するプログラムです。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
スイッチ入力制御の LED 点灯プログラム
スイッチが ON の時に LED が点灯、OFF の時に消灯するプログラムです。
[su_list icon="icon: check"]
- 様々なプラットフォームに対応したアプリ作成可能
- 総合開発環境を無料で使える
- 強力な補完機能
[/su_list]
ここで、TRISA と TRISB の設定を 2 進数で制御しています。
2 進数で 0b00000000 と 0b11111111 示される値は、 16 進数ならばそれぞれ 0x00 と 0xFF と表されます。
最後に
いかがでしたでしょうか。
今回ご紹介したものはまだまだ最初の段階の単純なものですが、これらの応用が我々の身近な生活の中で実際に使われているものと考えると面白さを分かっていただけるかと思います。
JavaやPHPなどとはまた違った達成感があります。ぜひ継続して学んでいってみてください。
DMM WEWBCAMPについて
DMM WEBCAMPは3ヶ月間で未経験から即戦力エンジニアを育成する転職保障付きのプログラミングスクールです。1ヶ月でプログラミング・Webデザインを学ぶ通い放題の「ビジネス教養コース」も展開しています。
DMM WEBCAMPを運営する株式会社インフラトップ では、「学びと仕事を通して人生を最高の物語にする」という理念で会社を経営しています。
キャリアアップを目指す方は、この機会に私達と一緒にプログラミングを学んでみませんか?