Interupsi adalah terjadinya penyelaan terhadap program utama, yang mengharuskan program utama berhenti dulu dan mendahulukan interupsi. Pada dasarnya untuk membuat sebuah interupt pada sebuah aplikasi kita bisa saja menggunakan statemen kondisi semacam if, while do dan kawan2nya.
Jika kita berbicara tentang mikrokontroller, maka interupsi selain dapat memakai statemen kondisi bisa juga menggunakan fitur interrupt yang memang telah disediakan dalam mikrokontrol tersebut. Pada AVR keluarga ATMega misalnya, disediakan 3 interrupt yaitu INT0 – PIND.2, INT1 – PIND.3 dan INT2 pada PINB.3
Masing2 interrupt dikendalikan oleh register GICR dan GIFR yang dapat anda lihat berikut:
| INT1 | INT0 | INT2 | | | | | |
jika INT1 diaktifkan maka nilai GICR berisi 0b10000000 atau 0x80, sementara jika yang aktif adalah INT2 maka nilainya adalah 0x20. Selain register tersebut INT0 dan INT1 memiliki 4 mode yang dikendalikan oleh register MCUCR.
| | | | |ISC11|ISC10| ISC01|ISC00|
ISC00-01 digunakan untuk menandai mode INT0 sementara ISC10-11 digunakan untuk menandai mode INT1.
Mode | ISC – x1 | ISC – x0 |
Low mode | 0 | 0 |
Any Change | 0 | 1 |
Falling edge | 1 | 0 |
Rising edge | 1 | 1 |
Sementara INT2 hanya memiliki mode falling edge dan rising edge karena hanya memiliki 1 bit ISC2 di register MCUSCR.
Rising Edge adalah kondisi dimana program akan menjalankan rutin interupsi ketika pada pin INT – X terjadi perubahan tegangan dari tegangan rendah ke tegangan tinggi, Falling Edge merupakan kebalikan dari rising edge yaitu interupsi aktif ketika terjadi perubahan dari tegangan tinggi ke tegangan rendah, Any Change tidak memperdulikan arah perubahan tegangan, dia akan menjalankan interupsi ketika terjadi perubahan tegangan, sementara Low Mode merupakan kondisi program akan menjalankan interupsi ketika nilai INT-X = 0.
Jika anda menggunakan codevision AVR anda bisa langsung mengeset interrupt mana yang akan anda aktifkan dengan mengklik tab External IRQ (Interrupt ReQuest) pada saat membuat new project, pilih INT yang akan dienable dan mode yang digunakan pada interrupt tersebut, selamat mencoba.
gambar dari sini