======Lesson4======
**//注意//**
タイマー割り込みを実行するためにはintprg.cの64行目あたりを以下のように書き換えてください
__interrupt(vect=24) void INT_IMIA0(void) {/* sleep(); */int_imia0();}
**タイマー割り込みとは何でしょう。**
今まで書いてきたプログラムは、上から下まで順に実行する(サブルーチンはその通り飛ぶとして)ものです。\\
これが出来ればライントレースも**大分**近くなります。\\
**頑張りましょう!**
例えれば、
**-Aさんと話す→(話し終わる)→Bさんと話す**\\
というようなものです。とりあえずひとつづつ消化しなくてはいけません。\\
これが割り込みというシステムを使うと、\\
**-Aさんと話す→Bさんが話しかけてくる→Aさんに待ってもらう→Bさんと話す→(話し終わる)→Aさんとの話の続きをする**\\
と言う感じになります。\\
プログラム的には、main文で「Aさんと会話」、割り込み文で「Bさんと会話」と言う感じです。\\
つまり、__同時に色々なことをしたいときに__良く使うものです。\\
例のように「Bさんが話しかけてくる」というような\\
何かのアプローチがあって割り込みが入る場合もありますが\\
今回は、時間で割り込みをかけてみたいと思います。\\
1sごとに指定された割り込み文を実行する、などと言うことです。\\
**実際にやってみる**
まず、時間を使って割り込む事を**タイマー割り込み**といいます。\\
タイマー割り込みをつかうには、「ITU0~4」の設定が必要です。\\
例えば、ITU0をつかうには
ITU0.TCR.BYTE=0x23;
ITU0.TSR.BYTE=0x00;
ITU0.TIER.BYTE=0x01;
ITU0.GRA=390;
のような初期化(設定)が必要です。\\
それぞれの意味は赤い本のITU(タイマー割り込み)の所を見て理解してください。
とりあえず、初期化すると\\
GRAで指定したクロック(時間)ごとに
void int_imia0 (void) {
ITU0.TSR.BIT.IMFA = 0;
//割り込みで実行したい内容
}
が自動で実行されるようになっています。\\
最初の一行はそういうものだと思ってください。\\
タイマー割り込みはコレだけです。
ココまでわかれば課題です。\\
__1秒おきにLEDを点滅させるプログラム__を作ってください。\\
これは、例もありますし余裕かと思います。
それができたら\\
__0.5秒おきにLEDを点滅させるプログラム__を作ってみましょう。
余裕があれば、右から順番に0.5秒おきについていく、なんてプログラムも面白いと思います。
** 追記 設定すべきGRAの簡単な決め方 **
GRA = (計りたいミリ秒)*(cpu周波数KHz)/(分周比)\\
分周比は1,2,4,8等の整数とします\\
分周比はITU0.TCR.BIT.TPSCで設定してください\\
詳しくは赤い本を見てください