トップページ H8 1 一番簡単なLED点灯プログラム

1 一番簡単なLED点灯プログラム
 C言語の入門書では、
Hollo World
を表示させるサンプルプログラムがでてきます。
これと同じような一番簡単なプログラムです。何かプログラムが動作している証を表示しないとプログラムが動作しているかわかりません。そこで、LEDを1つ点灯させます。LEDの点灯が一番簡単です。

プログラムは、start.asm, MyH8.c, 3052.hのファイルから構成されます。
アセンブラは使わないという方針ですが、避けて通れない部分があります。それはCPUに依存した部分はCでは記述できないのでアセンブラを使います。start.asmに記述してある内容は以下のとおりです。

具体的にはベクターアドレスに対する分岐先の記述

割り込みを許可するためCCRレジスへの書き込み

スタックポインターの設定

です。

実際プログラムは0番地に書かれたベクターアドレス、_power_onへジャンプします。
_power_onでは、スタックポインターを設定、RAMのクリアをしてC言語で記述されたMyOSへジャンプします。

次にCのプログラムMyH8.cを解説します。よくみると異常事態(?)と思われた方もいらっしゃるのではないでしょうか?Cではプログラムのエントリーポイントとしてmain()があります。しかし、このファイルにはmain()がありません。
実は、main()は必要ないのです。えっ!と思う人もいるでしょう。Cにおけるmain()に相当する部分が0番地のベクターアドレスなのです。start.asmにおける_power_onがmain()なのです。意図的にパソコンソフト開発とは違うということでmain()を使わずにMyOSとネーミングしました。もちろんmain()でもOKです。キット付属のサンプルプログラムではmain()を使っています。MyH8.cの内容を表示します。
/*
        H8042 ファームウェア
                2007/1/12 Dyna System
*/
#include "3052.h"

void Initialize()
{
        PB_DDR = 0xff;                          /* bit7..0 out  */
        PB_DR |= 0xff;
}

void MyOS()
{
        Initialize();
        while(1)
        {
                PB_DR &= 0xfe;
        }
}

Initialize()でLEDが接続しているポートBの初期化をします。
MyOSではWhileによる無限ループになっています。
そうです!このプログラムはパソコンソフトのようにexitがないのです。
ネバーエンディングプログラム
です。

サンプルプログラムのダウンロード