Subscribe! Follow me! Add me Facebook! Plus me Google!

Monday, April 9, 2012

Membuat Interupsi pada ATMega16 dengan CVAVR

              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
ISC10
ISC10
ISC01
ISC00
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;
}

disini register yang berubah :


// 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;


0 komentar:

Post a Comment

Please correct and comment