Anda di halaman 1dari 7

Berikut ini contoh program dari Interrupt:

'Regitrasi MIkrokontroler
$regfile = "m8535.dat"

'Registrasi Ukuran Kristal


$crystal = 4000000
$baud = 19200
$hwstack = 32
$swstack = 10
$framesize = 40

'Konfigurasi Port I/O yang digunakan


Config Porta = Output

'Deklarasi variabel
Dim A As Byte

'Pilihan jenis interupsi


Enable Int0
Enable Int1

'Konfigurasi Interupsi
'Enable Semua Interrupt
Enable Interrupts

'Pilihan tipe sinyal yang menyebabkan interupsi


Config Int0 = Falling
Config Int1 = Falling

'Jika terjadi interupsi lompat ke ISR (Aksi)


On Int0 Label
On Int1 Label1

'Program Utama
Do
'Program Utama : Menghidupkan led
Porta = 0
Waitms 300
Loop
End

Label:
Porta = 1
For A = 1 To 8
Rotate Porta , Right
Waitms 100
next
Return

Label1:
Porta = 1
For A = 1 To 8
Rotate Porta , Left
Waitms 100
next
Return
Interrupt adalah suatu kejadian atau peristiwa yang menyebabkan mikrokontroler berhenti
sejenak untuk melayani interrupt tersebut. Program yang dijalankan pada saat melayani interrupt
disebut Interrupt Service Routine. Analoginya adalah sebagai berikut, seseorang sedang
mengetik laporan, mendadak telephone berdering dan menginterrupsi orang tersebut sehingga
menghentikan pekerjaan mengetik dan mengangkat telephone. Setelah pembicaraan telephone
yang dalam hal ini adalah merupakan analogi dari Interrupt Service Routine selesai maka orang
tersebut kembali meneruskan pekerjaanya mengetik. Demikian pula pada sistem mikrokontroler
yang sedang menjalankan programnya, saat terjadi interrupt, program akan berhenti sesaat,
melayani interrupt tersebut dengan menjalankan program yang berada pada alamat yang ditunjuk
oleh vektor dari interrupt yang terjadi hingga selesai dan kembali meneruskan program yang
terhenti oleh interrupt tadi. Seperti yang terlihat Gambar dibawah, sebuah program yang
seharusnya berjalan terus lurus, tiba-tiba terjadi interrupt dan harus melayani interrupt tersebut
terlebih dahulu hingga selesai sebelum ia kembali meneruskan pekerjaannya.

Proses yang terjadi saat mikrokontroler melayani interrupt adalah sebagai berikut:

Instruksi terakhir yang sedang dijalankan diselesaikan terlebih dahulu.

Program Counter (alamat dari instruksi yang sedang berjalan) disimpan ke stack.

Interrupt Status disimpan secara internal.


Interrupt dilayani sesuai peringkat dari interrupt (lihat Interrupt Priority).

Program Counter terisi dengan alamat dari vector interrupt (lihat Interrupt Vector) sehingga
mikrokontroler langsung menjalankan program yang terletak pada vector interrupt.

Program pada vector interrupt biasanya diakhiri dengan instruksi RETI di mana pada saat ini
proses yang terjadi pada mikrokontroler adalah sebagai berikut:

Program Counter diisi dengan alamat yang tersimpan dalam stack pada saat interrupt terjadi
sehingga mikrokontroler kembali meneruskan program di lokasi saat interrupt terjadi.

Interrupt Status dikembalikan ke kondisi terakhir sebelum terjadi interrupt.

Enable Interrupt

Dalam suatu kondisi dapat juga dibutuhkan suatu program yang sedang berjalan tidak boleh
diinterrupt, untuk itu 89C51 mempunyai lima buah interrupt yang masing-masing dapat dienable
ataupun disable satu per satu. Pengaturan enable dan disable interrupt dilakukan pada Register
Interrupt Enable yang terletak pada alamat A8H.

EA: Disable semua interrupt apabila bit ini clear. Bila bit ini clear, maka apapun kondisi bit lain
dalam register ini, semua interrupt tidak akan dilayani, oleh karena itu untuk mengaktifkan salah
satu interrupt, bit ini harus set

ES: Enable/disable Serial Port Interrupt, set = enable, clear = disable Apabila Serial Port
Interrupt aktif maka interrupt akan terjadi setiap ada data yang masuk ataupun keluar melalui
serial port yang membuat Flag RI (Receive Interrupt Flag) ataupun TI (Transmit Interrupt Flag).

ET1: Enable/disable Timer 1 Interrupt, set = enable, clear = disable Apabila interrupt ini enable
maka interrupt akan terjadi pada saat Timer 1 overflow.

EX1: Enable/disable External Interrupt 1, set = enable, clear = disable Apabila interrupt ini
enable maka interrupt akan terjadi pada saat terjadi pulsa low pada INT1

ET0: Enable/disable Timer 0 Interrupt, set = enable, clear = disable Apabila interrupt ini enable
maka interrupt akan terjadi pada saat Timer 0 overflow.

EX0: Enable/disable External Interrupt 0, set = enable, clear = disable Apabila interrupt ini
enable maka interrupt akan terjadi pada saat terjadi pulsa low pada INT0.
Interupsi merupakan sebuah kondisi dimana CPU berhenti dari program yang sedang dijalankan untuk
melayani permintaan suatu rutin yang terjadi. Analoginya seperti ini, ketika anda sedang asik belajar,
tiba-tiba telepon anda berbunyi, otomatis anda akan menghentikan belajar anda sejenak untuk
menerima telepon terlebih dahulu. Telepon menginterupsi belajar anda. Untuk ATMega16 ini, memiliki
sumber interupsi sebanyak 21, tiga diantaranya merupakan interupsi eksternal.

Interupsi eksternal 0, berada pada pin 16 (PD2). Interupsi eksternal 1 berada pada pin 17 (PD3) serta
interupsi eksternal 2 pada pin 3 (PB2). Interupsi eksternal 0 dan 1 dapat dipicu oleh 4 kondisi sinyal,
yaitu : low level, falling edge, rising edge, dan setiap perubahan logika (any logical change). Interupsi
eksternal 0 dan 1 dipicu oleh 2 kondisi sinyal : perubahan logika dari low high dan dari high low.

PEMROGRAMAN INTERUPSI EKSTERNAL


Pengaktifan interupsi eksternal dilakukan dengan cara mensetting :

Config INTx = Low Level/Falling/Rising/Change


Kemudian untuk menentukan program yang akan dikerjakan ketika terjadi interupsi, maka perlu
didefinisikan atau dibuat label dengan cara

On interrupt label
Sistem interupsi pada mikrokontroller diaktifkan dengan cara
Enable Interrupts
Untuk mengaktifkan tipe interupsinya :
Enable Int0/Int1
Sedangkan rutin pengerjaan interupsi eksternal
Label :
menurut saya sendiri interups dibagi menjadi 2 macam yaitu interupsi eksternal dan interupsi
internal. Interupsi eksternal meliputi interupsi eksternal 0, 1 dan 2.
Untuk memicu interupsi ekstenal bisa digunakan sebuah push button atau lainya. Setahu saya,
dalam kondisi default interupsi eksternal ini akan aktif jika diberi logika 0, tetapi pemicu atau
penyebab terjadinya interupsi ini dapat diubah dengan cara menyeting register MCUCR ( MCU
Register Control ) untuk lebih jelasnya, tunggu postingan selanjutnya.

Anda mungkin juga menyukai