Awazaru's Blog

筆者の覚え書きです。内容は電子工作とかその他いろいろ。

atmega328Pで割り込み制御した

atmega328Pで割り込みで光るLEDを実装してみました。

参考にしたのはこのブログです。
AVR入門(3) ピン入力と割り込み | stastaka's Blog

ソースコードは以下の通り

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>

ISR(INT0_vect){//PD2ピンがhighからlowに変わることで割り込み
    PORTD=0b00000001;//PD0を点灯
    _delay_ms(1000);//1秒持続
    PORTD=0b00000000;//消灯
}

int main(void)
{
    DDRD=0b00000001;//PD0を出力に設定
    EICRA=0b00000010;//INT0がhighからlowに変わると割り込み
    EIMSK=0b00000001;//INT0割り込み許可
    sei();//割り込み許可
    
    while (1) {
    }
    
    return 0;   /* never reached */
}

ポイントはEICRAとEIMSKです。EICRAでどういう時に割り込みを起こすか、を決めてEIMSKでその割り込みを許可する今回はINT0(ソースコードではPD2のピンを示している)がhighからlowに変化すると割り込ませるようにしていますが、

EIMCRA=0b00000011;

と書くことでlowからhighに変化したときに割り込ませる、という設定に変更することができます。やっとデータシートの読み方に慣れてきた。。。