■組込用のC言語■

■NC30■

本実験では,マイコンチップM16C/62Aを使用する.このマイコンチップ用に提供されている開発環境を使用してプログラミングを行い,組込機器用のプログラムの基礎を学ぶ.開発環境にはC言語のコンパイラNC30が含まれている.NC30は,通常のANSI規格に対応したコンパイラである.C言語の一般的な説明は次を参照すること.

●C言語の説明●

■組込用プログラム作成上の注意■

普通のC言語と同じだが,組込用のプログラムでは次の点に注意すること.

パソコン上でのプログラムと組込み用プログラムの違いのポイントは,次になる.

パソコン用:
組込機器用:

このため,より具体的に説明すると

さらに,次のことを理解した方が望ましい.

  

■サンプルプログラムと解説■

NC30で,LCDボード上で動作するトグルスイッチを使った8ビットの足し算(春学期の実験課題と同じ)を書くと次のようになる.このプログラムではまず8個のトグルスイッチに適当な二進数を設定しスイッチ9(sw9)を押すとLEDにその内容が表示され,その次にまた適当な二進数を設定しなおしてスイッチ10(sw10)を押すと先ほどの値と足し算された結果がLEDに表示される.いわゆる電卓のような動作を行う(ただし8ビットの足し算しかできない).

#include "sfr62a.h"  //ヘッダファイル読込

#define PORTIN	0x00  //定数の定義
#define	PORTOUT	0xff
#define	LEDOFF	0xff

#define	SW9_MASK  0x04	
#define	SW10_MASK 0x08	

void main( void )
{
	
	unsigned char val = 0;  //変数の宣言
	
	p7 = LEDOFF;  //代入文
	pd7 = PORTOUT;
	pd3 = PORTIN;
	pd8 = PORTIN;

	for( ; ; )    //繰り返し文, 無限ループ
        {
		while( p8 & SW9_MASK )//繰り返し文ビット演算
		{
		}
		
		val = ~p3; //代入文ビット演算
		p7 = ~val; //代入文ビット演算
		
		while( p8 & SW10_MASK )//繰り返し文ビット演算
		{
		}
		
		val += ~p3; //代入文ビット演算
		p7 = ~val;  //代入文
	}
}

1行目では,一般のプログラムで使われている「stdio.h」ではなく,ヘッダファイル「sfr62a.h」を読み込んでいる.これはあらかじめこちらで用意したM16c用のヘッダファイルで,このC言語のプログラムと同じ場所においておく.このヘッダファイルには,M16cの制御用レジスタなどが定義されている.

例えば,プログラム内で使用されている「p7」や「pd7」がそれである.次の形式で,ポートそのものとそのポートに対応する方向レジスタを参照できる.ヘッダファイルの中で定義されているため,プログラム内では宣言せずにいきなり代入している.そのほかのポートも同様に

pポート番号  //ポートの本体
pdポート番号 //方向レジスタ

という形式で利用できる.このプログラムで利用しているLCDボードのポートは

ポート番号入出力装置
3トグルスイッチ(8bit)
7LED(8bit)
8スイッチ9とスイッチ10

春学期で学んだとおり,入力装置の場合には対応する方向レジスタに0,出力装置の場合には1を設定しなければならない.

基本的に組込用のプログラムは終了せずに,無限にループさせることが前提である.組込み機器ではプログラムを終了すると機器を完全停止させる以外にないため,電源スイッチを切るまでは動作し続けさせた方がよい.

このため,このプログラムでは,同じ動作をひたすら繰り返している.まずスイッチ9を読み込んで,スイッチが押されるまで待つ.そしてスイッチが押されたら,トグルスイッチを読み込んで,変数varに記憶させる.そしてその値でLEDを点灯,今度はスイッチ10が押されるまで待つ.スイッチ10が押されたら先ほどのvarの値と新しくトグルスイッチの値を読み込んで足し算を行い,結果をLEDに表示している.