Mikrokontroler: Interupsi

advertisement
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
Download