連載
ターゲットボードでLEDを点灯させてみる:H8で学ぶマイコン開発入門(6)(3/3 ページ)
ターゲットボードに搭載されたLEDやモータなど、各種負荷装置を制御するプログラムを作成していく。まずはLEDを点灯させてみよう。
C言語によるコーディング
実際のプログラムは、以下のようになります。
// ポート2を出力に設定 P2.DDR = 0xFF; // プルアップなし P2.PCR.BYTE = 0x00; // ポート2に1を出力 = LED消灯 P2.DR.BYTE = 0xFF;
リスト2 ポート2の初期化とLED点灯プログラム
LEDを点灯する場合は、ポート2に0を出力(ポート2をクリア)します。例えば、LED8とLED4を点灯、そのほかのLEDを消灯する場合は、リスト3のプログラムを実行します。
P2.DR.BYTE = 0x77;
リスト3 LED8とLED4を点灯、そのほかのLEDを消灯
あるいは、もう少し洗練(?)されたプログラムでは、リスト4のようにも記述できます。
const char no_to_bit[8] = {0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
/*------------------------------------------------------*/
/* LedOn */
/*------------------------------------------------------*/
/* 指定されたLEDを点灯します */
/* led=0のときLED1,led=1のときLED2....が点灯します */
/* LEDはP2に0を出力すると点灯、1を出力すると消灯します */
/* [入力] */
/* led :点灯するLEDを指定します(0〜7) */
/* [出力] */
/* なし */
/* [戻り値] */
/* なし */
/*-----------------------------------------------------*/
void LedOn(int led)
{
/* 対応するビットをクリアする */
/* 0でLED点灯 */
P2.DR.BYTE &= ~no_to_bit[led];
}
/*------------------------------------------------------*/
/* LedOff */
/*------------------------------------------------------*/
/* 指定されたLEDを消灯します */
/* led=0のときLED1,led=1のときLED2....が消灯します */
/* LEDはP2に0を出力すると点灯、1を出力すると消灯します */
/* [入力] */
/* led :消灯するLEDを指定します(0〜7) */
/* [出力] */
/* なし */
/* [戻り値] */
/* なし */
/*-----------------------------------------------------*/
void LedOff(int led)
{
/* 対応するビットをセットする */
/* 1でLED消灯 */
P2.DR.BYTE |= no_to_bit[led];
}
リスト4 プログラムの改良版
なお、上記プログラムで使用しているポート2レジスタは、ヘッダファイル中でリスト5のように定義しています。
struct st_p2 { /* struct P2 */
unsigned char DDR; /* P2DDR */
char wk1; /* */
union { /* P2DR */
unsigned char BYTE; /* Byte Access */
struct { /* Bit Access */
unsigned char B7:1; /* Bit 7 */
unsigned char B6:1; /* Bit 6 */
unsigned char B5:1; /* Bit 5 */
unsigned char B4:1; /* Bit 4 */
unsigned char B3:1; /* Bit 3 */
unsigned char B2:1; /* Bit 2 */
unsigned char B1:1; /* Bit 1 */
unsigned char B0:1; /* Bit 0 */
} BIT; /* */
} DR; /* */
char wk2[20]; /* */
union { /* P2PCR */
unsigned char BYTE; /* Byte Access */
struct { /* Bit Access */
unsigned char B7:1; /* Bit 7 */
unsigned char B6:1; /* Bit 6 */
unsigned char B5:1; /* Bit 5 */
unsigned char B4:1; /* Bit 4 */
unsigned char B3:1; /* Bit 3 */
unsigned char B2:1; /* Bit 2 */
unsigned char B1:1; /* Bit 1 */
unsigned char B0:1; /* Bit 0 */
} BIT; /* */
} PCR; /* */
}; /* */
#define P2 (*(volatile struct st_p2 *)0xFFFFC1) /* P2 Address */
リスト5 ポート2レジスタを定義するヘッダファイル
今回はターゲットボードでLEDを点灯させるプログラミングを紹介しました。次回はLCD制御について解説します。(次回に続く)
Copyright © ITmedia, Inc. All Rights Reserved.