« 超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (7) | メイン | PICkit-2のロジック・アナライザ機能を試す(前編) »

超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (8)

 今回は、ソース・コードに解説を加えていきます。

大域変数の解説

 このプログラムで使用する変数は、一つだけです。

//==============================================================
//  変数の宣言
//==============================================================
byte            led_index;      // 点灯させるLEDの場所

 プログラムは、変数led_indexの値に従って、 LEDを一つだけ点灯させます。 変数の値と点灯するLEDとの関係は、 後の「選択したLEDを点灯させる関数」で解説します。

初期設定関数の解説

 関数initialize(void)では、 レジスタと変数の初期化を行っています。

//==============================================================
//  初期設定
//==============================================================
void initialize(void) {
  ICSTRM    = NVICSTRM;         // TRIMレジスタを設定する
  ICSSC     = NVFTRIM;          // FTRIMレジスタを設定する
  SOPT      = SOPT_INIT;        // SOPTレジスタを初期化する
  led_index = 0;                // LED0を点灯させる
}

 レジスタと変数が初期化されます。 変数led_indexは、0に初期化され、 最初はLED0が点灯します。

選択したLEDを点灯させる関数の解説

 関数put_led(void)は、 変数led_indexで指定した LEDを点灯させます。

//==============================================================
//  選択したLEDを点灯させる
//==============================================================
void put_led(void) {
  switch (led_index) {
    case 0:                     // LED0を点灯させる
      PTAD  = 0b00010000;       // PTA5=L, PTA4=H, PTA1=Z
      PTADD = 0b00110000;
      break;
    case 1:                     // LED1を点灯させる
      PTAD  = 0b00100000;       // PTA5=H, PTA4=L, PTA1=Z
      PTADD = 0b00110000;
      break;
    case 2:                     // LED2を点灯させる
      PTAD  = 0b00000010;       // PTA5=Z, PTA4=L, PTA1=H
      PTADD = 0b00010010;
      break;
    case 3:                     // LED3を点灯させる
      PTAD  = 0b00010000;       // PTA5=Z, PTA4=H, PTA1=L
      PTADD = 0b00010010;
      break;
    case 4:                     // LED4を点灯させる
      PTAD  = 0b00100000;       // PTA5=H, PTA4=Z, PTA1=L
      PTADD = 0b00100010;
      break;
    case 5:                     // LED5を点灯させる
      PTAD  = 0b00000010;       // PTA5=L, PTA4=Z, PTA1=H
      PTADD = 0b00100010;
      break;
    default:                    // 全部消灯する
      PTAD  = 0b00000000;       // PTA5=L, PTA4=L, PTA1=L
      PTADD = 0b00110010;
  }
}

 変数led_indexの値により、 ポートが以下の表のように設定され、 選択されたLEDが点灯します。

変数の値と点灯するLEDの関係
led_index ポートの状態 点灯するLED
PTA5PTA4PTA1
0L出力H出力入力LED0
1H出力L出力入力LED1
2入力L出力H出力LED2
3入力H出力L出力LED3
4H出力入力L出力LED4
5L出力入力H出力LED5
それ以外L出力L出力L出力なし

メイン関数の解説

 メイン関数main(void)は、 フローチャートを忠実に再現した記述になっています。

//==============================================================
//  メイン関数
//==============================================================
void main(void) {

  EnableInterrupts; /* enable interrupts */
  /* include your code here */
  initialize();         // 初期設定
  for(;;) {
    put_led();          // 選択したLEDを点灯させる
  } /* loop forever */
  /* please make sure that you never leave main */
}

 変数led_indexは、 デバッガを使い手動で変更するため、 プログラムには変更を行う部分がありません。


 次回は、マイコンにプログラムを書き込んで、実行します。

田中範明

カテゴリ:

トラックバック

このエントリーのトラックバックURL:
http://www.eleki-jack.com/mt/mt-tb.cgi/1516

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

会社案内
情報セキュリティおよび個人情報の取り扱いについて

コメントとトラックバックは、spamを予防するために、編集担当が公開の作業をするまで非公開になっています。
コメントはそれぞれ投稿した人のものです。

Powered by
Movable Type 4.1