Interrupt Pada MCS-51
a.
Mengenal
interrupt
Interrupt membuat banyak hal bisa
dikerjakan dalam satu waktu dan dalam keteraturan. Secara mudah, interrupt
diartikan sebagai mekanisme di mana suatu perangkat keras komputer mengirimkan
sinyal kepada prosesor untuk menghentikan sejenak aktivitasnya, untuk
menanggapi dan menyediakan layanan yang diminta oleh perangkat keras tersebut.
Sebagai analogi misalnya ketika kita menekan suatu tombol di keyboard. Setelah
layanan direspon, maka prosesor akan kembali melakukan aktivitas semula. Contoh
pertama ini disebut sebagai hardware interrupt request (IRQ).
Umumnya, setiap perangkat keras
memiliki angka-angka tersendiri dalam IRQ, dimulai dari 0 sampai dengan 15.
Semakin rendah indeksnya, semakin tinggi prioritasnya untuk ditangani oleh
prosesor. Dengan adanya pengalamatan IRQ ini, maka prosesor jadi tahu, suatu
request/interrupt berasal dari mana dan respon dikirim ke mana. Pengalamatan
(assignment) IRQ dilakukan saat komputer booting.
8051 mempunyai 5 buah sumber
interupsi. 2 buah interupsi eksternal, 2 buah interupsi timer dan 1 interupsi
port serial. Meskipun memerlukan pengertian yang lebih mendalam, pengetahuan
mengenai interupsi sangat membantu mengatasi masalah pemrograman
mikroprosesor/mikrokontroler dalam hal menangani banyak peralatan input/output.
Pengetahuan mengenai interupsi tidak cukup hanya dibahas secara teori saja,
diperlukan contoh program yang konkrit untuk memahami.
Saat kaki RESET pada IC
mikroprosesor/mikrokontroler menerima sinyal reset (pada MCS51 sinyal tersebut
berupa sinyal ‘1’ sesaat, pada prosesor lain umumnya merupakan sinyal ‘0’
sesaat), Program Counter diisi dengan sebuah nilai. Nilai tersebut dinamakan
sebagai vektor reset (reset vector), merupakan nomor awal memori-program yang
menampung program yang harus dijalankan.
Pembahasan di atas memberi gambaran
bahwa proses reset merupakan peristiwa perangkat keras (sinyal reset diumpankan
ke kaki Reset) yang dipakai untuk mengatur kerja dari perangkat lunak, yakni
menentukan aliran program prosesor (mengisi Program Counter dengan vektor
reset).
Program yang dijalankan dengan cara
reset, merupakan program utama bagi prosesor.
Peristiwa perangkat keras yang
dipakai untuk mengatur kerja dari perangkat lunak, tidak hanya terjadi pada
proses reset, tapi terjadi pula dalam proses interupsi.
Dalam proses interupsi, terjadinya
sesuatu pada perangkat keras tertentu dicatat dalam flip-flop khusus, flip-flop
tersebut sering disebut sebagai ‘petanda’ (flag), catatan dalam petanda
tersebut diatur sedemikian rupa sehingga bisa merupakan sinyal permintaan
interupsi pada prosesor. Jika permintaan interupsi ini dilayani prosesor,
Program Counter akan diisi dengan sebuah nilai. Nilai tersebut dinamakan
sebagai vektor interupsi (interrupt vector), yang merupakan nomor awal
memori-program yang menampung program yang dipakai untuk melayani permintaan
interupsi tersebut.
Program yang dijalankan dengan cara
interupsi, dinamakan sebagai program layanan interupsi (ISR - Interrupt Service
Routine). Saat prosesor menjalankan ISR, pekerjaan yang sedang dikerjakan pada
program utama sementara ditinggalkan, selesai menjalankan ISR prosesor kembali
menjalankan program utama, seperti yang digambarkan dalam Gambar 1.
Gambar 1 Bagan kerja prosesor melayani interupsi
Sebuah prosesor bisa mempunyai
beberapa perangkat keras yang merupakan sumber sinyal permintaan interupsi,
masing-masing sumber interupsi dilayani dengan ISR berlainan, dengan demikian
prosesor mempunyai beberapa vektor interupsi untuk memilih ISR mana yang
dipakai melayani permintaan interupsi dari berbagai sumber. Kadang kala sebuah
vektor interupsi dipakai oleh lebih dari satu sumber interupsi yang sejenis,
dalam hal semacam ini ISR bersangkutan harus menentukan sendiri sumber
interupsi mana yang harus dilayani saat itu.
Jika pada saat yang sama terjadi
lebih dari satu permintaan interupsi, prosesor akan melayani permintaan
interupsi tersebut menurut perioritas yang sudah ditentukan, selesai melayani
permintaan interupsi perioritas yang lebih tinggi, prosesor melayani permintaan
interupsi berikutnya, baru setelah itu kembali mengerjakan program utama.
Saat prosesor sedang mengerjakan
ISR, bisa jadi terjadi permintaan interupsi lain, jika permintaan interupsi
yang datang belakangan ini mempunyai perioritas lebih tinggi, ISR yang sedang
dikerjakan ditinggal dulu, prosesor melayani permintaan yang perioritas lebih
tinggi, selesai melayani interupsi perioritas tinggi prosesor meneruskan ISR
semula, baru setelah itu kembali mengerjakan program utama. Hal ini dikatakan
sebagai interupsi bertingkat (nested interrupt), tapi tidak semua prosesor
mempunyai kemampuan melayani interupsi secara ini.
b.
Sumber interupsi
MCS51
Gambar
2 kaki-kaki AT89s51
Seperti terlihat dalam Gambar 2,
AT89C51 mempunyai 6 sumber interupsi, yakni Interupsi External (External
Interrupt) yang berasal dari kaki INT0 dan INT1, Interupsi Timer (Timer
Interrupt) yang berasal dari Timer 0 maupun Timer 1, Interupsi Port Seri
(Serial Port Interrupt) yang berasal dari bagian penerima dan bagian pengirim
Port Seri.
Di samping itu AT89C52 mempunyai 2
sumber interupsi lain, yakni Interupsi Timer 2 bersumber dari Timer 2 yang
memang tidak ada pada AT89C51.
Bit IE0 (atau bit IE1) dalam TCON merupakan petanda
(flag) yang menandakan adanya permintaan Interupsi Eksternal. Ada 2 keadaan
yang bisa meng-aktip-kan petanda ini, yang pertama karena level tegangan ‘0’
pada kaki INT0 (atau INT1), yang kedua karena terjadi transisi sinyal ‘1’
menjadi ‘0’ pada kaki INT0 (atau INT1). Pilihan bentuk sinyal ini ditentukan
lewat bit IT0 (atau bit IT1) yang terdapat dalam register TCON.
1. Kalau bit IT0 (atau IT1) =’0’ maka bit IE0 (atau
IE1) dalam TCON menjadi ‘1’ saat kaki INT0=’0’.
2. Kalau bit IT0 (atau IT1) =’1’ maka bit IE0 (atau
IE1) dalam TCON menjadi ‘1’ saat terjadi transisi sinyal ‘1’ menjadi ‘0’ pada
kaki INT0.
Menjelang prosesor menjalankan ISR
dari Interupsi Eksternal, bit IE0 (atau bit IE1) dikembalikan menjadi ‘0’,
menandakan permintaan Interupsi Eksternal sudah dilayani. Namun jika permintaan
Interupsi Ekternal terjadi karena level tegangan ‘0’ pada kaki IT0 (atau IT1),
dan level tegangan pada kaki tersebut saat itu masih =’0’ maka bit IE0 (atau
bit IE1) akan segera menjadi ‘1’ lagi!
Bit TF0 (atau bit TF1) dalam TCON merupakan petanda
(flag) yang menandakan adanya permintaan Interupsi Timer, bit TF0 (atau bit
TF1) menjadi ‘1’ pada saat terjadi limpahan pada pencacah biner Timer 0 (atau
Timer 1).
Menjelang prosesor menjalankan ISR
dari Interupsi Timer, bit TF0 (atau bit TF1) dikembalikan menjadi ‘0’,
menandakan permintaan Interupsi Timer sudah dilayani.
Interupsi port seri terjadi karena dua hal, yang
pertama terjadi setelah port seri selesai mengirim data 1 byte, permintaan
interupsi semacam ini ditandai dengan petanda (flag) TI=’1’. Yang kedua terjadi
saat port seri telah menerima data 1 byte secara lengkap, permintaan interupsi
semacam ini ditandai dengan petanda (flag) RI=’1’.
Petanda di atas tidak dikembalikan menjadi ‘0’
menjelang prosesor menjalankan ISR dari Interupsi port seri, karena petanda
tersebut masih diperlukan ISR untuk menentukan sumber interupsi berasal dari TI
atau RI. Agar port seri bisa dipakai kembali setelah mengirim atau menerima
data, petanda-petanda tadi harus di-nol-kan lewat program.
Petanda permintaan interupsi (IE0,
TF0, IE1, TF1, RI dan TI) semuanya bisa di-nol-kan atau di-satu-kan lewat
instruksi, pengaruhnya sama persis kalau perubahan itu dilakukan oleh perangkat
keras. Artinya permintaan interupsi bisa diajukan lewat pemrograman, misalnya
permintaan interupsi eksternal IT0 bisa diajukan dengan instruksi SETB IE0.
Dalam keluarga 8051, ada beberapa
kejadian yang dapat membangkitkan interupsi, yaitu:
1. Timer
0 overflow
2. Timer
1 overflow
3. Penerimaan
/ Pengiriman data secara serial
4. Kejadian
eksternal 0
5. Kejadian
eksternal 1
Dengan demikian, perlu dibedakan
interupsi yang terjadi karena kejadian-kejadian yang berbeda. Hal ini bisa
diwujudkan dengan adanya alamat pasti bagi sebuah rutin interupsi untuk
masing-masing interupsi.
c.
Mengaktifkan Interupsi
Semua sumber permintaan interupsi
yang di bahas di atas, masing-masing bisa di-aktif-kan atau di-nonaktip-kan
secara tersendiri lewat bit-bit yang ada dalam register IE (Interrupt Enable
Register).
Bit EX0 dan EX1 untuk mengatur
interupsi eksternal INT0 dan INT1, bit ET0 dan ET1 untuk mengatur interupsi
timer 0 dan timer 1, bit ES untuk mengatur interupsi port seri, seperti yang
digambarkan dalam Gambar 2. Di samping itu ada pula bit EA yang bisa dipakai
untuk mengatur semua sumber interupsi sekali gus.
Setelah reset, semua bit dalam
register IE bernilai ‘0’, artinya sistem interupsi dalam keadaan non-aktip.
Untuk mengaktipkan salah satu sistem interupsi, bit pengatur interupsi
bersangkutan diaktipkan dan juga EA yang mengatur semua sumber interupsi.
Misalnya instruksi yang dipakai untuk mengaktipkan interupsi ekternal INT0
adalah SETB EX0 disusul dengan SETB EA.
d.
Vektor Interupsi
Saat MCS51 menanggapi permintaan
interupsi, Program Counter diisi dengan sebuah nilai yang dinamakan sebagai
vektor interupsi, yang merupakan nomor awal dari memori-program yang menampung
ISR untuk melayani permintaan interupsi tersebut. Vektor interupsi itu dipakai
untuk melaksanakan inststuksi LCALL yang diaktipkan secara perangkat keras.
Vektor interupsi untuk interupsi
eksternal INT0 adalah $0003, untuk interupsi timer 0 adalah $000B, untuk
interupsi ekternal INT1 adalah $0013, untuk interupsi timer 1 adalah $001B dan
untuk interupsi port seri adalah $0023.
Jarak vektor interupsi satu dengan lainnya sebesar 8, atau hanya tersedia 8 byte untuk setiap ISR. Jika sebuah ISR memang hanya pendek saja, tidak lebih dari 8 byte, maka ISR tersebut bisa langsung ditulis pada memori-program yang disediakan untuknya. ISR yang lebih panjang dari 8 byte ditulis ditempat lain, tapi pada memori-program yang ditunjuk oleh vektor interupsi diisikan instruksi JUMP ke arah ISR bersangkutan
e.
Tingkatan Perioritas
Masing-masing sumber interupsi bisa ditempatkan pada
dua tingkatan perioritas yang berbeda. Pengaturan tingkatan perioritas isi
dilakukan dengan bit-bit yang ada dalam register IP (Interrupt Priority).
Bit PX0 dan PX1 untuk mengatur tingkatan perioritas interupsi eksternal INT0 dan INT1, bit PT0 dan PT1 untuk mengatur interupsi timer 0 dan timer 1, bit PS untuk mengatur interupsi port seri, seperti yang digambarkan dalam Gambar 2.
Bit PX0 dan PX1 untuk mengatur tingkatan perioritas interupsi eksternal INT0 dan INT1, bit PT0 dan PT1 untuk mengatur interupsi timer 0 dan timer 1, bit PS untuk mengatur interupsi port seri, seperti yang digambarkan dalam Gambar 2.
Setelah reset, semua bit dalam register IP bernilai
‘0’, artinya semua sumber interupsi ditempatkan pada tingkatan tanpa
perioritas. Masing-masing sumber interupsi bisa ditempatkan pada tingkatan
perioritas utama dengan cara men-‘satu’-kan bit pengaturnya. Misalnya interupsi
timer 0 bisa ditempatkan pada tingkatan perioritas utama dengan instruksi SETB
PT1.
Sebuah ISR untuk interupsi tanpa perioritas bisa
diinterupsi oleh sumber interupsi yang berada dalam tingkatan perioritas utama.
Tapi interupsi yang berada pada tingkatan perioritas yang sama, tidak dapat
saling meng-interupsi.
Jika 2 permintaan interupsi terjadi pada saat yang bersamaan, sedangkan kedua interupsi tersebut terletak pada tingkatan perioritas yang berlainan, maka interupsi yang berada pada tingkatan perioritas utama akan dilayani terlebih dulu, setelah itu baru melayani interupsi pada tingkatan tanpa perioritas.
Jika 2 permintaan interupsi terjadi pada saat yang bersamaan, sedangkan kedua interupsi tersebut terletak pada tingkatan perioritas yang berlainan, maka interupsi yang berada pada tingkatan perioritas utama akan dilayani terlebih dulu, setelah itu baru melayani interupsi pada tingkatan tanpa perioritas.
Jika kedua permintaan tersebut bertempat pada
tingkatan perioritas yang sama, perioritas akan ditentukan dengan urutan
sebagai berikut : interupsi eksternal INT0, interupsi timer 0, interupsi
ekternal INT1, interupsi timer 1 dan terakhir adalah interupsi port seri.
Meskipun sistem interupsi MCS51 termasuk sederhana
dibandingkan dengan sistem interupsi MC68HC11 buatan Motorola, tapi karena
menyangkut 5 sumber interupsi yang masing-masing harus diatur secara
tersendiri, tidak mudah untuk mengingat semua masalah tersebut, terutama pada
saat membuat program sering dirasakan sangat merepotkan membolak-balik buku
untuk mengatur masing-masing sumber interupsi tersebut.
Pemakaian prioritas interupsi di atas memiliki
beberapa peraturan yang tercantum di bawah ini:
1. Tidak
ada interupsi yang meninterupsi interupsi prioritas tinggi.
2. Interupsi
prioritas tinggi boleh menginterupsi interupsi prioritas rendah.
3. Interupsi
prioritas rendah boleh terjadi jika tidak ada interupsi lain yang sedang
dijalankan.
4. Jika
dua interupsi terjadi pada waktu bersamaan, interupsi yang memiliki prioritas
lebih tinggi akan dikerjakan terlebih dahulu. Jika keduanya memiliki prioritas
sama, maka interupsi yang berada pada urutan polling akan dikerjakan terlebih
dahulu.
Mikrokontroler 89C51 secara
otomatis akan menguji apakah sebuah interupsi bisa terjadi setelah setiap
instruksi dikerjakan. Pengecekan ini mengikuti suatu alur yang disebut dengan
Polling Sequence dengan urutan:
a. Interupsi
Eksternal 0
b. Interupsi
Timer 0
c. Interupsi
Eksternal 1
d. Interupsi
Timer 1
e. Interupsi
serial
terimakasih min
BalasHapussolder uap