割込みはどういうときに使う?

それでは, 割込みはどういうときに使うのでしょうか?
例えば,ポートに接続されたLEDを1秒ごとに反転させる処理を考えてみましょう。

【割込みを使わない場合】

割込みを使わない場合,タイマのカウントを開始後,1秒経過したかというチェック処理が必要になります。 ここでいうチェック処理は,「タイマのカウント値が設定したカウント値と等しくなったか?」,あるいは,「(1秒経過時に自動的に)ハードウェアにより設定されるフラグがセットされたか?」というような処理になるかと思います。 そして,1秒経過していたらLEDを反転するという処理をします。 フローチャートで表すと以下のようになりますね。

ソフトウェアで状態をチェックして待つので,状態が変化した(条件を満たした)その時(瞬時)に処理を行うということはできません。つまりどうしてもタイムラグが発生してしまいます。さらに,他に行う処理が増えるほど,そのチェック処理が遅れてしまうため,条件を満たした時の処理も遅れてしまうという可能性があります。 なお,ソフトウェアで状態をチェックして待つことをポーリングといいます。  

【割込みを使う場合】

一方,割込みを使う場合,タイマのカウントを開始後,「1秒経過したか?」というチェックはハードウェア,つまりマイコン内の周辺回路(ペリフェラル)が行ってくれます。そして,「1秒経過した」というイベントが発生(タイマ割込みが発生)したら,タイマ割込み処理が起動されます。タイマ割込み処理の中ではLEDを反転するという処理をするだけです。通常の処理では何もすることはありません。

上記のように,割込みを使わない場合は常にペリフェラルの状態をソフトウェアでチェックする必要があるのに対し,割込みを使う場合はペリフェラルの状態をハードウェアでチェックしてくれるという違いがあります。
ペリフェラルの状態をハードウェアでチェックしてくれることにより,
 ・ペリフェラルの状態が変化したその時にすぐ割込みが発生して処理を行うことができる
 ・ソフトウェアによる状態チェックが不要となるので,処理がシンブルになる
 ・通常の処理の中で他に行う処理が増えても,
  ペリフェラルの状態変化に対応する処理を遅延なく行える
というメリットがあります。

また,一般的なマイコンには,割込みが発生すると待機状態を解除する仕組みが組み込まれているので,上記のフローのように通常の処理では何もする必要がない場合,待機状態にしておくことで省電力化を図ることができます。

マイコン設計者がお答えします!技術的問い合わせフォーム