Interrupt adalah ketika mikrokontroler sedang mengerjakan suatu program, pada tegah-tengah mikrokontroler itu mengerjakan program tersebut interrupt aktif sehingga menghentikan aktifitas mikrokontroler dan mengganti dengan perintah lain. interupt sangat berguna misalnya sebagai input sensor atau untuk tombol darurat supaya segera di eksekusi

Kode program:
#include<mega16.h> interrupt [EXT_INT0] void ext_int0_isr(void) { PORTC=0x00; delay_ms(300); } void main(void) { PORTC=0xff; DDRC=0xff; PORTD=0xff; // External Interrupt(s) initialization GICR=0b01000000; MCUCR=0b0000; #asm ("sei") while (1) { // Please write your application code here PORTC=0xf0; delay_ms(300); PORTC=0x0f; delay_ms(300); } }
Penggalan program diatas, program utama adalah LED berkedip pada PORTC. Saat interupt diaktifkan (INT0 -> PORTD.2) seketika itu juga LED pada PORTC mati.
Pembahasan:
External interrupt artinya interrupt ini berasal dari luar. Interrupt dari luar bisa rangkaian elektronika seperti sensor dengan output data digital 0/1 atau hanya sebuah tombol.

ATMega16 mempunyai 3 buah external interrrupt yaitu INT0, INT1 dan INTO2. Untuk menetukan interrupt mana yang mau digunakan, hal yang harus lakukan adalah mengatur GICR (general interrupt control register). Dengan memberi nilai pada GICR sebagai berikut:
GICR=0b01000000;
GICR=0b00100000 -> artinya mengaktifkan INT2
GICR=0b01000000 -> artinya mengaktifkan INT0
GICR=0b10000000 -> artinya mengaktifkan INT1
MCUCR=0b0000;
Selain itu juga ada MCUCR (MCU Control Register) memilih keadaan external interrupt aktif. Jadi Interupt aktif bisa di set berdasarkan berdasar 4 keaadaan. 1) low levelSecara defauld MCUCR akan bernilai 0 atau 0b0000.
MCUCR INT0
MCUCR=0b0000 -> artinya Low level
MCUCR=0b0001 -> artinya Any change
MCUCR=0b0010 -> artinya Faling edge
MCUCR=0b0011 -> artinya Rising edge
#asm (“sei”) artinya mengaktifkan global interrupt.
terakhir membuat sebuah sub program, sub program berisi kode program yang akan dijalankan ketika interrupt aktif. Tuliskan kode program didalam sub program dibawah ini:
interrupt [EXT_INT0] void ext_int0_isr(void) { //tuliskan kode program disini }
disinilah tempat meletakkan perintah/program bila interrupt aktif.