Anda di halaman 1dari 21

LAPORAN PRAKTIKUM

MIKROKONTROLER
“ INTERRUPT “

DISUSUN OLEH :
Revinda Azzalia Putri Wijaya

DOSEN PENGAMPU :
Teguh Handoyo, Ph.D.

PROGRAM STUDI ELEKTRONIKA INSTRUMENTASI

POLITEKNIK TEKNOLOGI NUKLIR INDONESIA

BADAN RISET DAN INOVASI NASIONAL

YOGYAKARTA

2022
LAPORAN RESMI
PRAKTIKUM MIKROKONTROLER
“ INTERRUPT “

I. TUJUAN
1. Menjelaskan fitur interrupt dalam mikrokontroler ATmega8535/16/32.
2. Mengetahui dan memahami proses memprogram mikrokontroler
ATmega8535/16/32 untuk menjalankan interupsi pada saat program utama
dijalankan
3. Mampu menggunakan model kit mikrokontroler ATmega8535/16/32 serta
program Proteus untuk simulasi skematik rangkaian ATmega8535/16/32

II. DASAR TEORI


Interrupt adalah kondisi di mana pada saat program utama dieksekusi atau
dikerjakan oleh CPU kemudian tiba-tiba berhenti untuk sementara waktu karena ada
rutin interupsi tertentu (Interrupt Service Routine/ISR) lain yang harus ditangani
terlebih dahulu oleh CPU. Setelah selesai mengerjakan rutin ISR tersebut secara
lengkap, maka CPU akan kembali melanjutkan atau mengerjakan instruksi pada
program utama yang sebelumnya ditinggalkan. Port yang berfungsi sebagai interrupt
eksternal pada ATmega8535/16/32 adalah:
PORTD.2 (PD2) → External Interrupt 0 Input (INT0)
PORTD.3 (PD3) → External Interrupt 1 Input (INT1)
PORTB.2 (PB2) → External Interrupt 2 Input (INT2)
Di dalam mikrokontroler ATmega8535/16/32 terdapat 21 interrupt baik eksternal
maupun internal. Interrupt tersebut dapat dilihat dalam Tabel 1 berikut.
Tabel 1. Reset dan Interrupt Vectors

Register-register yang digunakan untuk interrupt eksternal meliputi:


a. GICR (General Interrupt Control Register)

• Fungsinya untuk mengaktifkan dan menonaktifkan interupsi INT0, INT1


dan INT2
• Bit 7 - INT1: eksternal interrupt request 1 enable
• Bit 6 – INT0: eksternal interrupt request 0 enable • Bit 5 – INT2: eksternal
interrupt request 2 enable
• Untuk mengaktifkan INT0, INT1 dan INT2 diset ‘1’ maka interupsi
eksternal aktif, sebaliknya jika diset ‘0’ maka interupsi eksternal non aktif.
• IVSEL (Interrupt Vector Select); Jika diset ‘0’ maka vector interupsi akan
dimulai pada alamat awal Flash Memori. Jika diset ‘1’ maka vector
interupsi akan dimulai pada bootloader dalam flash memory
• IVCE (Interrupt Vector Change Enable); Jika diset ‘0’ maka IVSEL tidak
dapat diubah, begitupun sebaliknya.
b. MCU Control Register MCUCR

• Bit 3,2 – ISC11, ISC10: Interrupt Sense Control 1 Bit 1 dan Bit 0 Tabel 2.
Interrupt 0 Sense Control
Tabel 2. Interrupt 0 Sense Control

• Bit 1,0 – ISC01, ISC00: Interrupt Sense Control 0 Bit 1 dan Bit 0 Table 3.
Interrupt 1 Sense Control
Tabel 3. Interrupt 1 Sense Control

c. MCU Control and Status Register-MCUCSR

• Untuk pengaturan INT2


