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に変化したときに割り込ませる、という設定に変更することができます。やっとデータシートの読み方に慣れてきた。。。