Anda di halaman 1dari 10

8 INTERUPT

8.1 Interupt dan Polling


Interupt , interupsi atau penyelaan adalah suatu proses dimana saat MCU
sedang bekerja pada program utama, kemudian diinterupsi, kemudian mengerjakan
perintah tertentu yang disebut ISR (Interupt Service Routin), setelah selesai
mengerjakan ISR, MCU kembali ke program utama. Proses ini mirip pada sidang,
waktu sidang berjalan kemudian ada interupsi, dan sidang dihentikan untuk
mengerjakan proses interupsi lebih dahulu (menservis interupsi) kemudian kembali ke
sidang utama jika telah selesai.

Jika ditinjau dari program, interupt adalah melaksanakan subrutin, seperti pada
perintah ACALL, LCALL; hanya saja yang menginstruksikan untuk menjalankan
subrutin adalah sinyal interupsi. Sinyal interupsi ditimbulkan dari luar yaitu suatu
perangkat I/O yang memerlukan perhatian atau ingin diservis, atau dari suatu
perangkat yang termasuk didalam MCU katagori I/O. Contoh kasus adalah MCU
sebagai pengendali putaran motor, tiba-tiba motor overload, beban terlalu besar atau
ada kerusakan lain, MCU diinterupsi oleh perangkat sensor dan akan mematikan
sistem dan memberi informasi adanya overload.

Polling adalah suatu proses yang juga dapat digunakan untuk melakukan servis
rutin yang dikehendaki oleh perangkat I/O atau diluar sistem MPU, tetapi dalam hal
ini MCU melakukan polling kepada perangkat tersebut apakah perlu melakukan
servis rutin atau tidak, semacam ditanya satu persatu, apakah ada sesuatu yang diluar
keadaan normal atau perlu servis atau tidak, jika tidak, prosesor akan belanjut
memeriksa perangkat lain dan seterusnya.

Terlihat jelas perbedaan antara interupt dan polling, bahwa interupt yang aktif
adalah perangkat yang ingin diservis, sedangkan polling yang aktif ada pada prosesor.
Interupt memungkinkan MCU melaksanakan program lain, sedangkan polling MCU
harus senantiasa mencek pada waktu-waktu tertentu. Untuk pembuatan program,
sistem polling lebih sederhana dan mudah dimengerti dibandingkan dengan sistem
interupt, tetapi kesemuanya tergantung kebutuhan, kerumitan proses dan kepandaian
pemrogram. Dalam kasus tertentu keduanya dapat digunakan.

8.2 Sistem Interupt pada MCS-51


MCU MCS-51 memiliki 5 buah sumber interupsi, dua buah eksternal (INT0
dan INT1), artinya sinyal interupsi dibangkitkan oleh perangkat luar. Tiga buah
internal yang dibangkitkan oleh Timer 1, 2 serta serial port yang ada dalam chip,
untuk chip seri 52 memiliki tambahan 1 sumber interupsi internal, yaitu TF2 dan
EXF2. Diagram struktur interupt diperlihatkan pada Gb. 8. 1

101
Gb. 8. 1 Struktur interupt pada AT89C

8.2.1 Kendali Interupt


Kendali interupt ditentukan oleh register IEC pada alamat A8h seperti yang
ditabelkan pada Tabel 8. 1, kendali bit ini dapat di set ('1') atau di clearkan ('0')
melalui software, masing-masing bit memiliki fungsi yaitu;

 EA (Enabled Interupt) adalah bit yang menentukan global enable, artinya


bila bit ini di clearkan ('0'), maka seluruh interupt diabaikan oleh MCU
(interupt blocking).
 Individual interupt enables, artinya masing-masing sumber interupsi dapat
diabaikan atau tidak tergantung dari masing-masing bit kendalinya, jika
bit kendali '0', maka interupt dari sumber yang bersangkutan, diabaikan
oleh MCU (blocking), masing-masing adalah; ES untuk serial interupt ,
ET1 untuk Timer 1, EX1 untuk eksternal 1, ET0 untuk timer 0, EX0
untuk eksternal 0.

