Anda di halaman 1dari 3

Membuat Interupsi pada ATMega16 dengan CVAVR

4/09/2012 05:34:00 PM E-rid No comments


Interupsi adalah suatu kondisi dimana mikrokontroller akan berhenti sementara dari
program utama untuk melayani instruksi - instruksi pada interupsi kemudian kembali mengerjakan
instruksi program utama setelah instruksi - instruksi pada interupsi selesai dikerjakan.
Sistem ini jika diibaratkan pada kehidupan nyata yaitu ketika seorang pengajar berhenti
menjelaskan dikarenakan ada salah seorang muridnya mengacungkan tangan untuk pergi keluar
atau mengatakan interupsi dan setelah menyelesaikan interupsi tersebut pengajar tersebut
melanjutkan kembali mengajarnya tetapi bukan mengulang dari awal.
ATMega 16 menyediakan 3 interupsi eksternal, yaitu INT0, INT1 dan INT2. Interupsi
eksternal bisa dilakukan dengan memberikan logika 0 atau perubahan logika (rissing edge dan
falling edge) pada pin interupsi yang bersangkutan

Jenis Interup PIN


INT0 PORTD.2
INT1 PORTD.3
INT2 PORTB.2

Terdapat dua register yang mengatur kondisi dan cara pengaktifan interup, yaitu register MCUCR
dan GICR.

Register GICR
Register GICR untuk menentukan register eksternal yang aktif.

INT1 INT0 INT2 - - - IVSEL IVCE


Bit 7 6 5 4 3 2 1 0

Bit 5 - 7 merepresentasikan bit interupsi eksternal akan aktif jika bit yang bersangkutan diberi logika
1.

Register MCUCR

SM2 SE SM0 ISC11 ISC1 ISC10 ISC01 ISC00


0
Bit 7 6 5 4 3 2 1 0

Register MCUCR adalah register yang mengatur mode, seperti low level, Any change, Falling edge,
Rissing edge.
Berikut cara pembuatan interupt pada Code Vision AVR :

Langkah pertama adalah buka Code vision AVR, kemudian new project kemudian pilih Tab External
IRQ seperti terlihat pada gambar diatas.
Pilih interupt mana yang akan dipakai :

Jenis Interup PIN


INT0 PORTD.2
INT1 PORTD.3
INT2 PORTB.2
Isikan program apa saja untuk melaksanakan interupsi atau memberhentikan sejenak program
utama ketika ada logika 0 atau perubahan logika pada pin interupt.
Disini isi program yang akan dilaksanakan :

#define LED PORTA.0

interrupt [EXT_INT0] void ext_int0_isr(void)


{
LED = 1;
}

disiniregisteryangberubah:

// External Interrupt(s) initialization


// INT0: On
// INT0 Mode: Falling Edge
// INT1: Off
// INT2: Off
GICR|=0x40; //bit yang aktif INT0 01000000 Pada register GICR
MCUCR=0x02; //mode yag dipilih Falling edge
MCUCSR=0x00;
GIFR=0x40;

Anda mungkin juga menyukai