Interupsi Pada Msc51

7

Click here to load reader

Transcript of Interupsi Pada Msc51

Page 1: Interupsi Pada Msc51

Interupsi pada MCS51

I. Tujuan1. Mahasiswa mampu memahami konsep interupsi pada AT89S512. Mahasiswa mampu membuat program interupsi untuk AT89S51

II. Dasar TeoriMikrokontroler adalah sebuah prosesor yang dipergunakan khusus untuk keperluan

kontrol. Berbeda dengan mikroprosesor, mikrokontroler sendiri sudah memiliki device teretentu yang diperlukan untuk keperluan control. Pada percobaan ini,kita menggunakan Mikrokontroller 8051.

Dibawah ini adalah blok diagram dari mikrokontroller 8051.

Gambar 1. Blok Diagram 8051

Pemprograman mikrokontroller dapat dilakukan dengan menggunakan beberapa bahasa, seperti C51, dan assembly 51 (asm51). Praktikum ini akan menggunakan bahasa pemrograman asm51.

Pengertian dan Proses Interrupt

Seperti namanya, interupsi adalah suatu kejadian yang akan menghentikan sementara jalan program saat itu. Dengan interupsi, suatu alur program dapat dihentikan sementara untuk menjalankan suatu subrutin, dan kemudian melanjutkan aliran program secara normal seperti tidak pernah ada interupsi. Subrutin ini yang disebut dengan interrupt handler, dan hanya dijalankan jika terjadi suatu kejadian khusus (event). Kejadian ini bisa berupa timer yang mengalami overflow, penerimaan karakter melalui port serial, mengirimkan karakter melalui port serial, atau salah satu dari dua kejadian eksternal. Mikrokontroler 89C51 bisa dikonfigurasi untuk menangani interupsi yang disebabkan oleh salah satu dari kejadian.

Dengan interupsi ini, dapat dengan mudah dimonitor kejadian-kejadian yang diinginkan. Tanpa interupsi maka proses monitor ini dilakukan manual dengan pengecekan berulang. Proses pengecekan manual ini akan membuat program menjadi panjang dan lebih rumit.

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 2.

Page 2: Interupsi Pada Msc51

Gambar 2. Bagan proses microprocessor melayani interrupt

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.

Macam-macam interupsi dalam 8051 

Sebenarnya ada 5 interupsi yang bisa kita gunakan pada 8051. Namun beberapa datasheet menyebutkan dengan 6 interupsi. Itu karena datasheet memasukkan reset sebagai interupsi. Adapun ke-enam interupsi ini dialokasikan sebagai berikut.1.    RESET. Saat pin reset diaktifkan, PC menjadi 0000h (Awal program). Semua isi register dihapus menjadi 00h. Semua port menjadi FFh. Sehingga dengan reset ini, CPU benar-benar memulai dari awal. (sebagaimana yang dibahas pada BAB 4)2.    Dua interupt lainnya adalah Timer. Salah satunya adalah Timer-0 dan satunya lagi adalah Timer-1. Lokasi memory pada Interupt Vector Table dari Timer ini masing-masing adalah  000Bh dan 001Bh.3.    Dua Interupt lainnya lagi adalah eksternal hardware interupt. Pin 12 (P3.2) dan pin 13 (P3.3) pada port 3 digunakan sebagai Interupsi Hardware Ekternal masing-masing INT0 dan INT1. Lokasi memory untuk kedua interupsi ini adalah 0003h dan 0013h.4.    Komunikasi serial juga memiliki satu Interupsi yang digunakan oleh kedua mode transfer data, baik itu pengiriman (melibatkan TI) dan penerimaan (melibatkan RI). Lokasi dari ISR interupsi ini adalah 0023h.

 Harap dilihat pada tabel 1 bahwa ada batasan jumlah byte diantara tiap-tiap interupt

vektor Table. Misalnya untuk INT-0, interupt hardware eksternal 0, total hanya memiliki 8-byte mulai dari 0003h – 000Ah. Hal yang sama juga ada pada alamat-alamat yang lain. Bagaimana kalau ternyata besar ISR lebih dari 8-byte. Oleh karena itu buatlah ISR ditempat lain yang aman. Dan berikanlah instruksi "Ajmp" atau LJmp" pada Interupt Vektr Table tersebut, sehingga CPU dapat menunjuk pada ISR yang lokasinya lebih jauh dan aman. 

Dari tabel 1, pada kenyataannya hanya ada 3 byte yang disediakan untuk RESET. Yaitu alamat 0000, 0001 dan 0002. Sedang 0003 sudah menjadi milik INT0. Dengan alasan ini pembuat program selalu menggunakan alamat tersebut untuk diisi instruksi LJMP atau AJMP sebagai instruksi pertama. Sehingga progam dapat melompati Interupt Vector Table. Tapi jika kita memang tidak menggunakan interupsi apapun, tentu saja alamat pada Interupt Vector Table dapat digunakan secara bebas.