• ISC2 = 0, a falling edge on INT2 activates the interrupt
• ISC2 = 1, a rising edge on INT2 activates the interrupt
• Bit 3 – WDRF: Watchdog Reset Flag
• Bit 2 – BORF: Brown-out Reset Flag
• Bit 1 – EXTRF: External Reset Flag
• Bit 0 – PORF: Power-on Reset Flag
d. General Interrupt Flag Register-GIFR

• Untuk pengaturan Flag-nya: ada permintaan interupsi atau tidak


• Bit 7 - INT1: eksternal interrupt flag 1 enable
• Bit 6 – INT0: eksternal interrupt flag 0 enable
• Bit 5 – INT2: eksternal interrupt flag 2 enable

e. Status Register-SREG

• SREG berisi informasi tentang hasil yang paling baru instruksi aritmatika
yang dieksekusi. Informasi ini dapat digunakan untuk mengubah aliran
program untuk: melakukan operasi bersyarat. Perhatikan bahwa SREG
diperbarui setelah semua operasi ALU (Arithmetic Logic Unit) berjalan,
sebagaimana ditentukan dalam Referensi Set Instruksi. SREG tidak
disimpan secara otomatis saat memasuki rutin interupsi dan dipulihkan saat
kembali dari interupsi.
• Bit 7 – I: Global Interrupt Enable
Bit 7 – I digunakan untuk mengaktifkan interupsi secara umum (interupsi
global). Jika bit 7 – I bernilai ‘1’ maka interupsi secara umum aktif, tetapi
jika bernilai ‘0’ maka tidak ada satupun interupsi yang aktif. Pengaturan
jenis-jenis interupsi apa saja yang akan aktif dilakukan dengan mengatur
register control yang sesuai dengan jenis interupsi tersebut dengan terlebih
dahulu mengaktifkan interupsi global, yaitu bit ini diset ‘1’.
III. ALAT DAN BAHAN
1. 1 set PC/Laptop yang sudah terinstall software program Code Vision dan Proteus
2. 1 buah catu daya DC +5V
3. 1 buah ISP Downloader AVR
4. 1 buah modul sistem minimum AVR ATmega8535/16/32
5. 1 buah kabel penghubung USB ke downloader

IV. LANGKAH KERJA


4.1 Percobaan Menggunakan 1 Interrupt (IN0)

Gambar 1. Rangkaian Percobaan Hanya Menggunakan INT0

1. Buka program Code Vision AVR


2. Buatlah Project baru.
Pilih menu [File] >> [New] >> klik [Project]
3. Klik Yes ketika terdapat opsi pilihan untuk meggunakan codeWizardAVR.
4. Setelah ditekan pilih tipe chip AVR yang akan diprogram pada kotak dialog
CodeWizardAVR.
5. Pilih dan setting Chip yang akan digunakan ATmega8535 dengan harga
clock 11.059200 Mhz atau pilih clock frequency sesuai dengan kristal yang
digunakan.
6. Setting Ports → PORTC sebagai Output
7. Pada tap External Interrupt centang INT0 Enable lalu pilih Mode Falling
edge.
8. Setting awal selesai, untuk mengenerate program pilih File >> Generate,
Save, and Exit.
9. Buat direktori file dengan nama “Interupsi_INT0_FE”.
10. Save file CV AVR dengan nama “Interupsi_INT0_FE.cwp” pada direktori
Interupsi_INT0.
11. Save file .C dengan nama “Interuspsi_INT0_FE.c” pada direktori
Interupsi_INT0.
12. Save file project dengan nama “Interupsi_INT0_FE.prj” pada direktori
Interupsi_INT0.
13. Setelah disimpan maka akan tampil program secara keseluruhan sehingga
kita selanjutnya mengedit dan menambahkan fungsi atau perintah lain
kedalam program.
14. Tambahkan fungsi library delay dengan menuliskan #include <delay.h>
tepat dibawah #include <mega8535.h>
15. Kemudian tulis sintaks program sub routine interrupt seperti dibawah ini:
// Percobaan ini menggunakan fitur interrupt INT0
PORTC=0b10101010;
delay_ms(1000);
PORTC=0b11111111;
delay_ms(1000);

