Interupsi adalah
kondisi dimana pada saat program utama dijalankan/dieksekusi oleh CPU, kemudian
tiba-tiba berhenti untuk sementara waktu karena ada rutin laian yang harus
ditangani terlebih dahulu oleh CPU, dan setelah selesai mengerjakan rutin
tersebut CPU kembali mengerjakan instruksi pada program utama. Berikut ini
adalah sumber interupsi pada ATmega8535.
Interupsi Eksternal
Pada ATmega8535 terdapat 3 pin untuk interupsi eksternal, yaitu INT0,
INT1, dan INT2. Interupsi eksternal dapat dibangkitkan
apabila terdapat perubahan logika 1 atau logika 0 pada pin INT0, INT1,
dan INT2. Inisialisasi external interrupt pada ATmega16 dapat
dilakukan dengan melakukan konfigurasi register MCUCR, MCUCSR, GICR, GIFR.
Bit-bit INT0, INT1, dan INT2 pada
register GICR digunakan untuk mengaktifkan masing-masing interupsi eksternal.
Ketika bit-bit tersebut diset 1 (aktif) maka interupsi eksternal akan aktif
jika bit I (interupt) pada SREG (status register) diset 1 juga (enable
interupt), instruksi untuk mengaktifkan global interupt yaitu sei. Program
interupsi dari masing-masing interupsi akan dimulai dari vektor interupsi pada
masing-masing jenis interupsi eksternal.
Untuk interupsi yang dijalankan terlebih dahulu pada ATmega8535 yaitu ditunjukkan oleh tabel 1. Sehingga interupsi eksternal yang dijalankan terlebih dahulu adalah INT0, INT1, dan INT2. Untuk membuktikannya kita lakukan percobaan seperti berikut.
ALAT DAN BAHAN
YANG DIGUNAKAN
- 1 set
Personal Computer/Laptop yang sudah berisi program Code Vision dan Khazama
- 1 buah ISP
Downloader AVR
- 1 buah
sistem minimum AVR
- 1 buah I/O
- 1 buah
kabel printer USB
PROSEDUR
A. Interupt
- Rangkailah peralatan yang diperlukan seperti dalam Gambar 1. Hubungkan soket jumper PORTC pada minimum system dengan soket jumper pada OUTPUT LED. Hubungkan PIN D2, PIN D3, dan PIN B2 ke push button ( INT0, INT1, dan INT2 ).
Gambar 1. Blok diagram antarmuka mikrokontroler dengan I/O
- Buka program Code Vision AVR
- Buatlah project baru. Pada saat mengeset chip, clock, dan External IRQ, set juga bagian PORTC untuk LED. Kemudian simpanlah file tersebut.
Gambar 2. Setting LED dan Interupt
- Perhatikan blok program berikut.
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
// untuk program interupt 0
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
// untuk program interupt 1
}
// External Interrupt 2 service routine
interrupt [EXT_INT2] void ext_int2_isr(void)
{
// Place your code here
// untuk program interupt 2
}
// Port C initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out
Func1=Out Func0=Out
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0
State0=0
PORTC=0x00;
DDRC=0xFF;
// External
Interrupt(s) initialization
// INT0: On
// INT0 Mode:
Falling Edge
// INT1: On
// INT1 Mode:
Falling Edge
// INT2: On
// INT2 Mode:
Falling Edge
GICR|=0xE0;
MCUCR=0x0A;
MCUCSR=0x00;
GIFR=0xE0;
//
Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;
// Analog
Comparator initialization
// Analog
Comparator: Off
// Analog
Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;
// Global enable
interrupts
#asm("sei")
while (1)
{
// Place your code here
// Untuk program utama
};
}
- Tuliskan script berikut dalam program utama:
while (1)
{
// Place your code here
PORTC=0x00;
delay_ms(1000);
PORTC=0x01;
delay_ms(1000);
PORTC=0x03;
delay_ms(1000);
PORTC=0x07;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0x1F;
delay_ms(1000);
PORTC=0x3F;
delay_ms(1000);
PORTC=0x7F;
delay_ms(1000);
PORTC=0xFF;
delay_ms(1000);
};
- Tuliskan script berikut dalam program interupt:
// External Interrupt 0 service routine
interrupt [EXT_INT0] void ext_int0_isr(void)
{
// Place your code here
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
PORTC=0xFF;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
}
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Place your code here
PORTC=0xFF;
delay_ms(1000);
PORTC=0x7F;
delay_ms(1000);
PORTC=0x3F;
delay_ms(1000);
PORTC=0x1F;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0x07;
delay_ms(1000);
PORTC=0x03;
delay_ms(1000);
PORTC=0x01;
delay_ms(1000);
PORTC=0x00;
delay_ms(1000);
}
// External Interrupt 2 service routine
interrupt [EXT_INT2] void ext_int2_isr(void)
{
// Place your code here
PORTC=0xF0;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0xF0;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
PORTC=0xF0;
delay_ms(1000);
PORTC=0x0F;
delay_ms(1000);
}
- Downloadkan program ke mikrokontroler, setelah itu tekan pada push button yang berhubungan dengan PIN D2 (INT0).
- Perhatikan dan catat nyala LED.
- Lakukan hal serupa dengan Interup 1 dan Interupt 2.
- Selanjutnya jalankan interup 0, interupt 1, dan interupt 2 secara bersamaan (antara program utama, program interup 0, program interupt 1, dan program interupt 2 harus berbeda).
- Perhatikan dan catat nyala LED.
UNTUK PERCOBAAN INI SAYA BERI FILE PROTEUS UNTUK SIMULASI!!!!
1 komentar:
terimakasih ,sangat membantu.izin copy
Posting Komentar