Page 3: Interupsi Pada Msc51

Interupsi Lokasi ROM PinReset 0000h 9

External Hardware 0 ( INT 0 ) 0003h 12 ( P3.2 )Timer 0 ( TF0 ) 000Bh

External Hardware 1 ( INT 1 ) 0013h 13 ( P3.3 )Timer 1 (TF1 ) 001Bh

Serial COM ( RI dan TI ) 0023hTabel 1. Interrupt Vektor pada MSC51

Berikut ini adalah program untuk meloncati interrupt vector pada MSC51 :

ORG  0          ;alamat pertama setelah reset

               LJMP MULAI      ;Lompati Interupt Vector Table

;——— Program Utama mulai dari sini

               ORG  30h

MULAI:

               ;isi program utama

               END

Menghidupkan dan mematikan interupt 

Setelah reset, semua interupsi dalam keadaan mati (disabled / masked), yang berarti CPU tidak akan merespon interupsi apapun. Interupsi harus dihidupkan melalui software agar mikrokontroller bisa meresponnya. Ada sebuah register yang dinamakan IE (Interupt Enable) yang bertugas untuk menghidupkan dan mematikan masing-masing interupsi. Gambar 3 menunjukkan register IE ini. Ingat IE adalah register yang juga bisa dialamati Bit.

Dari gambar 3  kita dapat melihat D7 dari register tersebut adalah EA (Enable All). Kita harus men-set bit ini menjadi 1s agar bit-bit yang lain dalam register ini berpengaruh. D6 tidak digunakan, sedang D5 hanya digunakan pada 8052. D4 adalah milik interupt serial, dan demikian seterusnya. Misalnya jika kita hendak mengaktifkan interupsi Timer-0, maka kita harus men-set D1. Interupsi masih belum bisa dikatakan aktif, sebelum kita juga men-set D7. Sebaliknya jika D7 clear atau rendah. Maka semua bit interupsi yang lain dianggap tidak aktif. Lho jadi apa kegunaan Bit EA ini? Ada kalanya kita menginginkan sebuah rutin, dimana rutin tersebut tidak boleh diganggu oleh interupsi apapun, cukup hanya dengan satu instruksi "CLR IE.7" atau "CLR EA". Setelah rutin selesai kita bisa mengembalikan pada keadaan semua, juga hanya dengan satu instruksi "SETB IE.7" atau "SETB EA". Cara tersebut jauh lebih efisien dari pada kita harus memeriksa semua bit interupsi yang aktif.

 

Langkah-langkah menghidupkan Interupsi 

Untuk menghidupkan interupsi kita harus ikuti langkah-langkah ini.1.    Bit D7 dari register IE, yaitu EA harus di-set menjadi 1s. Agar bit-bit yang lain bekerja.2.    Setelah EA = 1, maka setiap bit pada IE yang bersangkutan akan membuat interupsi bekerja. Namun jika EA = 0, tidak akan ada interupsi walaupun bit-bit interupsi yang lain dalam keadaaan tinggi (1s).Untuk mengerti hal ini sebaiknya ada lihat Contoh program 2.

Page 4: Interupsi Pada Msc51

Gambar 3. Register IE ( Interrupt Enable )

Berikut inilah adalah program 2 yang berisi beberapa instruksi untuk mengaktifkan interrupt :

MOV IE,#10010110b  ;hidupkan  Serial, Timer-0, EX1. ;Mengingat IE adalah register yang bisa dialamati bit, maka kita dapat menggunakan intruksiseperti di bawah iniuntuk mengakses setiap bit dari register tersebut.CLR  IE.1          ;matikan Timer-0 (bisa juga dengan "Clr ET0")CLR  IE.7          ;Matikan peralatan interupsi;cara lainnya untuk menulis "MOV IE,#10010110b" adalah bisa dengan menggunakan intstruksi bit seperti..

    SetB IE.7          ;Hidupkan peralatan Interupsi     SetB IE.4          ;Hidupkan interupsi Serial     SetB IE.1          ;Hidupkan interupsi Timer-0     SetB IE.2          ;Hidupkan interupsi EX1

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

Page 5: Interupsi Pada Msc51

Gambar ini sangat membantu saat penulisan program menyangkut interupsi MCS51.

Gambar 4. Register Prioritas Interrupt

Gambar 4 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 4 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.

Referensi

repository.binus.ac.id/.../H046112382.pdfhttp://mikrokontroler.tripod.com/8051/int51.htmhttp://www.musbikhin.com/pemrograman-interupsihttp://www.mytutorialcafe.com/mikrokontroller%20interupsi.htm