Mikrokontroler 1 Lab Elektronika Industri SISTEM INTERUPSI MIKROKONTROLER ATMEL I. INTERUPSI Interupsi adalah pengubahan urutan pelaksanaan program karena adanya suatu kejadian atau instruksi yang perlu dikerjakan lebih dahulu dan setelah itu kembali lagi ke urutan proses di program utama lagi. Sistem interupsi ini sangat berguna dalam proses kerja mikrokontroler karena bisa melakukan pekerjaan lain sementara itu juga memantau apabila ada kejadian yang perlu mendapat penanganan lebih dahulu. Misalnya, mikrokontroler untuk sementara dihentikan beroperasi untuk menghemat baterai (mode power down) dan baru akan mengerjakan instruksi tertentu apabila terdapat interupsi. Ada pula interupsi diperlukan karena ingin mokrokontroler segera menangani instruksi tertentu dan untuk sementara meninggalkan program utama. Urutan proses pengerjaan instruksi adalah mikrokontroler mengerjakan perintah dari atas ke bawah. Jika suatu saat terdeteksi ada interupsi, maka mikrokontroler akan meninggalkan program utama dan mengerjakan instruksi layanan interupsi. Layanan interupsi dimulai dari suatu vektor interupsi. Jika kemudian dijumpai RETI (return from interupt) maka mikrokontroler selesai menangani layanan interupsi dan kembali lagi ke program utama dimana saat dia meninggalkan tadi. II. SUMBER INTERUPSI AT89C51 menyediakan 5 sumber interupsi: 2 sumber interupsi dari luar (eksternal), INT0 dan INT1 ; 2 dari Timer 0 dan Timer 1 ketika terjadi timer overflow (TF0 dan TF1); dan 1 dari serial port ketika berhasil menerima data serial atau selesai mengirim data serial (RI, receive interupt dan TI, transmit interupt). Sedang untuk AT89C52/55 terdapat satu lagi sumber interupsi yaitu karena adanya Timer 2. Sumber interupsi eksternal berarti mikrontroler bisa diinterupsi dari luar secara hardware yang dimasukkan ke pin P3.2 ( INT0 ) dan pin P3.3 ( INT1 ). Sumber interupsi eksternal misalnya dari sensor (suhu, tekanan, cahaya, suara dll) yang sudah diubah ke digital. Untuk intrupsi eksternal bisa dipilih akan mendeteksi interusi pada kondisi level rendah atau pada saat transisi negatif. Untuk lebih jelasnya lihat gambar di bawah. Untuk memilih deteksi nterupsi eksternal pada level rendah atau transisi negatif dipakai bit IT0 dan IT1 (interupt transition) di register TCON Timer Control Register. Jika ITx = 0 mendeteksi interupsi level rendah dan jika ITx = 1 akan mendeteksi interupsi karena transisi negatif. Iwan B Pratama 9/19/2006 Lab Elektronika Industri Mikrokontroler 2 Ketika terdeteksi adanya sinyal interupsi, flag IEx akan diset 1 dan interupsi kemudian dilayani. Saat layanan interupsi dikerjakan flag IEx kembali direset ke 0. Sumber interupsi berikutnya adalah adanya oveflow di Timer 0 atau Timer 1. Ketika isi cacahan timer melimpah, bit flag TFx akan diset 1 yang memberikan sinyal interupsi. Ketika kemudian layanan interupsi dikerjakan, flag ini akan direset ke 0 lagi. Sumber interupsi lain yaitu dari serial port. Ketika port serial berhasil merima kiriman data secara seri 1 byte maka bit RI (receive interupt) diset 1 yang menyebabkan terjadi interupsi. Ketika port serial berhasil mengirim data 1 byte secara seri, bit TI (transmit interupt) diset 1 sehingga akan menyebabkan interupsi. Baik kedua bit RI dan TI diset atau salah satu dari kedua bit saja yang diset 1, maka interupsi akan terjadi karena kedua bit dihubungkan dengan gerbang OR. Kedua bit yang diset hardware harus di-clear dengan software dahulu sehingga penerimaan data atau pengiriman data berikutnya bisa dilakukan. Khusus untuk AT89C52/55 karena ada Timer 2, maka ada sumber interupsi karena Timer 2 overflow dan/atau karena adanya transisi negatif ke pin EXF2 Iwan B Pratama 9/19/2006 Mikrokontroler 3 Lab Elektronika Industri III. REGISTER PENGATUR INTERUPSI Mode interupsi diatur dengan register IE (interrupt enable) seperti gambar di bawah: IE - Interrupt Enable Register Alamat : 0A8H Reset : 00H Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 EA - ET2 ES ET1 EX1 ET0 EX0 Bit = 1 akan membolehkan terjadi interupsi, jika bit = 0 tidak membolehkan interupsi. Bit Posisi Keterangan EA IE.7 Bit Enable All yang dipakai untuk mengaktifkan/mematikan semua interupsi. Jika EA = 0 semua interupsi akan dimatikan. Jika EA = 1 interupsi diaktifkan/ dimatikan tergantung dari bit-bit di masing-masing sumber interupsi. ET2 IE.5 Bit Enable Timer 2 interrupt untuk mengaktifkan/mematikan interupsi karena Timer overflow. Jika EA = 1 dan ET2 = 1 maka interupsi Timer 2 aktif. ES IE.4 Bit Enable Serial Interrupt untuk mengaktifkan/mematikan interupsi dari serial port. Jika EA = 1 dan ES = 1 maka interupsi serial port aktif. ET1 IE.3 Bit Enable Timer 1 Interrupt untuk mengaktifkan/mematikan itnerupsi karena Timer 1 overflow. Jika EA = 1 dan ET1 = 1 maka interupsi Timer 1 aktif. EX1 IE.2 Bit Enable External 1 Interrupt ( INT1 ) untuk mengaktifkan/mematikan interupsi eksternal ke pin INT1 . Jika EA = 1 dan EX1 = 1 maka interupsi eksternal 1 aktif. ET0 IE.1 Bit Enable Timer 0 Interrupt untuk mengaktifkan/mematikan interupsi karena Timer 0 overflow. Jika EA = 1 dan ET0 = 1 maka interupsi Timer 0 aktif. EX0 IE.2 Bit Enable External 0 Interrupt ( INT0 ) untuk mengaktifkan/mematikan interupsi eksternal ke pin INT0 . Jika EA = 1 dan EX0 = 1 maka interupsi eksternal 1 aktif. Prioritas interupsi dapat diatur dengan register IP seperti gambar di bawah. Prioritas hanya dibedakan dua yaitu prioritas tinggi dan rendah. Untuk mengbah ke prioritas tinggi, bit-bit yang sesuai di register IP harus diset 1. IP - Interrupt Priority Register Alamat : 0B8H Reset : 00H Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0 - - PT2 PS PT1 PX1 PT0 PX0 Bit = 1 akan membolehkan terjadi interupsi, jika bit = 0 tidak membolehkan interupsi. Bit Posisi Keterangan PT2 IP.5 Bit Interrupt Priority Timer 2 untuk membuat interupsi prioritas tinggi. Jika PT2 = 1 prioritas tinggi, jika PT2 = 0 menjadi prioritas rendah. PS IP.4 Bit Interrupt Priority Serial Port untuk membuat interupsi prioritas tinggi. Jika PS = 1 prioritas tinggi, jika PS = 0 menjadi prioritas rendah. PT1 IP.3 Bit Interrupt Priority Timer 1 untuk membuat interupsi prioritas tinggi. Jika PT1 = 1 prioritas tinggi, jika PT1 = 0 menjadi prioritas rendah. PX1 IP.2 Bit Interrupt Priority External 1 ( INT1 ) untuk membuat interupsi prioritas tinggi. Jika PX1 = 1 prioritas tinggi, jika PX1 = 0 menjadi prioritas rendah. PT0 IP.1 Bit Interrupt Priority Timer 0 untuk membuat interupsi prioritas tinggi. Jika PT0 = 1 prioritas tinggi, jika PT0 = 0 menjadi prioritas rendah. PX0 IP.0 Bit Interrupt Priority External 0 ( INT0 ) untuk membuat interupsi prioritas tinggi. Jika PX0 = 1 prioritas tinggi, jika PX0 = 0 menjadi prioritas rendah. Saat reset, isi IP = 0 berarti semua sumber interupsi mempunyai prioritas rendah. Suatu interupsi prioritas rendah ketika sedang melaksanakan layanan interupsi dapat diinterupsi oleh sumber interupsi yang mempunyai prioritas tinggi tetapi tidak sebaliknya. Interupsi dengan prioritas Iwan B Pratama 9/19/2006 Mikrokontroler 4 Lab Elektronika Industri sama tidak bisa saling menginterupsi. Jika pada satu saat terdeteksi dua atau lebih interupsi sedang level interupsinya sama, maka dilakukan polling untuk memilih interupsi mana yang akan dilayani dulu. Urutan polling seperti tabel berikut: Interupsi Keterangan 1 IE0 Interupsi eksternal 0 ( INT0 ) 2 TF0 Timer 0 overflow 3 IE1 Interupsi eksternal 0 ( INT1 ) 4 TF1 Timer 1 overflow 5 RI + TI 6 TF2 + EXF2 Prioritas Level Sama Level tertinggi Serial port Timer 2 dan/atau Interupsi ekstertal 2 Level terrendah Bit-bit di register IE dan IP diatur dengan software dan bisa dialamat bit. IV. PENANGANAN INTERUPSI Jika sumber sumber interupsi mendeteksi adanya sinyal inerupsi maka mikrokontroler akan melaksanan instruksi LCALL (instruksi lompat) ke vektor interupsi yang berangkutan. Instruksi lompat memanggil layanan interupsi LCALL akan dilaksanakan oleh hardware dan hanya dihalangi jika: 1. Ada interupsi yang berlevel sama atau berlevel tinggi juga terjadi. 2. Layanan interupsi yang berlevel sama (dalam polling) atau intrupsi berlevel tinggi sedang dikerjakan dan belum selesai. 3. Melaksanakan instruksi RETI (return from interrupt) atau sedang mengisi register IE atau IP. Jika suatu interupsi terdeteksi tetapi tidak terlayani karena halangan seperti satu dari 3 hal di atas, maka interupsi baru tersebut tidak akan disimpan. Artinya jika halangan interupsi telah tidak ada sedang interupsi baru tidak ada lagi maka interupsi itu akan diabaikan dan dianggap tidak ada interupsi baru. Jika suatu interupsi terdeteksi dan tidak ada halangan, maka mikrokontroler akan memanggil layanan insterupsi yang dimaksud ke suatu alamat vektor intrupsi yang telah ditetapkan sbb: Interupsi Sumber Alamat Vektor Eksternal 0 IE0 0003H Timer 0 TF0 000BH Eksternal 1 IE1 0013H Timer 1 TF1 001BH RI + TI 0023H TF2 + EXF2 002BH RST 0000H Serial Port Timer 2 Reset Sistem Catatan: saat melaksanakan pemanggilan ke alamat vektor bit penyebab interupsi (sumber) akan di-clear ke 0 oleh hardware kecuali bit TI dan RI untuk serial port dan juga bit TF2 dan EXF2 untuk Timer 2 yang harus di-clear dengan software. Layanan interupsi berakhir ketika dalam instruksi interupsi dikerjakan instruksi RETI (return from interupt). Jika ditemukan RETI maka layanan insterupsi selesai dan program kembali ke program dimana tadi ditinggalkan. Instruksi RET (return) juga akan mengembalikan dari eksekusi layanan interupsi ke program utama yang tadi diinterupsi. Tetapi ada perbedaan dengan Iwan B Pratama 9/19/2006 Lab Elektronika Industri Mikrokontroler 5 instruksi RETI, jika hanya dengan instruksi RET maka program akan kembali dari layanan interupsi tetapi sistem masih menganggap bahwa interupsi masing aktif. Ketika sebuah interupsi diterima maka aksi berikut akan terjadi: 1. Operasi/instruksi yang sedang dikerjakan diselesaikan 2. Isi Program Counter (PC) disimpan ke stack 3. Status interupsi yang sekarang disimpan secara internal 4. Sumber interupsi yang sama levelnya diblokir 5. Isi Program Counter (PC) diisi dengan alamat vektor layanan interupsi 6. Layanan interupsi dikerjakan Layanan interupsi akan berhenti jika ditemukan instruksi RETI dan isi program counter (PC) dikembalikan dari stack. Instruksi dari program utama akan dilanjutkan dari mana ketika ditinggalkan. V. INTERUPSI DARI EKSTERNAL Interupsi dari luar yang masuk bisa aktif secara level atau aktif pada transisi negatif dengan cara mengatur bit ITx (interrupt transition) di register TCON. Jika ITx = 0, interupsi eksternal x akan terjadi jika dideteksi adanya logika 0 pada pin INTx. Dan jika ITx = 1, interupsi eksternal x akan terjadi jika dideteksi adanya perubahan logika 1 ke 0 (transisi negatif) pada pin INTx. Jika dideteksi adanya interupsi eksternal maka bit permintaan interupsi IEx di register TCON akan diset 1. Flag IEx = 1 untuk mengeluarkan permintaan interupsi. Karena sumber interupsi eksternal hanya akan dilihat sekali setiap satu siklus mesin (12 clock), maka harus dibuat bahwa interupsi eksternal menahan level 0 paling tidak selama 12 clock untuk menjamin interupsi eksternal telah dilihat. Jika interupsi eksternal aktif pada transisi negatif, maka sumber interupsi internal harus menahan level 1 selama 12 clock dan mengubah ke 0 kemudian menahan selama 12 clock untuk menjamin interupsi transisi negatif telah dilihat. Bit flag IEx akan di-clear ke 0 lagi oleh hardware ketika layanan interupsi dipanggil untuk dikerjakan. Jika interupsi eksternal aktif pada level rendah, sumber eksternal tersebut harus menahan level rendah itu sampai permintaan interupsi dihasilkan yang ditandai dengan bit flag IEx diset 1. Setelah IEx = 1, sumber eksternal tersebut harus dibuat ke 1 lagi (menon-aktifkan interupsi) sebelum pengerjaan layanan interupsi diselesaikan atau sebelum interupsi dari sumber lainnya muncul. Iwan B Pratama 9/19/2006 Lab Elektronika Industri Mikrokontroler 6 VI. WAKTU RESPON (Response Time) Iwan B Pratama 9/19/2006