102
Tabel 8. 1 Interupt Enabled Control Register
IEC Interupt Ena- AF - - AC AB AA A9 A8 A8H
ble Control EA ES ET1 EX1 ET0 EX0

8.2.2 Prioritas Interupt


Sumber interupsi memiliki skala prioritas, saat MCU sedang mengerjakan
servis interupt dapat di interupsi lagi oleh sumber yang memiliki skala prioritas lebih
tinggi atau jika pada saat bersamaan ada dua atau lebih sumber interupsi yang aktif ,
maka skala yang lebih tinggi yang di prioritaskan. Urutan skala prioritas dari yang
paling tinggi seperti yang diperlihatkan pada Gb. 8. 1 adalah; INT0 (eksternal 0),
TF0 (Timer 0), INT1 (eksternal 1), TF1 (Timer 1), R1 atau T1 (Serial port terima atau
kirim). Skala prioritas interupsi dapat dirubah oleh kendali bit pada IPC register,
kondisi semua bernilai '0', maka skala prioritas sesuai dengan urutan tersebut, tetapi
jika ada satu yang bernilai '1', misalnya bit PS bernilai '1', maka interupsi oleh serial
port baik untuk kirim atau terima adalah tertinggi. Jika ada dua atau lebih yang
bernilai '1', maka urutan skala prioritas yang bernilai '1' sesuai dengan urutan skala
prioritas yang telah dijelaskan, sedangkan yang bernilai '0' selalu lebih rendah dari
yang bernilai '1' dengan urutan yang telah dijelaskan.

Tabel 8. 2 Interupt Priority Control Register


IPC Interupt Prio- - - - BC BB BA B9 B8 B8H
rity Control PS PT1 PX1 PT0 PX0

8.2.3 Proses Interupt


Ketika sumber interupt memberikan sinyal permintaan interupt, hal ini akan
merubah status bit interupt flag, status '1' memberikan indikasi adanya permintaan
interupt. Pada setiap siklus mesin, MCU selalu melakukan polling pada interupt flag
ini, apabila terdapat status '1' dan kondisi kendali interupt serta prioritas interupt
memungkinkan servis interupt (tidak ada blocking) , maka proses interupsi
dilaksanakan, secara detail proses tersebut adalah sebagai berikut;

 MCU akan menyelesaikan satu instruksi, karena sebenarnya flag interupt


dideteksi setelah satu instruksi selesai dikerjakan.
 PC disimpan (PUSHed) ke stack memory.
 PC diisi dengan alamat interupt vector yang mana dialamat tersebut berisi
program ISR (interupt Service Routine), artinya MCU akan melompat ke
alamat interupt vector yang sudah fixed dan user membuat program ISR
dilokasi tersebut sesuai dengan kebutuhan.
 Akhir ISR biasanya adalah perintah RETI (Return from Interupt), yang
akan mengembalikan (POPed) stack ke PC, artinya MCU akan kembali ke
program utama sebelum diinterupt.
 Akhir ISR juga bisa bukan RETI, karena memang tidak dikehendaki
kembali ke program utama, MCU halt atau semacam mencabang ke

103
alamat lain, tetapi perlu diperhatikan bahwa adanya interupt, otomatis
stack berubah.

Proses interupsi tidak menyimpan secara otomatis, register A atau PSW, untuk
keperluan penyelamatan data, harus dilakukan perintah tersendiri. Proses multiple
interupt sesuai dengan aturan prioritas dimungkinkan, tetapi perlu memperhatikan
lokasi stack, jangan sampai terlalu dalam, sehingga memory stack tumpang tindih
dengan data user atau sudah melampaui kapasitas internal RAM nya.

Interupt flag ada pada TCON Register (Tabel 8. 3), masing-masing; IE0 untuk
external 0, IE1 untuk external 1, TF0 untuk Timer 0, TF1 untuk Timer 1. Untuk Serial
ada pada SCON Register (Tabel 8. 4), masing-masing T1 untuk Serial kirim, R1
untuk serial terima.
Tabel 8. 3 Timer Control Register
TCON Timer 8F 8E 8D 8C 8B 8A 89 88 88H
Control TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0

Tabel 8. 4 Serial Control Register