16. Tambahkan sintaks pada program utama seperti berikut dibawah ini:
while (1)
{
// Main Program untuk percobaan ini PORTC=0b11110000;
}
10. Compile dan Build program dengan mengklik menu [Project]>>[Compile].
Jika ditemukan Error perbaiki program terlebih dahulu sebelum di-Build.
18. Setelah anda compile, uji cobakan/simulasikanlah di Proteus lalu coba pada
modul sistem minimum AVR ATmega8535/16/32.
19. Masukkan program ke chip dengan ISP downloader. Sebelumnya Anda harus
melakukan seting pada programmernya. Pada menu pilih Setting>>
Programmer
20. Pilihlah programmer/downloader sesuai dengan yang Anda gunakan.
Misalkan menggunakan protokol ATMEL STK500/AVRISP dengan baud
rate 115200 bps.
21. Amati nyala LED sebelum dan sesudah anda menekan tombol interupsi.
Catat hasil pengamatan percobaan pada tabel data hasil percobaan.
22. Ulangi langkah 2-21 untuk mode interupsi (Interrupt Sense Control) Rising
Edge, Any Change dan Low Level.
23. Berilah nama file untuk mode interupsi: Rising Edge dengan nama
“Interupsi_INT0_RE”; Any Change dengan nama
“Interupsi_INT0_AC”; Low Level dengan nama “Interupsi_INT0_LL”

4.2 Percobaan Menggunakan 3 Interrupt (INT0;INT1;INT2)

Gambar 2. Rangkaian Percobaan Menggunakan INT0;INT1;INT2

1. Buatlah Project baru.


2. Setting Ports → PORTC sebagai Output
3. Pada tap External Interrupt centang INT0;INT1;INT2 Enable lalu pilih Mode
Falling
4. Save file CV AVR dengan nama “Interupsi_All.cwp” pada direktori
Interupsi_INT0.
5. Save file .C dengan nama “Interuspsi_All.c” pada direktori Interupsi_INT0.
6. Save file project dengan nama “Interupsi_All.prj” pada direktori Interupsi_INT0.
7. Kemudian tulis sintaks program sub routine interrupt seperti dibawah ini:
#include <mega8535.h>
#include <delay.h>
// External Interrupt 0 service routine interrupt [EXT_INT0] void
ext_int0_isr(void)
{
// Place your code here PORTC=0b10101010;
delay_ms(1000); PORTC=0b11111111;
delay_ms(1000);
}
// External Interrupt 1 service routine interrupt [EXT_INT1] void
ext_int1_isr(void)
{
// Place your code here PORTC=0b00000001;
delay_ms(1000); PORTC=0b11111111;
delay_ms(1000);
}

// External Interrupt 2 service routine interrupt [EXT_INT2] void


ext_int2_isr(void)
{
// Place your code here
PORTC=0b10000000;
delay_ms(1000); PORTC=0b11111111;
delay_ms(1000);
}
8. Tambahkan sintaks pada program utama seperti berikut dibawah ini:
while (1)
{
// Main Program untuk percobaan ini PORTC=0b11110000;
}

9. Compile dan Build program dengan mengklik menu [Project]>>[Compile]. Jika


