Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

interupt

Interrupt
8051 mempunyai 5 buah sumber interupsi. Dua buah interupsi eksternal, dua buah interupsi timer dan sebuah 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.8 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.
Sumber interupsi MCS51

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.
1.4.2 Mengaktifkan Interupsi
Semua sumber permintaan interupsi yang di bahas di atas, masing-masing bisa di-aktip-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.
MSB LSB
EA X X ES ET1 EX1 ET0 EX0




BIT SYMBOL FUNCTION
IE.7 EA Disables all interrupts. If EA=0, no interrupt will be acknowledged. If EA=1, each interrupt source is individually enabled or disabled by setting or clearing its enable bit.
IE.6 - -
IE.5 - -
IE.4 ES Enables or disables the Serial Port interrupt. If ES=0, the Serial Port interrupt is disabled.
IE.3 ET1 Enables or disables the Timer 1 Overflow interrupt. If ET1=0, the Timer 1 interrupt is disabled.
IE.2 EX1 Enables or disables External Interrupt 1. If EX1=0, External interrupt 1 is disabled.
IE.1 ET0 Enables or disables the Timer 0 Overflow interrupt. If ET0=0, the Timer 0 interrupt is disabled.
IE.0 EX0 Enables or disables External interrupt 0. If EX0=0, External interrupt 0 is disabled.
1.4.3 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
Source Vector Address
IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI + TI 0023H
1.4.4 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.
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 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.
Bagan Lengkap Sistem Interupsi MCS51
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.
Gambar 2 menggambarkan sistem interupsi MCS51 selangkapnya, berikut dengan masing-masing bit dalam register-register SFR (Special Function Register) yang dipakai untuk mengatur masing-masing sumber interupsi.
Saklar yang digambarkan dalam Gambar 2 mewakili bit dalam register yang harus diatur untuk mengendalikan sumber interupsi, kotak bergambar bendera kecil merupakan flag (petanda) dalam register yang mencatat adanya permintaan interupsi dari masing-masing sumber interupsi. Kedudukan saklar dalam gambar tersebut menggambarkan kedudukan awal setelah MCS51 di-reset.
Gambar ini sangat membantu saat penulisan program menyangkut interupsi MCS51.
Interrupt Priority Register ( IP )
MSB LSB
X X X PS PT1 PX1 PT0 PX0

Note:
BIT SYMBOL FUNCTION
IP.7 - -
IP.6 - -
IP.5 - -
IP.4 PS Defines the Serial Port interrupt priority level. PS=1 programs it to the higher priority level.
IP.3 PT1 Defines the Timer 1 interrupt priority level. PT1=1 programs it to the higher priority level.
IP.2 PX1 Defines the External Interrupt 1 priority level. PX1=1 programs it to the higher priority level.
IP.1 PT0 Enables or disables the Timer 0 interrupt priority level. PT0=1 programs it to the higher priority level.
IP.0 PX0 Defines the External Interrupt 0 priority level. PX0=1 programs it to the higher priority level.

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 4.1, 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 dilakukan oleh mikrokontroler saat melayani interrupt adalah sebagai
berikut:
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


4.2. Status Interrupt
Status-status interrupt dari 89C51 terletak pada Register TCON yaitu
INT0: Bit IE0, clear oleh hardware saat interrupt terjadi pada mode aktif level
INT1: Bit IE1, clear oleh hardware saat interrupt terjadi pada mode aktif level
Timer 0: Bit TF0, clear oleh hardware saat interrupt terjadi
Timer 1 : Bit TF1, clear oleh hardware saat interrupt terjadi
Serial Port (TXD) : Bit TI, clear oleh software
Serial Port (RXD) : Bit RI, clear oleh software

External Interrupt 0 maupun External Interrupt 1 dapat diatur menjadi aktif level
maupun aktif transisi dengan mengubah bit IT0 atau IT1 pada Register TCON
External Interrupt akan bekerja secara aktif level bila bit ITx (x = 0 untuk INT0 dan x
=1 untuk INT1) berkondisi low dan bekerja secara aktif transisi bila bit ITx
berkondisi high.

4.3. Interrupt Priority
Dalam melayani interrupt, mikrokontroler bekerja berdasarkan prioritas yang
dapat diatur pada Register Interrupt Priority.
IP0 atau PX0 untuk External Interrupt 0
IP1 atau PT0 untuk Timer 0 Interrupt
IP2 atau PX1 untuk External Interrupt 1
IP3 atau PT1 untuk Timer 1 Interrupt
IP4 atau PS untuk Serial Interrupt
Bit-bit ini akan berkondisi set apabila interrupt yang diaturnya ditempatkan
pada prioritas yang tinggi. Interrupt dengan prioritas yang tinggi dapat meng-interrupt
interrupt lain yang mempunyai prioritas lebih rendah, sedangkan interrupt dengan
prioritas tinggi itu sendiri tidak dapat di interrupt oleh interrupt lain.
Apabila terjadi lebih dari satu interrupt yang mempunyai prioritas yang sama
secara bersamaan, maka prioritas akan diatur secara polling mulai dari:
- External Interrupt 0
- Timer 0 Interrupt
- External Interrupt 1
- Timer 1 Interrupt
- Serial Interrupt

4.3. Interrupt Vector
Interrupt Vector adalah harga yang disimpan ke Program Counter pada saat
terjadi interrupt sehingga program akan menuju ke alamat yang ditunjukkan oleh
Program Counter. Pada saat program menuju ke alamat yang ditunjuk oleh Interrupt
Vector maka flag-flag yang set karena terjadinya interrupt akan di-clear kecuali RI
dan TI.
Kelima interrupt dan system reset dari 89C51 mempunyai Vector masing-
masing yang dapat dilihat pada Tabel 4.1
INTERRUPT FLAG ALAMAT VEKTOR
System Reset RST 0000H
External Interrupt 0 I E0 0003H
Timer 0 TF0 000BH
External Interrupt 1 I E1 0013H
Timer 1 TF1 001BH
Serial Port RI atau TI 0023H

Masing-masing alamat vektor mempunyai jarak yang berdekatan sehingga
akan timbul masalah bila diperlukan sebuah Interrupt Service Routine yang cukup
panjang, misalnya hendak digunakan External Interrupt 0 dan Timer 0 dalam satu
sistem, maka bila Interrupt Service Routine untuk External Interrupt 0 diletakkan pada
alamat 0003H dan Interrupt Service Routine untuk Timer 0 diletakkan pada alamat
000BH akan terjadi bentrok alamat antara kedua Interrupt Service Routine ini apabila
tidak dilakukan suatu trik berikut yang terlihat pada listing berikut.
Listing 4.1
ORG 0000H
LJMP Start
ORG 0003H
LJMP Int0
ORG 000BH
LJMP Timer0
......
......
Start:
......
...... ;Main Program
......

Int0:
......
...... ;Int0 ISR
......
RETI

Timer0:
......
...... ;Timer 0 ISR
......
RETI

Jadi pada listing ini, saat terjadi interrupt Program Counter memang tetap
berisi nilai dari Interrupt Vector sehingga program juga meloncat ke alamat tersebut,
namun karena di alamat tersebut sudah diletakkan instruksi untuk meloncat ke label
yang lain seperti Int0 untuk External Interrupt 0 Service Routine maka tidak akan
terjadi bentrok alamat antara kedua Interrupt Service Routine ini.



This post first appeared on Gudangnya Ilmu Pengetahuan, please read the originial post: here

Share the post

interupt

×

Subscribe to Gudangnya Ilmu Pengetahuan

Get updates delivered right to your inbox!

Thank you for your subscription

×