SCON Serial 9F 9E 9D 9C 9B 9A 99 98 98H
Control SM0 SM1 SM2 REN TB8 RB8 TI RI

Interupt flag dapat dikendalikan oleh software, oleh sinyal penyebab interupt
atau proses otomatis saat MCU melaksanakan ISR. Bit kendali IT0 dan IT1 pada
TCON dapat digunakan untuk memilih tipe sinyal eksternal yang menyebabkan
interupt, jika status bit tersebut bernilai '1' , maka dipilih tipe negative-edge activated
interupt, artinya sinyal eksternal dari hi ke lo yang menyebabkan interupt flag '1',
selanjutnya MCU akan meng clearkan saat akan melaksanakan ISR. Untuk status bit
'0' , dinamakan low-level activated interupt, selama sinyal eksternal bernilai '0',
dianggap masih ada interupt, artinya interupt flag hanya dapat diclear kan oleh sinyal
itu sendiri pada saat sinyal kembali ke logika '1'. Ini berarti; bila MCU telah selesai
melaksanakan ISR, tetapi sinyal interupt masih '1', MCU akan kembali melaksanakan
ISR lagi, begitu seterusnya.

8.2.4 RESET dan Interupt Vector


Jika MCU pertama kali dihidupkan atau diberikan sinyal hi pada pin RESET,
maka MCU akan menuju ke alamat 0000h, alamat ini dinamakan RESET Vector atau
Power On Vector. Jika terjadi interupt, MCU akan menuju alamat yang disebut
sebagai interupt vector, masing-masing interupt vector sudah tetap di program
memory, seperti yang diperlihatkan pada tabel Tabel 8. 5.

Perhatikan bahwa ruang memori antara 0000h dengan 0003h hanya 3 memori,
ruang antara 0003h dengan 00Bh hanya 8 memori, artinya bahwa lokasi memori
antara interupt vector satu dengan yang lain tidak cukup tempat bagi program-

104
program yang panjang, sehingga program ISR harus ditempatkan di lokasi lain, dan di
interupt vector diberikan perintah lompat (LJMP atau AJMP) ke alamat ISR yang
baru.

Tabel 8. 5 Reset dan Interupt Vector Address


RESET 0000h
Eksternal 0 0003h
Timer 0 000Bh
Eksternal 1 0013h
Timer 1 001Bh
Serial Port 0023h

8.2.5 Program dengan Interupt dan Polling


Diberikan contoh program menggunakan interupt dan polling, dimana pada
Gb. 8. 2 adalah rangkaian pendeteksi pulsa, jumlah pulsa masuk melalui P3.2 atau
INT0 akan dicacah oleh MCU dan ditampilkan pada port P1 dalam format biner.
Program P8.1 adalah listing file, dimana pada awalnya perlu didefinisikan ulang stack
pointer dan pengsisian perintah di lokasi interupt vector. Perhatikan bahwa selain
lokasi 0003h adalah perintah lompat (sjmp, ajmp atau ljmp) ke label init, karena
hanya INT0 yang digunakan, sedangkan lokasi 0003h berisi ISR yang hanya terdiri
dari 2 byte dan 1 byte untuk perintah RETI. Untuk ISR yang panjang, perlu
diletakkan dilokasi lain di program memory, sedangkan di lokasi interupt vector
hanyalah perintah LJMP (lompat) ke lokasi ISR yang baru.
VCC

VCC

U29

VCC 2 12
3 P3.0/RXD P1.0/AIN0 13
6 P3.1/TXD P1.1/AIN1 14
7 P3.2/INTO P1.2 15
8 P3.3/INT1 P1.3 16
RESET 9 P3.4/T0 P1.4 17
11 P3.5/T1 P1.5 18
P3.7 P1.6 19
5 P1.7
4 XTAL1
XTAL2
12 MHZ 1
RST/VPP
20
VCC
VCC
AT89C2051

Gb. 8. 2 Rangkaian Pendeteksi Pulsa

