ads ads ads ads ads ads ads ads

Interrupsi pada Mikrokontroler

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.


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


Gambar percobaan pada Proteus:

3 comments:

Anonymous said...

mas, itu program pake software apa? kan banyak software program mikrokontroller

Frengki said...

Itu pakai software Bascom AVR mas,,

Anonymous said...

lumayan nih buat referensi laporan.. tq bro!

Post a Comment

Comment