割込み処理プログラムの基本構造について説明します。割込み処理プログラムの説明をするために、今まで作成していたタイマープログラムはいったん脇に置いておいて、簡単なプログラムを作成して割込み処理プログラムの基本構造を確認することにします。これから、以下のようにプログラム作成を通して、割込み処理を行うための基本的なプログラムの書き方を確認します。最初に、LEDを1秒ごとに点滅させるプログラムを作成します。点滅は「点灯1秒→消灯1秒」を10回繰り返すプログラムにします。次に、LEDを1秒ごとに点滅処理している最中に、RA3のスイッチが押された場合、割り込み処理としてLEDを0.1秒ごとに2回点滅処理をして、元の処理(1秒ごとに点滅処理)に戻るようにします。割込み処理のポイントは、(1)のLEDの点滅処理のプログラム内容を変更することなく、RA3のスイッチが押された場合の処理をプログラムできる、というところにあります。それでは、(1)のプログラムを作成して、(2)で割込み処理を追加してみましょう。(1)のLED点滅プログラム新規プロジェクトを作成して、LEDを1秒ごとに10回点滅させるプログラムを作成します。10回点滅後にブザーを鳴らすようにします。今までのタイマープログラムを理解されていれば、このプログラムは簡単ですよね。(1);}これから、このプログラムに対して、「RA3のスイッチが押されたら、1秒ごとの点滅処理は一旦中止して、LEDを0.1秒ごとに2回点滅、終わったら元に戻る」という割込み処理を追加していきます。割込み処理の基本的な書き方の概念図を説明します。上のLED点滅プログラムは以下のようになっています。このプログラムに対して、割込み処理を追加するとどうなるか説明します。割込み処理の内容は「スイッチが押されたら、通常の点滅処理は一旦中止して、LEDを0.1秒ごとに5回点滅、終わったら元に戻る」です。プログラムの追加は大きく分けて2種類あります。一つは「割込み処理関数の追加」、もう一つは「割込み有効化/無効化」です。先ほどのプログラム構造に、この2種類を追加すると以下のようになります。割込み処理に関して追加したところは緑色の部分です。main関数とは別に「LEDを0.1秒ごとの点滅を2回繰り返す」という処理内容の割り込み処理関数を追加します。次に、本体のmain関数の中で、割り込み処理を行いたい部分の前で「割込み有効化」をします。この「割込み有効化」は、具体的には「RA3レジスタの値が1から0に変化したら、現在の処理を一旦中断して『割り込み処理関数』を実行する」という設定になります。(RA3ピンにはスイッチをプルアップで接続していますので、RA3レジスタはスイッチがOFFの時は1、ONの時は0でしたよね)次に、LEDを1秒ごとに10回点滅処理が終わり、割り込み処理が必要なくなったら「割込み無効化」をします。ブザーを鳴らしている間も割り込み処理をさせたい場合は、この割込み無効化はする必要はありません。このように「割込み処理」とは、マイコンの何かの状態が変化したら、今実行している処理は一旦中断して、別に用意した処理を行う、というものです。今回は、main関数の中のLED点滅処理中に、RA3のスイッチが押された場合にLEDを0.1秒ごとに点滅する、という割り込み処理のプログラム構造を説明しましたが、他のケースでも割込み処理プログラムの基本構造は同じです。「通常のプログラムを動作中、周辺機器などからの要求により強制的に別のプログラムを実行する処理」とありましたが、この意味がなんとなくわかりましたでしょうか。