連載
» 2007年02月19日 00時00分 公開

ターゲットボードでLEDを点灯させてみるH8で学ぶマイコン開発入門(6)(3/3 ページ)

[山本 繁寿 ソフィアシステムズ,MONOist]
前のページへ 1|2|3       

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制御について解説します。(次回に続く)

⇒ 連載バックナンバーはこちら

前のページへ 1|2|3       

Copyright © ITmedia, Inc. All Rights Reserved.