« PICkit-2のデバッグ機能を試す(2/2) | メイン | 超Low-EndマイコンRS08を使おう - MC9RS08KA2に多くのLEDを接続する (8) »

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

特定のLEDを点灯するソース・コード

 フローチャートに従って、ソース・コードを記述します。 ここでは、C:\Projects\CW\RS08C13という場所に RS08C13というプロジェクトを作成して プログラムを記述していきます。 プロジェクトの作成および設定は、これまでと同じなので、省略します。

#include <hidef.h> /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */


//==============================================================
//  V6.0対応パッチ
//==============================================================
#ifndef NVICSTRM
#define _NVICSTRM \
  (*(const NV_ICSTRMSTR *__paged) CONVERT_TO_PAGED(0x00003FFA))
#define NVICSTRM  _NVICSTRM.Byte
#define _NVFTRIM \
  (*(const NV_FTRIMSTR *__paged)  CONVERT_TO_PAGED(0x00003FFB))
#define NVFTRIM   _NVFTRIM.Byte
#endif
//==============================================================


//==============================================================
//  SOPTレジスタの設定
//==============================================================
const byte SOPT_INIT
    = 0b00100010;
//      |||||||+-- RSTPE=0  (PTA2をRESET*として使用しない)
//      ||||||+--- BKGDPE=1 (PTA3をBKGDとして使用する)
//      |||+++---- Reserved
//      ||+------- STOPE=1  (STOP命令を使用可能にする)
//      |+-------- COPT=0   (COPの周期)
//      +--------- COPE=0   (COP機能を使用しない)
//==============================================================


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


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


//==============================================================
//  選択した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;
  }
}


//==============================================================
//  メイン関数
//==============================================================
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 */
}

 次回は、ソース・コードを解説します。

田中範明

カテゴリ:

トラックバック

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

コメントを投稿

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

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

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

Powered by
Movable Type 4.1