105
1 ;program 8.1, Pencacah pulsa masuk via INT0
2 ;****************************************
3
4 $MOD51
5
0000 6 Pstart equ 0000h ;start program
002F 7 stack equ 02fh ;di internal RAM
8
9 ;================== tabel interupt vectors
0000 10 org Pstart ; power up and reset vector
0000 802E 11 sjmp init
0003 12 org Pstart+03h ; interrupt 0 vector
0003 0590 13 inc P1
0005 32 14 reti
000B 15 org Pstart+0bh ; timer 0 interrupt vector
000B 020030 16 ljmp init
0013 17 org Pstart+13h ; interrupt 1 vector
0013 020030 18 ljmp init
001B 19 org Pstart+1bh ; timer 0 interrupt 1 vector
001B 020030 20 ljmp init
0023 21 org Pstart+23h ; serial port int. vector
0023 020030 22 ljmp init
002B 23 org Pstart+2bh ; 8052 extra interrupt vector
002B 020030 24 ljmp init
25
26 ;=================== main program
0030 27 org Pstart+30h
0030 28 init:
0030 759000 29 mov P1,#0 ;nolkan P1
0033 75812F 30 mov SP,#stack ;inisialisasi stack pointer
0036 D288 31 SETB IT0 ;negative-edge activated int.
0038 D2AF 32 SETB EA ;aktifkan global interupt
33
003A 34 start:
003A 901234 35 MOV DPTR,#1234h ;contoh program utama
003D E0 36 MOVX A,@DPTR
003E F5F0 37 MOV B,a
0040 A3 38 INC DPTR
0041 E0 39 MOVX A,@DPTR
0042 25F0 40 ADD a,b
0044 80F4 41 SJMP start ;looping
42 end
43

Alur program dapat dijelaskan sebagai berikut;

1. Pada saat reset atau pertama MCU diberi catu, lokasi 0000h yang akan dituju
oleh MCU atau PC (Program Counter) dimuati 0000h, di lokasi tersebut terdapat
perintah lompat ke lokasi 0030h.
2. Dilokasi 0030h perintah dilaksanakan diantaranya adalah inisialisasi stack yang
menunjuk alamat 3Fh dan menghidupkan interupt.

106
3. Selanjutnya menuju alamat 003Ahh 0000 80 1
sebagai program utama (dalam hal ini 0001 2E
contoh saja), selama menjalankan
0002
program ini misalnya terjadi interupt
INT0 pada saat sedang mengeksekusi 0003 05
MOVX DPTR,#1234h, maka MCU 0004 90 2
akan menyelesaikan perintah itu lebih 0005 32
dahulu, kemudian melakukan proses
sebagai berikut; 0030 75
 Penunjuk stack dinaikkan 1, menjadi
0031 90
40h 4
 PC low di push ke stack dalam hal 0032 00
ini data 3Dh disimpan di lokasi 40h 5

3
 Penunjuk stack dinaikkan 1, menjadi
41h 003A 90
 PC hi di push ke stack dalam hal ini 003B 12 int
data 00 disimpan ke lokasi 41h,
003C 34
perhatikan bahwa 003D adalah
lokasi kembalinya setelah selesai 003D E0
melaksanakan servis interupt nanti. 003E F5
003F F0
4. PC dimuati 0003h atau program menuju 7
0040 A3
0003h, disini melaksanakan ISR.
0041 E0
5. Perintah RETI adalah mengembalikan ke
0042 25 6
lokasi semula sebelum terjadi interupt
dengan cara; 0043 F0
 POPing isi stack ke PC hi. 0044 80
 Penunjuk stack diturunkan 1, 0045 F4
menjadi 40h
 POPing isi stack ke PC lo,
selengkapnya PC akan dimuati Gb. 8. 3 Sekuen program pencacah
003Dh, dan program kembali pulsa
melanjutkan program utama
 Penunjuk stack diturunkan 1, menjadi 3Fh.

6. Program dilanjutkan hingga lokasi 0045h dan looping kembali kealamat 003Ah
secara terus-menerus, jika ada interupt, prosesnya akan sama seperti yang telah
diuraikan, Jika selama menjalankan interupt di interupt lagi oleh sumber yang
memiliki prioritas lebih tinggi, maka proses multiple interupt ini prosesnya
identik dengan yang telah dijelaskan, hanya memerlukan memory stack yang
lebih banyak.