ditemukan Error perbaiki program terlebih dahulu sebelum di-Build.
10. Setelah anda compile, uji cobakan/simulasikanlah di Proteus lalu coba pada modul
sistem minimum AVR ATmega8535/16/32.
11. Masukkan program ke chip dengan ISP downloader.
12. Amati nyala LED sebelum dan sesudah anda menekan tombol interupsi. Catat
hasil pengamatan percobaan pada tabel data hasil percobaan.
V. TUGAS
1. Analisa data hasil pada Tabel Interupsi INT0?
2. Pada percobaan menggunakan ketiga interrupt diaktifkan secara bersamaan,
tuliskan urutan terjadinya interupsi? Kenapa terjadi demikian?
3. Dengan main program yang sama, cobalah menambahkan sub-routine interrupt
dengan menggunakan fitur INT0 dengan mode interupsi Falling Edge. interrupt
[EXT_INT0] void ext_int0_isr(void)
{
// Place your code here PORTC=0b10101010;
delay_ms(1000);
PORTC=0b11111111; delay_ms(1000);
PORTC=0b00001111; delay_ms(1000);
PORTC=0b01010101; delay_ms(1000);
}
4. Buatlah program utama sebagai berikut. Dan sub-routine interrupt dengan
menggunakan fitur INT0 dengan mode interupsi Falling Edge dengan sintaks
program diatas (F.3).
while (1)
{
// Main Program untuk percobaan ini
PORTC=0b11110000; delay_ms(500);
PORTC=0b00001111; delay_ms(500);
}
5. Amati dan lakukan analisa dalam laporan praktikum. Laporan Praktikum ini
dibuat per individu dalam file PDF.
VI. ANALISIS DATA
6.1 Percobaan Menggunakan 1 Interrupt (IN0)
Praktikan mengatur asettingan Chip yang akan digunakan ATmega8535 dengan
harga clock 11.059200 Mhz atau pilih clock frequency sesuai dengan kristal yang
digunakan.

Selanjutnya menyetting Ports → PORTC sebagai Output

Pada tap External Interrupt centang INT0;INT1;INT2 Enable lalu pilih Mode Falling
Edge, Rising Edge, Any Change, Low Level. Disamping itu praktikan harus
menulis sintaks program sub routine interrupt yang nantinya akan dicomplie pada
rangkaian proteus dan dijalankan.
Falling Edge Rising Edge

Any Change Low Level


Program sub routine interrupt :

Tabel 4. Data Interupsi INT0


No Mode Program yang dijalankan (Interrupt / Main Program)
Interupsi Saat tombol belum ditekan Saat tombol setelah ditekan
1. Falling Edge
2. Rising Edge

3. Any Change

4. Low Level
6.2 Percobaan Menggunakan 3 Interrupt (INT0;INT1;INT2)
Pada percobaan dengan menggunakan 3 interrupt, pada sub routin sama saja
seperti pada percobaan pertama, namun pada tap External Interrupt diatur ke
INT0;INT1;INT2 Enable lalu hanya menggunakan satu mode yaitu mode falling.

Tabel 5. Data Interupsi INT0;INT1;INT2

Main INT0

INT1 INT2
5.3 Soal Nomor 3
Dengan main program yang sama, cobalah menambahkan sub-routine interrupt
dengan menggunakan fitur INT0 dengan mode interupsi Falling Edge.

Tabel 6. Data Interupsi Soal Nomor 3

Main INT0
5.4 Soal Nomor 4
Dengan main program yang sama, cobalah menambahkan sub-routine interrupt
dengan menggunakan fitur INT0 dengan mode interupsi Falling Edge.

Tabel 7. Data Interupsi Soal Nomor 4

