ATMEGAで学習しよう(レッスン2)
「外部割込み」
<目的>
・外部割り込みについて学ぶ。
<動作概要>
・SW1 が押されたらLED1 を点灯させる。(外部割り込み0)
・SW2 が押されたらLED2 を点灯させる。(外部割り込み1)
・SW3 が押されたらLED1 と2 を消灯させる。
<ポイント>
・外部割込みとして、PD2、PD3がピン割当てされている。
・#include <avr/interrupt.h>を追加する。
・ISR(INT0_vect)、ISR(INT1_vect)の( )の中は、マイコンによって異なる場合がある。
<レジスタ説明>
レッスン1 ではSW1、SW2 の入力値をみて処理を分けていましたが、レッスン2 ではSW1 は外部割込み0(INT0)、SW2は外部割り込み1(INT1)を使います。
外部割り込み設定用のレジスタはEICRA とEIMSK です。
EICRA はピンの入力がどう変化したら割込みとみなすか、EIMSK は割込みの有効/無効を設定します。
EICRA はビット1 とビット0 がINT0 用に、ビット3 とビット2 がINT1 用に使われており、それぞれ2 つのビットの組み合わせで、入力値がどう変化したら割り込みとするかを決めます。
例えば、INT0 だとビット1 とビット0 が00 で入力値Low、01 で入力値がHigh→Low またはLow→High の変化、10 でHigh→Low の変化、11 でLow→High の変化でとなります。
EICRA の設定のために、下記のようにプログラム中ではビットに付いた名前を使っています。
EICRA |= ((1<<ISC01)+(1<<ISC11));
EICRA レジスタのビット3 と1 を1 にしています。(それ以外は0 のままです)
つまり、外部割込み1 の部分が10、外部割込み0 の部分が10 ですので、どちらもHigh→Low へ変化したときに割り込みとなります。
外部割込みを有効/無効にするビットを設定します。(1:有効 0:無効)
EIMSK はビット0 がINT0 用に、ビット1 がINT1 用に割当てられており、1 にすることでEICRA で定義した割り込み条件で割り込みがかかるようになります。
逆に言えば、ここが0 だと、EICRA で定義した割り込み条件を満たしても割り込みはかかりません。
EIFR はビット0 がINT0 用に、ビット1 がINT1 用に割当てられており、EICRA(外部割込み制御レジスタA)で設定した割込み発生条件を満たすと、ここに1 がセットされます。そしてEIMSK(外部割込みマスクレジスタ)でINT1 またはINT0 がセットされていれば、割り込みが発生する仕組みです。
このレッスンではEIFR レジスタを意識する必要はありませんが、レッスン8「USART 通信」でこのレジスタビットを操作します。
<プログラム>
この記事が気に入ったらチップで応援してみませんか?