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