AKI-H8/3052fのCクロスコンパイラ環境でのはじめてのプログラミング
タイマー割り込みのみ使う簡単コマンド利用版
Copyright(C)12Nov004
coskx
1.はじめに
この文書は,Windows2000/XPパソコンにAKI-H8/300hのC言語クロスコンパイル環境での,コンパイル作業のための方法を記述しています。あらかじめ指導者あるいはパソコン管理者が構築したC言語クロスコンパイラ環境(秋月のセットで配布されている日立の評価コンパイラを利用します。)で,C言語によるH8プログラミングを学ぼうとする方がプログラミングを行ない,AKI-H8/3052fでプログラムが動作するまでを解説します。C言語のプログラミングについては別の文書で学んでください。
マイコンプログラミングを学習する初心者向けの環境であり,割り込みはタイマー割り込みのみを使うことを想定しています。
|
図1.1 AKIマザーボードとAKI-H8/3052f |
2.本文書で記述してある作業の特徴
Cプログラムソースファイルが出来上がったら,ドラッグアンドドロップを1回行なうだけです。他に何もすることはありません。簡単コマンドを用いるので,作業が効率的です。
テンプレートフォルダのダウンロード | サンプルファイルのダウンロード | ||
|
|
前提
(1)秋月から購入したCコンパイラ関係ファイルおよびインクルードファイル,ライブラリファイルはすべて「C:\Program
Files\h8」に入っているものとします。
(2)startup.OBJ(ここから取得可能):スタートアップルーチンも「C:\Program
Files\h8\C」に入っているものとします。これはh8/3048と同じものを使います。
(3)h8_3052.cmd(ここから取得可能):コンパイル用コマンドも「C:\Program
Files\h8\C」に入っているものとします。
(4)転送ソフト「h8write.exe」を利用します。これも「C:\Program
Files\h8\C」に入っているものとします。
(5)3052F.h(ここから取得可能):ヘッダも「C:\Program
Files\h8\C」に入っているものとします。ただしこれは,「トランジスタ技術2002年3月号付録CDROM」より入手した「3052S.h」のファイル名を変更したものです。
転送ソフト「h8write.exe」はみついわゆきお氏のオープンツールです。次の場所から入手できます。
http://mes.sourceforge.jp/h8/writer-j.html
その他にH8WriteTurboあるいはH8Write(Masahiro Ochiai氏)を用いてもよいでしょう。
H8WriteTurboは製品添付版です。H8Writeは次の場所から入手できます。
http://strawberry-linux.com/h8/
注意
3.プログラムの作成から実行まで
シングルボードマイコンAKI-H8/3052内で動作するプログラムはパソコン上で開発され、シングルボードマイコンAKI-H8/3052にフラッシュメモリ書き込みされます。パソコンで開発されるソースプログラムはC言語で記述され、クロスコンパイラにより、オブジェクトプログラムに変換され、最後はフラッシュメモリ書き込み形式(XXXX.MOT)になります。
シングルボードマイコンAKI-H8/3052を動作させるまでの大きな流れは以下のようになります。
(1)パソコン上で作業用のフォルダの用意
(2)パソコン上でCソースプログラムの作成
(3) パソコン上でダウンロード形式ファイル(実行プログラム)の作成(クロスコンパイル、コード変換)
(4)パソコン上の転送ソフトによる,ダウンロード形式ファイル(実行プログラム)のAKI-H8/3052への書き込み操作
これら四つの作業によりシングルボードマイコン内で動作させることが出来ます。
4.テンプレートフォルダの実行
(1)図3.1に示すテンプレートフォルダでの実行の様子を確かめてみよう。テンプレートフォルダのダウンロードは ここ です。
図3.1 小坂のテンプレートフォルダ
(2)テンプレートフォルダがダウンロードできたら,解凍し,「xxxxxx.c」の内容をエディタで確かめてみてください。
プログラムは,AKI-H8/3052マザーボード上のLEDを点滅させるものです。プログラムの内容には深入りしないことにしましょう。
リスト プログラムソースファイル"xxxxxx.c"
/* マザーボード上のLEDの1秒ごとのON-OFFを行う */
#include <3052f.h>
void msecwait(int msec)
/*msec間なにもしない時間稼ぎ関数*/
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<2481;j++); /*2481は実測によって求めた値*/
}
}
main()
{
/*P5の下位2ビットを出力に設定*/
/* P5のDDRの下位2ビットに1を与えるとこの設定になる*/
/*DDRとはDataDirectionRegister(データ方向設定レジスタ)*/
P5.DDR = 0x3; /*0x3 = 00000011(二進数)*/
while(1) {/*これは無限ループ*/
/*LED0をONにする P5のDRの第0ビットを1にする*/
/*DRとはDataRegister(データレジスタ)*/
P5.DR.BIT.B0=1;
/*LED1をOFFにする P5のDRの第1ビットを0にする*/
P5.DR.BIT.B1=0;
msecwait(1000);/*1000msecの間なにもしない*/
/*LED0をOFFにする P5のDRの第0ビットを0にする*/
P5.DR.BIT.B0=0;
/*LED1をONにする P5のDRの第1ビットを1にする*/
P5.DR.BIT.B1=1;
msecwait(1000);
}
}
(3)この後の作業は次のようになります。
ただし,図3.1のテンプレートフォルダは「デスクトップ」あるいは「マイドキュメント」の中にあるとします。
表3.1 フラッシュメモリ書き込み形式ファイルの作成とROMライター書き込み操作から実行までの手順
パソコン側 |
マイコンH8側 | |||
(1) | <1>AKI-H8/3052のマザーボード上の電源スイッチをOFFにします。 <2>AKI-H8/3052のマザーボード上の状態選択スイッチをライト(Write)モードにします。ライトモードとはマイコンH8/3052がパソコンからプログラムコードを受け取り,フラッシュメモリに書き込むモードのことです。 <3>AKI-H8/3052のマザーボード上の電源スイッチをONにします。 | |||
(2) |
ソースファイル(xxxxxx.c)のアイコンを「h83052.cmdへのショートカット」のアイコン上にドラッグアンドドロップします。
|
|||
(3) |
<1>転送が終了したら、AKI-H8/3052のマザーボード上の電源スイッチをOFFにします。 |
(4)ここまでの作業が順調に出来ていたら,AKI-H8/3052マザーボード上の2つのLEDが点滅して動作が確認できるはずです。
5.新規プログラムの開発手順
5.1 パソコン上で作業用のフォルダの用意
作業準備は作業用フォルダを適当な場所に作る作業です。
作業用のフォルダを用意します。ここではled00という名前のフォルダを使用することにします。
その中には以下のファイルを用意しておきます。
(1)h83052.cmdへのショートカット 「C:\Program
Files\h8\C\h83052.cmd」を指すようになっています。
(2)h8-3052.h 小坂作成
これ以外に
(3)to_H8.ht
ハイパーターミナル設定ファイル
(RS232C設定が終わっているもの 38400baud, Async, 8bit , NoParity,
stop1)
が入っていると便利です。
これ以降の作業はすべてこのフォルダ内で行われます。
テンプレートフォルダの複製を作ってフォルダ名をled00としてもよいでしょう)
5.2 プログラムの作成
Windowsマシン上のエディタ上で、C言語で記述されているソースプログラムを作成します。
例えばled00.cを作るという仮定で以下の説明にはいります。リストにあるファイルを作成してください。
このリストをコピー&ペーストするとよいでしょう。
リスト プログラムソースファイル"led00.c"
/* マザーボード上のLEDの1秒ごとのON-OFFを行う */
#include <3052f.h>
void msecwait(int msec)
/*msec間なにもしない時間稼ぎ関数*/
{
int i,j;
for (i=0;i<msec;i++) {
for (j=0;j<2481;j++); /*2481は実測によって求めた値*/
}
}
main()
{
/*P5の下位2ビットを出力に設定*/
/* P5のDDRの下位2ビットに1を与えるとこの設定になる*/
/*DDRとはDataDirectionRegister(データ方向設定レジスタ)*/
P5.DDR = 0x3; /*0x3 = 00000011(二進数)*/
while(1) {/*これは無限ループ*/
/*LED0をONにする P5のDRの第0ビットを1にする*/
/*DRとはDataRegister(データレジスタ)*/
P5.DR.BIT.B0=1;
/*LED1をOFFにする P5のDRの第1ビットを0にする*/
P5.DR.BIT.B1=0;
msecwait(1000);/*1000msecの間なにもしない*/
/*LED0をOFFにする P5のDRの第0ビットを0にする*/
P5.DR.BIT.B0=0;
/*LED1をONにする P5のDRの第1ビットを1にする*/
P5.DR.BIT.B1=1;
msecwait(1000);
}
}
ここまでの作業でフォルダled00の中には
(1)h83052.cmdへのショートカット
(2)h8-3052.h
(3)to_H8.ht ハイパーターミナル設定ファイル
(4)led00.c
ができているはずです。
5.3 フラッシュメモリ書き込み形式ファイルの作成とROMライター書き込み操作
Cプログラムソースファイル「led00.c」が出来ましたら,次の手順で実行してください。
表4.1 フラッシュメモリ書き込み形式ファイルの作成とROMライター書き込み操作から実行までの手順
パソコン側 |
マイコンH8側 | |||
(1) | もしハイパーターミナルなどCOMポートを使用しているソフトがパソコン上で動作している時はそれらのソフトを中止します。 | |||
(2) | <1>AKI-H8/3052のマザーボード上の電源スイッチをOFFにします。 <2>AKI-H8/3052のマザーボード上の状態選択スイッチをライト(Write)モードにします。ライトモードとはマイコンH8/3052がパソコンからプログラムコードを受け取り,フラッシュメモリに書き込むモードのことです。 <3>AKI-H8/3052のマザーボード上の電源スイッチをONにします。 (注意:H8/3052は,電源スイッチONの瞬間に,状態選択スイッチの状態を検査しますので,必ず<1><2><3>の手順が必要です) | |||
(3) |
出来上がったソースファイル(led00.c)のアイコンを「h83052.cmdへのショートカット」のアイコン上にドラッグアンドドロップします。
|
|||
(4) | <1>転送が終了したら、AKI-H8/3052のマザーボード上の電源スイッチをOFFにします。 <2>AKI-H8/3052のマザーボード上の状態選択スイッチをラン(Run)モードにします。 | |||
(5) | 必要ならパソコン側で「to_H8.ht」をダブルクリックしてターミナルアプリケーション「ハイパーターミナル」を立ち上げます。 | |||
(6) | AKI-H8/3052のマザーボード上の電源スイッチをONにすると転送したプログラムが作動します。 |
注意(1) ネットワーク上のフォルダを利用する場合はネットワークドライブを割り当ててから実行する。ただし,動作が遅いので勧めません。自分のHD上で作業しましょう。
注意(2) もしマルチソースファイルでのプログラミングの時は必要なソースファイルすべてを同時にドラッグアンドドロップしてください。5個まで対応しています。
このWebページの最後の参考リスト1にh83052.cmdのソースを示します。自分の環境に合うように設定を変えても結構です。
ここまでの作業でフォルダled00の中には
(1)h83052.cmdへのショートカット
(2)h8-3052.h
(3)to_H8.ht ハイパーターミナル設定ファイル
(4)led00.c
(5)led00.MOT フラッシュメモリ書き込み形式ファイル(実行プログラム)
(6)lud00.MAP メモリマップファイル(通常は不要)
ができているはずです。
なお「コンパイル−リンク−コンバート−転送」作業における失敗時の画面例を以下に示します。
失敗例1 Cソースプログラムで文法エラーがあった時
(led01.cの7行目に宣言されていない変数iとjがある)
(エラーメッセージでファイル名の次はエラー行番号!)Compile, link and convert command for H8 C-programing ver1.06
Copyright(c) 21June2002 coskxH8/300H C COMPILER(Evaluation software) Ver.1.0
led01.C 7 2225 (E) UNDECLARED NAME: "i"
led01.C 7 2220 (E) MODIFIABLE LVALUE REQUIRED
led01.C 7 2225 (E) UNDECLARED NAME: "j"
led01.C 7 2220 (E) MODIFIABLE LVALUE REQUIRED
*** error *** コンパイルエラーがありました。
Pushing any key leads the exit.
失敗例2 リンクエラーがあった時
関数名が見つからない(関数名のミスタイプのことが多い)Compile, link and convert command for H8 C-programing ver1.06
Copyright(c) 21June2002 coskxH8/300H C COMPILER(Evaluation software) Ver.1.0
H8/300H LINKAGE EDITOR (Evaluation software) Ver.1.0: OUTPUT led02
: PRINT led02
: INPUT led02
: INPUT c:\Progra~1\h8\c\startup.obj
: LIB c:\Progra~1\h8\c\c38hab.lib
: ROM (D,X)
: START P,C,D(100),X,B(0FDF10)
: EXIT
** 105 UNDEFINED EXTERNAL SYMBOL(led02._wait)LINKAGE EDITOR COMPLETED
*** error *** リンクエラーです。
Pushing any key leads the exit.
失敗例3 AKI-H8/3052のフラッシュメモリ書き込み受け入れ態勢が完全でない時
(AKI-H8/3052の電源が入っていない時)
(ライタモードになっていない時)Compile, link and convert command for H8 C-programing ver1.06
Copyright(c) 21June2002 coskxH8/300H C COMPILER(Evaluation software) Ver.1.0
H8/300H LINKAGE EDITOR (Evaluation software) Ver.1.0: OUTPUT led00
: PRINT led00
: INPUT led00
: INPUT c:\Progra~1\h8\c\startup.obj
: LIB c:\Progra~1\h8\c\c38hab.lib
: ROM (D,X)
: START P,C,D(100),X,B(0FDF10)
: EXITLINKAGE EDITOR COMPLETED
H8/300H OBJECT CONVERTER (Evaluation software) Ver.1.0OBJECT CONVERTER COMPLETED
h8w: synchronizing.....
no response from cpu board
Pushing any key leads the exit.
失敗例4 「ハイパーターミナル」などのシリアルポートを
利用しているソフトが動いていてフラッシュメモリ書き込みソフトが
シリアルポート(COMポート)を取得できない時Compile, link and convert command for H8 C-programing ver1.06
Copyright(c) 24June2002 coskxH8/300H C COMPILER(Evaluation software) Ver.1.0
H8/300H LINKAGE EDITOR (Evaluation software) Ver.1.0: OUTPUT led00
: PRINT led00
: INPUT led00
: INPUT c:\Progra~1\h8\c\startup.obj
: LIB c:\Progra~1\h8\c\c38hab.lib
: ROM (D,X)
: START P,C,D(100),X,B(0FDF10)
: EXITLINKAGE EDITOR COMPLETED
H8/300H OBJECT CONVERTER (Evaluation software) Ver.1.0OBJECT CONVERTER COMPLETED
comm open failed
Pushing any key leads the exit.
5.4 プログラムの実行
「led00.MOT」がマイコンにフラッシュメモリ書き込みされて,実行します。正常に作業が終えていれば,マザーボード上の2つのLEDが点滅します。
参考1 h83052.cmdの内容
h83052.cmdの内容を参考リスト1に示します。
参考リスト1 motファイル作成用のコマンドファイル「h83052.cmd」
@echo off
echo Compile, link and convert command for H8 C-programing ver1.06
echo Copyright(c) 24June2002 coskx
rem echo Copyright(c) 23June2002 coskx CS TNCT
rem echo Copyright(c) 21June2002 coskx
rem echo Copyright(c) 14June2002 coskx
rem echo Copyright(c) 9June2002 coskxrem Cのソースファイルおよびobjファイルは最大で5個までドラッグ&ドロップに対応
rem 複数ファイルのドロップの場合は次のことに気をつけること
rem 選択されているファイルのうちフォルダ表示で最も上の列(この列に複数のファイルがある場合は左端)
rem にあるファイル名でフラッシュメモリ書き込み形式ファイルの名前が決まる。そのためmain()を持つファイルをその
rem 位置に置くと良い。
rem MOTファイルをドラッグ&ドロップするとすぐフラッシュメモリ書き込みが始まる。rem *************** カスタマイズ領域 begin *******************
rem コンパイル作業に必要なパスの追加を行います。
set mypath=%HOMEDRIVE%\Program Files\h8\c
rem スタートアップルーチンを記述します。
set startuproutine=%HOMEDRIVE%\Progra~1\h8\c\startup.obj
rem H8のライブラリを指定します。
set h8library=%HOMEDRIVE%\Progra~1\h8\c\c38hab.lib
rem フラッシュメモリ書き込みに使用するプログラムを指定します。
set downloader=h8write.exe -3052
rem フラッシュメモリ書き込み直前にポーズしてそのままフラッシュメモリ書き込みするかどうか問い合わせします
rem YES:問い合わせる NO:問い合わせない
set downloadready=NO
rem 正常にフラッシュメモリ書き込みが終了した場合はそのまま終了する
rem YES:そのまま終了する NO:そのまま終了せず停止
set downloadquit=NO
rem *************** カスタマイズ領域 end *******************rem ----------------------------------------------------------------------------
rem カレントドライブ・カレントディレクトリへ移動
%~d1
cd %~p1rem コンパイラのパスの設定
path=%path%;%mypath%rem もしMOTファイルがドラッグ&ドロップされたら,フラッシュメモリ書き込みだけ行なう
if %~x1==.mot goto DOWNLOAD
if %~x1==.MOT goto DOWNLOADrem 誤ったファイルがドロップされたか,単なるダブルクリックで起動した場合は何もしない
if exist %~n1.obj goto COMPILE
if not exist %~n1.c goto NO_SOURCE_ERROR:COMPILE
rem ----------------------------------------------------------------------------
rem コンパイル 〜.objの作成 5個のファイル入力に対応
for %%p in (%~n1 %~n2 %~n3 %~n4 %~n5 ) do if exist %%p.c if exist %%p.obj del %%p.obj
for %%p in (%~n1 %~n2 %~n3 %~n4 %~n5 ) do if exist %%p.c cc38h -include=%HOMEDRIVE%\Progra~1\h8\c %%p
for %%p in (%~n1 %~n2 %~n3 %~n4 %~n5 ) do if exist %%p.c if not exist %%p.obj goto COMPILE_ERROR:LINK
rem ----------------------------------------------------------------------------
rem 一時的なサブファイル「q9j2h5c4k6b1.sub」の作成
rem ファイル名「q9j2h5c4k6b1.sub」は他と重複しないための長いでたらめの名前
rem (「>」は新規作成,「>>」は追記)
rem タイマ割り込みを使用していない場合はシンボル_interrupt_cfuncでリンクエラーがあるが,
rem これは表示しない
echo OUTPUT %~n1 >q9j2h5c4k6b1.sub
echo PRINT %~n1 >>q9j2h5c4k6b1.sub
echo INPUT %~n1 %~n2 %~n3 %~n4 %~n5 >>q9j2h5c4k6b1.sub
echo INPUT %startuproutine% >>q9j2h5c4k6b1.sub
echo LIB %h8library% >>q9j2h5c4k6b1.sub
echo ROM (D,X) >>q9j2h5c4k6b1.sub
echo START P,C,D(100),X,B(0FDF10) >>q9j2h5c4k6b1.sub
echo EXIT >>q9j2h5c4k6b1.subrem (1)一時的なサブファイル「q9j2h5c4k6b1.sub」によるリンク 〜.absの作成
rem (2)一時的なサブファイルの削除
l38h -subcommand=q9j2h5c4k6b1.sub | find /V "interrupt_cfunc" >q9j2h5c4k6b1.txt
del q9j2h5c4k6b1.sub
for %%p in (%~n1 %~n2 %~n3 %~n4 %~n5 ) do if exist %%p.c if exist %%p.obj del %%p.obj
type q9j2h5c4k6b1.txt
find "**" q9j2h5c4k6b1.txt >nul
if errorlevel 1 goto CONVERT
del q9j2h5c4k6b1.txt
del %~n1.abs
goto LINK_ERROR:CONVERT
del q9j2h5c4k6b1.txt
rem ----------------------------------------------------------------------------
rem Sフォーマットに変換 〜.motの作成
c38h %~n1.abs
del %~n1.absrem motファイルの転送
if %downloadready%==NO goto DOWNLOAD
echo Please set AKI-H8 ready and hit any key / push 'Ctrl+C' if you want
pause >nul
:DOWNLOAD
echo sending MOT file .....
%downloader% %~n1.mot
if %downloadquit%==YES exit
goto TERMINAL:NO_SOURCE_ERROR
echo *** error *** Cのソースファイルが指定されていません。
goto TERMINAL:COMPILE_ERROR
for %%p in (%~n1 %~n2 %~n3 %~n4 %~n5 ) do if exist %%p.c if exist %%p.obj del %%p.obj
echo *** error *** コンパイルエラーがありました。
goto TERMINAL:LINK_ERROR
echo *** error *** リンクエラーです。
goto TERMINAL:TERMINAL
echo Pushing any key leads the exit.
pause >nul
exit
補足1 フラッシュメモリ書き込み形式ファイル(.MOTファイル)をドラッグ&ドロップすると直ちに転送が始まります
補足2 「〜.c」のみでなく「〜.obj」も同時にドラッグ&ドロップが可能です
補足3 ダウンロードソフトにライセンス取得前の「h8w.exe」を用いる場合はカスタマイズ領域のダウンローダの設定で変更してください
補足4 ファイル「q9j2h5c4k6b1.sub」「q9j2h5c4k6b1.txt」を一時的に自動生成し,使用後消去します
この時生成される「q9j2h5c4k6b1.sub」は次のようになっている
一時的に自動生成される.subファイル例(test.cがh83052.cmdにドロップされた時) OUTPUT test
PRINT test
INPUT test
INPUT %HOMEDRIVE%\Progra~1\h8\c\startup.obj
LIB %HOMEDRIVE%\Progra~1\h8\c\c38hab.lib
ROM (D,X)
START P,C,D(100),X,B(0FDF10)
EXIT
参考2 「%HOMEDRIVE%\Program Files\h8\c」の内容
秋月で購入したCコンパイラのあるフォルダは「c:\Program Files\h8\c」であり,内容は次のとおりです。フォルダ名,ファイルの配置が異なる場合は「h83052.cmd」中の必要なところを直してください。
秋月から購入時に導入されたファイル
A38H.EXE :アセンブラ本体
CC38H.EXE :Cコンパイラ本体
C38H.EXE :コンバータ本体
L38H.EXE :リンカ本体
C38CGNB.EXE :CC38H.EXEが使用するコプログラム
C38ASMB.EXE :CC38H.EXEが使用するコプログラム
C38FRNTB.EXE :CC38H.EXEが使用するコプログラム
C38PEPB.EXE :CC38H.EXEが使用するコプログラム
C38MIDB.EXE :CC38H.EXEが使用するコプログラム
3052F.H :ヘッダーファイル
ASSERT.H :ヘッダーファイル
CTYPE.H :ヘッダーファイル
ERRNO.H :ヘッダーファイル
FLOAT.H :ヘッダーファイル
SETJMP.H :ヘッダーファイル
LIMITS.H :ヘッダーファイル
MATH.H :ヘッダーファイル
STDLIB.H :ヘッダーファイル
STRING.H :ヘッダーファイル
STDDEF.H :ヘッダーファイル
STDARG.H :ヘッダーファイル
STDIO.H :ヘッダーファイル
C38HAB.LIB :ライブラリ3052Hアドバンスモード用
C38HNB.LIB :ライブラリ3052Hノーマルモード用さらに小坂が追加した4つのファイルも加えられています。
startup.OBJ :スタートアップルーチン 小坂
h83052.cmd :コンパイルリンクのスクリプト 小坂
h8write.exe :ファイル転送ソフト みついわゆきお氏
3052F.h :3052S.hの名前を変更したファイル(特に変更する理由は無いが西君が広めてしまった)
参考3 「startup.obj」の利用の利点
(1)初期化されたグローバル変数,および関数内の初期化されたstatic変数はRAM領域で使えるようにします。const修飾子を持つ初期化されたグローバル変数,およびconst修飾子を持つ関数内の初期化されたstatic変数はROM領域に割り当てられるようにします。(「5.変数について補足」参照)
秋月電子通商で販売しているCコンパイラに付属している環境が与えるスタートアップルーチン(resetv.obj)では,このような変数の割り当てができていません。初心者が勉強するには不都合な環境です。初心者が通常のC言語の変数感覚でなにげなく使える環境を与えます。(2)タイマ割り込みをサポートします。
参考4 「h8-3052.h」の利用の利点
(1)マザーボード上のスイッチ・LEDの制御関数をインクルードファイルで提供します。
(2)プログラムをフラッシュメモリ書き込みに用いた通信回線とWindowsマシンのハイパーターミナルを用いた表示環境を提供し,printf()に似た整数変数出力ルーチン,整数入力ルーチンをインクルードファイルで提供します。
(3)「startup.obj」とで設定されたタイマ割り込みの仕掛けを,タイマ割り込み設定ルーチンでサポートします。