TUJUAN
- Mahasiswa memahami sistem interupsi pada mikrokontroller
- Mahasiswa dapat menerapkan sistem interupsi pada pembuatan jam digital
- Mahasiswa dapat memahami penggunakan bahasa assembly untuk penggunakan sistem interupsi.
Pada mikrokontroller menyediakan 5 buah sumeber interupsi, 2 buah interupsi eksternal, 2 buah interupsi timer, dan 1 buah interupsi serial. Agar interupsi dapat dilayani maka instruksi assembly harus ditempatkan pada alamat vektor berikut, sesuai dengan sumber interupsi yang akan digunakan.
| Source | Vector Address |
|---------|----------------|
| IE0 | 0003H |
| TF0 | 000BH |
| IE1 | 0013H |
| TF1 | 001BH |
| RI + TI | 0023H |
Org 0000h
Ljmp Start
Org 000bh
Ljmp Timer0Interupt
Start: ; Instruksi Rutinitas
; Instruksi Rutinitas
; Instruksi Rutinitas
Sjmp Start; { Looping Forever }
;
Timer0Interupt:
:
:
Reti
End
Pada contoh instruksi pemrograman tersebut tampak, apabila tidak ada interupsi maka program akan menuju ke start dan menjalankan rutinitas-rutinitas secara terus menerus, tetapi apabila suatu interupsi yang dibangkitkan oleh overflow timer 0 terjadi, maka program yang semula bersarang pada rutinitas akan melompat pada alamat vektor 0bh (alamat interupsi timer 0) dan melompat ke subrutine interupsi Timer0Interupt.
Percobaan 11.1. Membangkitkan clock pada jam digital 😃D dengan memanfaatkan interupsi timer 0.
Pada percobaan akan dibangkitkan clock untuk jam digital, hanya bagian detik puluhan (display 1) dan detik satuan (display 2) pada 7 segmen.
Pada mode ini, dengan kristal 12MHz maka timer akan overflow setiap 65.536 udetik. Pada percobaan ini, untuk membangkitkan interupsi setiap 50000 udetik maka data yang harus diisikan pada register TL1 dan TH1 adalah sebagai berikut
65536 - 50000 = 15536 d or 3CB0h
Maka interupsi TF1 akan segera dibangkitkan setiap 50000 x 1 udetik = 0,05 detik
pada pemrograman ini, RO diimplementasikan sebagai counter software, Register R0 akan increment setiap Timer 1 overflow. Jika register R7 telah mendeteksi nilai 50 maka port P0.0 ( LED D0 ) akan nyala selama = 0,05 x 20 detik = 1 detik.
Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
- Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
- Hubungkan modul Microcontroller Trainer dengan power supply +5V
- Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
- Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
- Ketik program berikut ini🙁download file prog111a.asm)
detik equ 30h
detikpuluhan equ 31h
detiksatuan equ 32h
counter20 equ 33h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start:
mov detik,#0
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
inc detik
mov A,detik
cjne A,#60,Update
mov detik,#0
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
Setb P3.6
Setb P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
;
Setb P3.5 ;
clr P3.6
Setb P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
; L O O K U P T A B L E
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End
- Simpanlah program yang anda ketik dan beri nama : prog111a.asm
- Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
- Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
- Lakukan pengamatan untuk data waktu detik yang ditampilkan apakah sesuai dengan jam konvensional.
| Display Detik (:DD) | Jam Konvensional (Detik) |
|---------------------|--------------------------|
| 1 | |
| 2 | |
| 3 | |
| 4 | |
| 5 | |
| : | |
| 60 | |
Percobaan 10.2 Pengiriman data secara serial dari ADC ke Mikrokontroller ke PC
Pada percobaan ini, data ADC0804 diambil menggunakan port 1 mikrokontroller dan dikirimkan melalui port serial ke PC.

