« M16Cで音楽 | トップページ | シロップ漬け »

2015年1月 5日 (月)

M16CボードのLCD

昨日、MusicDriverを書いたついでに気付いたことがあるのでメモを残しておきたい。
M16C/62Pのマイコンボードは、各種の拡張ボードに載せて使うことが多い。

▽ここに写真

たとえば、LCDボード(左)や、マルチIOボード(右)に同梱されているCD-Rには、いくつかのサンプルプログラムが収録されている。
サンプルプログラムの一つにLCD表示があるが、割込みを使用すると誤動作するようだ。
正しく動作させるためには、LCD表示に関係する関数の三つ、すなわちコマンド書込み、データ書込み、ビジーチェック、それぞれに割込みの記述が必要となる。
たとえば、以下のように▼の処理を追加すればいい。

//	----------------------------------------
//	LCDへのコマンド書込み
//	----------------------------------------
void lcdWrite1Command( unsigned char command ) {
	unsigned char outcommand;

//	▼ここと
	_asm( "\tFCLR	I");				// 割込み禁止

	LCDRS = 0;					// RS<-0(コマンド指定)
	LCDE  = 0;
	LCDRW = 0;					// RW<-(W指定)

	// ポート方向レジスタを出力に設定
	pd6 |= 0x03;
	pd8_7 = 1;
	
	prc2 = 1;					// pd9への書き込み許可
	pd9 = 0xFF;

	outcommand = command >> 4;			// 上位4bitを下位4bitへ
	outcommand &= 0x0f;				// マスク処理
	p9 = outcommand;				// コマンド上位4bitを出力
	LCDE = 1;
#pragma ASM
	nop
	nop
	nop
	nop
#pragma ENDASM
	LCDE = 0;
	outcommand = command & 0x0f;			// コマンドデータの上位4bitを殺す
	p9 = outcommand;				// コマンドデータ下位4bitを出力
	LCDE = 1;
#pragma ASM
	nop
	nop
	nop
	nop
#pragma ENDASM
	LCDE = 0;
//	▼ここだな
	_asm( "\tFSET	I");				// 割込み許可
}

Iフラグは割込み許可フラグらしい。IフラグをクリアするとCPUは割込み禁止となり、Iフラグをセットすると、割込み許可となるようだ。
上のように、フラグの操作はインラインアセンブラで記述すると簡単だ。

この記事を書くに当たって、絶版になっているM16Cのアセンブラ本を参考にした。アセンブラ本なんて役立つものかと思っていたが、役立つこともあるんだな。

« M16Cで音楽 | トップページ | シロップ漬け »

パソコン・インターネット」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/24707/58533563

この記事へのトラックバック一覧です: M16CボードのLCD:

« M16Cで音楽 | トップページ | シロップ漬け »

最近のトラックバック