Jumat, 13 Maret 2009

INTERUPT


J. INTERUPT

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). 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 dibawah.
Sumber Interupsi
AT89S51 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. Bit IE0/IE1 dalam TCON merupakan petanda (flag) yang menandakan adanya permintaan Interupsi Eksternal. Ada 2 keadaan yang bisa meng-aktif-kan petanda ini, yang pertama karena level tegangan ‘0’ pada kaki INT0/INT1, yang kedua karena terjadi transisi sinyal ‘1’ menjadi ‘0’ pada kaki INT0/INT1. Pilihan bentuk sinyal ini ditentukan lewat bit IT0/IT1 yang terdapat dalam register TCON.
Menjelang prosesor menjalankan ISR dari Interupsi Eksternal, bit IE0/IE1 dikembalikan menjadi ‘0’, menandakan permintaan Interupsi Eksternal sudah dilayani. Namun jika permintaan Interupsi Ekternal terjadi karena level tegangan ‘0’ pada kaki IT0/IT1, dan level tegangan pada kaki tersebut saat itu masih =’0’ maka bit IE0/IE1 akan segera menjadi ‘1’ lagi. Bit TF0/TF1 dalam TCON merupakan petanda (flag) yang menandakan adanya permintaan Interupsi Timer, bit TF0/TF1 menjadi ‘1’ pada saat terjadi limpahan pada pencacah biner Timer 0 atau Timer 1.
Menjelang prosesor menjalankan ISR dari Interupsi Timer, bit TF0/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.

Mengaktipkan 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. Di samping itu ada pula bit EA yang bisa dipakai untuk mengatur semua sumber interupsi sekaligus. Setelah reset, semua bit dalam register IE bernilai ‘0’, artinya sistem interupsi dalam keadaan non-aktif. 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.

Vektor Interupsi
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.

Prioritas Interupsi
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.
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 serial. 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.Tetapi apabila register IP tidak diatur oleh si pemrogram maka urutan prioritasnya adalah yang pertama adalah reset kemudian INT0 kemudian timer 0 lalu INT1 lalu timer 1 dan yang terakhir adalah port serial.
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.

Sistem interupsi MCS51
Berikut adalah bagan lengkap sistem interupsi MCS51
Penghentian interupsi
Layanan interupsi oleh MCS51 dilakukan dengan menjalankan program setara dengan LCALL mulai dari memori-program yang ditunjuk oleh vektor interupsi, sampai MCS51 menjumpai instruksi RETI (Return from Interrupt). Intstruksi RETI memberitahu MCS51 bahwa ISR sudah selesai dikerjakan, kemudian mengambil kembali isi Program Counter yang sebelumnya disimpan ke dalam Stack. Dengan demikian MCS51 akan melanjutkan kembali pekerjaan di program utama yang ditinggal untuk melayani interupsi.
Instruksi RET memang bisa dipakai untuk meninggalkan ISR dan melanjutkan kerja program utama. Tapi RET tidak bisa menghentikan proses interupsi, akibatnya sebelum menjumpai instruksi RETI, MCS51 tidak akan melayani permintaan interupsi yang lain.

Ø Interupt Nol (RESET)
Silahkan Mikrokontrolernya Di RESET …!!!
Ø Program Interupt Eksternal (INT0 & INT1)

Ø Program Interupt Timer (TIMER 0 & TIMER 1)



Ø Program Interupt Serial

Tidak ada komentar:

Posting Komentar