Main INT0
VII. PEMBAHASAN
Praktikum kali ini berjudul Interrupt memiliki tujuan yaitu dapat menjelaskan
fitur interrupt dalam mikrokontroler ATmega8535/16/32, dapat mengetahui dan
memahami proses memprogram mikrokontroler ATmega8535/16/32 untuk
menjalankan interupsi pada saat program utama dijalankan dan dapat menggunakan
model kit mikrokontroler ATmega8535/16/32 serta program Proteus untuk simulasi
skematik rangkaian ATmega8535/16/32. Pada praktikum ini terdiri dari 2 percobaan
utama, dan 2 percobaan tambahan untuk menjawab perintah tugas. Percobaan tersebut
menggunakan software Proteus untuk merangkai rangkaian elektronis sebagai
simulasinya, dan software CVAVR untuk membuat program yang nantinya dapat
menjalankan rangkaian elektronis tersebut.
Pada percobaan pertama yaitu percobaan menggunakan 1 Interrupt (INT0).
Untuk melakukan perintah eksternal interrupt, terdapat 4 mode yaitu Falling Edge,
Rising Edge, Any Change, dan Low Level. Dimana nanti semua mode tersebut akan
dicoba. Perlu diketahui bahwa 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, dimana akan
menjalankan interupsi ketika terjadi perubahan tegangan, sementara Low Mode
merupakan kondisi program akan menjalankan interupsi ketika nilai INT-X = 0.
Hasil percobaan pertama menggunakan 1 Interrupt, dapat dilihat pada table 4
dimana terlihat bahwa saat mode Falling Edge, dimana push button belum ditekan,
diketahui bahwa program utama yang dijalankan namun saat push button ditekan,
maka program yang dijalankan adalah program yang diinput pada eksternal interrupt
INT0 yang digunakan. Selanjutnya, saat mode Rising Edge, dimana push button
ditekan, maka program yang dijalankan adalah program utama, dan ketika push button
tidak ditekan maka program yang diinput pada eksternal interrupt INT0 yang
dijalankan. Pada mode Any Change, keadaan ketika push button ditekan atau tidak,
hasilnya adalah tetap menggunakan program yang diinput pada eksternal interrupt
INT0, yang nantinya akan kembali ke program utama lagi. Sementara pada mode Low
Level bekerja seperti Falling Edge dimana saat push button belum ditekan, diketahui
bahwa program utama yang dijalankan namun saat push button ditekan, maka program
yang dijalankan adalah program yang diinput pada eksternal interrupt INT0 yang
digunakan, namun perlu diketahui bahwa push button harus ditekan lebih dari 1 kali.
Pada percobaan kedua yaitu menggunakan 3 Interrupt ini praktikan
menggunakan mode Falling Edge dimana cara mode ini bekerja adalah saat push
button belum ditekan, diketahui bahwa program utama yang dijalankan namun saat
push button ditekan, maka program yang dijalankan adalah program yang diinput pada
eksternal interrupt INT0 yang digunakan. Namun karena menggunakan 3 Interrupt
maka output program yang akan keluar berurutan sesuai berurutan INT0; INT1; dan
INT2, dan akan selalu kembali ke program utamanya sebelumnya telah selesai. Hal ini
dapat terjadi karena pengaturan register yang terdapat pada mikrokontroler yang
digunakan.
Pada percobaan ketiga yaitu percobaan untuk tugas nomor 3. Praktikan diminta
menggunakan mode Falling Edge. Dengan hasil yang tertera pada table 6, hanya saja
terdapat penambahan program pada program eksternal interrupt-nya.
Pada percobaan keempat yaitu percobaan untuk tugas nomor 4. Praktikan
diminta menggunakan mode Falling Edge. Dengan hasil yang tertera pada table 7,
hanya saja terdapat pengubahan serta penambahan program pada program utamanya.

VIII. KESIMPULAN
1. Interrupt merupakan kondisi di mana pada saat program utama dieksekusi atau
dikerjakan oleh CPU kemudian tiba-tiba berhenti untuk sementara waktu karena
ada rutin interupsi tertentu (Interrupt Service Routine/ISR) lain yang harus
ditangani terlebih dahulu oleh CPU.
2. Instruksi eksternal interrupt terdiri dari:
a. Rising Edge.
b. Falling Edge
c. Any Change
d. Low Mode
3. Saat program utama dijalankan oleh CPU namun tiba-tiba berhenti untuk beberapa
waktu dikarenakan terdapat program rutin interupsi lain yang harus ditangani
terlebih dahulu oleh CPU, maka akan kembali melanjutkan atau mengerjakan
instruksi pada program utama yang sebelumnya ditinggalkan.
DAFTAR PUSTAKA

Handoyo, Teguh, dkk. 2022. Petunjuk Praktikum Mikrokontroller. Yogyakarta:


Poltek Nuklir-BRIN.

Anda mungkin juga menyukai