Percobaan 10.2 Pengiriman data secara serial dari ADC ke Mikrokontroller ke PC
Lakukan beberapa langkah percobaan sebagai berikut:
- Hubungkan modul Microcontroller Trainer dengan power supply +5V
- Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
- Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
- Ketik program asembly berikut ini: (download file prog102a.asm)
org 0h
call initserial
;
start: call ADC; ambil data dari adc
call Sendout
sjmp start
;
ADC: clr P3.3
nop
setb P3.3
eoc: jb P3.2,eoc
clr P3.4
mov A,P1
setb P3.4
ret
;
Sendout:
detect: jnb ti,detect;
clr ti ;
mov sbuf,a ;
ret
;
initserial:
mov scon,#52h;initialize serial mode 1
mov tmod,#20h;timer1 mode 2
mov th1,#0F3h;Reload value for baud rate 2400
setb tr1
ret
end
- Buka Program Delphi
- Ketik Program Delphi berikut ini, untuk menjalankan komunikasi melalui port serial dengan base address 3F8h. (download file ADCserial)

file ADCserial
var
Form1: TForm1;
data,status:byte;
const
base = $3f8;{base address port serial}
lcr = 3; {line control register}
dll = 0; {divisor lacht low byte}
dlh = 1; {divisor lacht high byte}
lsr = 5; {line status register}
implementation
{$R *.DFM}
Procedure Initserial;
begin
asm
mov dx,base+lcr; {address line control register}
mov al,$80 ; {10000000b = access bit divisor lacht}
out dx,al
;
mov dx,base+dll; {address divisor lacht low byte}
mov al,$30 ; {DLLB = 30h}
out dx,al
;
mov dx,base+dlh; {address divisor lacht high byte}
mov al,$00 ; {DLLH = 00h}
out dx,al
; {Pada saat ini Port serial}
; {memp.baud rate = 2400 bps}
mov dx,base+lcr;{address line control register}
mov al,$03 ; {00000011b =}
out dx,al ; {bit 7=0, access to Rx buffer & Tx
; {bit 6=0, set break disable
; {bit 5-4-3=000, no parity
; {bit 2=0, one stop bit
; {bit 1-0=11,data lenght 8 bit}
end;
end;
Procedure Receive_Data_Serial;
begin
asm
mov dx,base
in al,dx
mov data,al
end
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Repeat
asm
mov dx,base+lsr ; { address line status register }
in al,dx
and al,$01 ; {LSR = 00000001b, detects bit 0}
mov status,al ; {bit 0 = data ready}
end;
until status = $01;{ jika bit 0 = 1 then data ready}
Receive_Data_Serial;
edit1.text:=inttostr(data);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
initserial;
timer1.enabled:=true;
end;
- Simpanlah program yang anda ketik dan beri nama : prog102a.asm
- Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
- Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
- Jalankan program delphi dengan menekan tombol F9 atau RUN
- Lakukan pengamatan untuk data ADC yang ditampilkan.
Percobaan 11.2. Membangkitkan clock pada jam digital MM😃D dengan memanfaatkan interupsi timer 0
Pada percobaan akan dibangkitkan clock untuk jam digital untuk detik dan menit pada 7 segmen. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
- Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
- Hubungkan modul Microcontroller Trainer dengan power supply +5V
- Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
- Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
- Ketik program berikut ini: (download file prog112a.asm)
detik equ 30h
detikpuluhan equ 31h
detiksatuan equ 32h
menit equ 33h
menitpuluhan equ 34h
menitsatuan equ 35h
counter20 equ 36h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start: mov detik,#0
mov menit,#0
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
inc detik
mov A,detik
cjne A,#60,Update
mov detik,#0
satumenit:
inc menit
mov A,#60
cjne A,menit,Update
mov menit,#0
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
setb P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
Setb P3.6
clr P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
; L O O K U P T A B L E
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End
- Simpanlah program yang anda ketik dan beri nama : prog112a.asm
- Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
- Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
- Lakukan pengamatan untuk data waktu yang ditampilkan.
| Display Detik (:DD) | Jam Konvensional (Detik) |
|---------------------|--------------------------|
| 00:01 | |
| 00:02 | |
| 00:03 | |
| 00:04 | |
| 01:59 | |
Percobaan 11.3. Membangkitkan clock down MM😃D dengan memanfaatkan interupsi timer 0
Pada percobaan akan dibangkitkan clock dengan hitungan mundur dari menit 60 detik 60 untuk detik dan menit pada 7 segmen. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
- Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
- Hubungkan modul Microcontroller Trainer dengan power supply +5V
- Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
- Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
- Ketik program berikut ini: (download file prog113a.asm)
detik equ 30h
detikpuluhan equ 31h
detiksatuan equ 32h
menit equ 33h
menitpuluhan equ 34h
menitsatuan equ 35h
counter20 equ 36h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start: mov detik,#60
mov menit,#59
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
dec detik
mov A,detik
cjne A,#0,Update
mov detik,#60
satumenit:
dec menit
mov A,#0
cjne A,menit,Update
mov menit,#60
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
setb P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
Setb P3.6
clr P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
; L O O K U P T A B L E
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End
- Simpanlah program yang anda ketik dan beri nama : prog113a.asm
- Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
- Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
- Lakukan pengamatan untuk data waktu yang ditampilkan.
Percobaan 11.3. Membangkitkan clock down MM😃D dengan memanfaatkan interupsi timer 0
Pada percobaan akan dibangkitkan clock dengan hitungan mundur dari menit 60 detik 60 untuk detik dan menit pada 7 segmen. Untuk melakukan percobaan ini lakukan beberapa langkah sebagai berikut:
- Hubungkan jumper 7Segmen_EN, untuk mengaktifkan Decoder 74LS138
- Hubungkan modul Microcontroller Trainer dengan power supply +5V
- Hubungkan modul Microcontroller Trainer dengan rangkaian programmer
- Buka Program M-IDE Studio for MCS-51, sebagai editor dan compiler program
- Ketik program berikut ini: (download file prog113a.asm)
detik equ 30h
detikpuluhan equ 31h
detiksatuan equ 32h
menit equ 33h
menitpuluhan equ 34h
menitsatuan equ 35h
counter20 equ 36h
;
Org 0h
sjmp Start
Org 0bh
Ljmp Interrupt_Timer0
;
Start: mov detik,#60
mov menit,#59
call InitTimer
;
Forever:
call ClockDisplay
sjmp Forever ;
;
Interrupt_Timer0:
mov tl0,#0b0h
mov th0,#03ch
djnz Counter20, EndInterrupt
mov Counter20,#20
call DoClock
EndInterrupt:
reti
;
DoClock:
dec detik
mov A,detik
cjne A,#0,Update
mov detik,#60
satumenit:
dec menit
mov A,#0
cjne A,menit,Update
mov menit,#60
Update:mov A,detik
mov B,#10
DIV AB
mov detikpuluhan,A
mov detiksatuan,B
;
mov a,menit
mov b,#10
div ab
mov menitpuluhan,A
mov menitsatuan,B
ret
;
ClockDisplay:
Mov DPTR,#Decoder7Segmen
mov A,menitpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,menitsatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
clr P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detikpuluhan
Movc A,@A+DPTR
mov P0,A
clr P3.5 ;
setb P3.6
clr P3.7
call delay
;
Mov DPTR,#Decoder7Segmen
mov A,detiksatuan
Movc A,@A+DPTR
mov P0,A
setb P3.5 ;
Setb P3.6
clr P3.7
call delay
ret
;
InitTimer:
mov TMOD,#00000001b
mov tl0,#0b0h
mov th0,#03ch
setb ET0 ;Enable Timer 0 Interrupt
setb EA ;Master Interrupt Enable
setb TR0 ;Clock start running
ret
;
;===============================
;subroutine delay time
;===============================
delay: mov R1,#2
del1: mov R2,#255
del2: djnz R2,del2
djnz R1,del1
ret
;========================================
; L O O K U P T A B L E
; Decode to Seven Segmen -> g f e d c b a
;========================================
Decoder7Segmen:
DB 11000000b,11111001b,10100100b,10110000b,10011001b
DB 10010010b,10000010b,11111000b,10000000b,10010000b
;
End
- Simpanlah program yang anda ketik dan beri nama : prog113a.asm
- Pada program MIDE tersebut pilih Build /F9 atau untuk melakukan kompilasi program dari *.asm ke *.hex.
- Lakukan pemrograman mikrokontroller dengan menggunakan Program ISP Software ( Lihat Petunjuk Penggunaan)
- Lakukan pengamatan untuk data waktu yang ditampilkan.