Program P8.2 adalah pencacah pulsa dengan cara polling, yaitu mendeteksi
adanya perubahan level tegangan pada P3.5, setiap ada tegangan dari tinggi ke rendah
akan mengakibatkan port P1 bertambah satu.

107
;program 8.2, Pencacah pulsa masuk via Polling P3.5
;***************************************************

$MOD51

Pstart equ 0000h ;start


IN_PULSA equ P3.5

;================== interupt vectors


;jika tidak menggunakan interupt
;tabel interupt boleh tidak diisi, asal ada perintah CLR EA

org Pstart ; power up and reset vector


sjmp init

;=================== main program


org Pstart+30h
init:
mov P1,#0 ;nolkan P1
CLR EA ;jika tidak menggunakan interupt sebaiknya
;matikan

start:
JNB IN_PULSA,$ ;menunggu level pulsa hi
JB IN_PULSA,$ ;menunggu level pulsa kembali lo
inc P1 ;naikkan nilai P1
sjmp start

end

Program P8.3 adalah penambahan fasilitas deteksi beban lebih pada kontrol
tandon air. Dua sensor yang memberikan logika ‘0’ bila pompa-pompa mengalami
gangguan dikoneksikan ke port INT0 dan INT1, selanjutnya port P1.5 dikoneksikan
ke ALARM, yang bila berlogika ‘1’ akan berbunyi. Program menggunakan interupt
dan vector interupt INT1 dan INT0 diarahkan ke alamat lain yang berlabel
Pompa_trouble. Pada kasus ini bila terjadi interupt, program akan seakan berhenti
dan menunggu reset untuk mengulang program dari awal.

;program 8.3, kontrol tandon air dengan interupsi


;************************************************

$MOD51

TANDON equ P1.0


BAKPAM equ P1.1
SUMUR equ P1.2
POMPA_SUMUR equ P1.3
POMPA_PAM equ P1.4
ALARM equ P1.5
Pstart equ 0000h ;start
stack equ 02fh ;di internal RAM

108
;================== interupt vectors
org Pstart ; power up and reset vector
ljmp init
org Pstart+03h ; interrupt 0 vector
ljmp pompa_trouble
org Pstart+0bh ; timer 0 interrupt vector
ljmp init ; int yg tidak digunakan arahkan ke label
; init
org Pstart+13h ; interrupt 1 vector
ljmp pompa_trouble
org Pstart+1bh ; timer 0 interrupt 1 vector
ljmp init
org Pstart+23h ; serial port interrupt vector
ljmp init
org Pstart+2bh ; 8052 extra interrupt vector
ljmp init

;=================== main program


org Pstart+30h
init:
clr alarm ;matikan alarm
mov SP,#stack ;inisialisasi stack pointer
SETB IT0 ;negative-edge activated interupt 0
SETB IE0 ;aktifkan eksternal interupt 0
SETB IT1 ;negative-edge activated interupt 1
SETB IE1 ;aktifkan eksternal interupt 1
SETB EA ;aktifkan global interupt

start:
JB TANDON,MATIKANPOMPA ;jika Tandon isi matikan kedua pompa
JB BAKPAM,POMPAPAM_ON ;jika tandon kosong dan bak pam isi
;hidupkan pompa bak PAM
JB SUMUR,POMPASUMUR_ON ;jika tandon kosong, bak pam kosong
;dan sumur isi, hidupkan pompa sumur
AJMP MATIKANPOMPA ;jika tandon kosong, bak PAM kosong
;dan sumur kosong, matikan kedua
;pompa

POMPASUMUR_ON:
SETB POMPA_SUMUR
AJMP Start

POMPAPAM_ON:
SETB POMPA_PAM
AJMP Start

MATIKANPOMPA:
;matikan semua pompa
CLR POMPA_SUMUR
CLR POMPA_PAM
AJMP Start

109
;interupt service routine (ISR)
org 0200h
Pompa_trouble: ;matikan semua pompa & program seakan berhenti
clr Pompa_sumur
clr Pompa_pam
setb alarm ;hidupkan alarm
sjmp $ ;looping disini

end

110

Anda mungkin juga menyukai