04
TUGAS MIKROKONTROLLER
Disusun Sebagai Tugas Mata Kuliah Mikrokontroller Kelas TK2B Semester III
Disusun oleh:
Kelas : TK 2B
NIM : 3.33.08.1.04
2009
Page 1
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
1.Buatlah Program agar lampu LED 1 sampai dengan LED 8 menyala terus dan cara kerjanya
pada gambar berikut.
SV
LED 1
LED 2
LED 8
PФ0 s/d PФ 7
Jawab :
Program agar lampu LED 1 sampai dengan LED 8 menyala terus dan cara kerjanya adalah
sebagai berikut.
$MOD51
; program LED
; dimana led 1 sampai led 4 pada port 0.0 sampai port 0.3 akan menyala terus
; dan led 5 sampai led 8 pada port 0.4 sampai port 0.7 akan padam
setb P0.0
setb P0.1
setb P0.2
setb P0.3
clr P0.4
Page 2
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
clr P0.5
clr P0.6
clr P0.7
sjmp $
end
Buatlah Program agar lampu LED 1 sampai dengan LED8 menyala Flip Flop dengan delay
terserah beserta cara kerjanya.
Jawab :
Program agar lampu LED 1 sampai dengan LED8 menyala Flip Flop dengan delay terserah
beserta cara kerjanya adalah sebagai berikut.
$MOD51
START :
NOP ; tunda 12 µS
NOP ; tunda 12 µS
END
Page 3
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
3. Buatlah program jika SW 1, SW2, dan SW3. Dan datakan output lampu LED1, LED2, LED3,
sampai LED8 akan menyala beserta langkah langkahnya
SV SV
LED 1
SW 1
I
I
SW 2 LED 2
I
SW 8
P2.Ф s/d P2.7 LED 8
PФ0 s/d PФ 7
Jawab :
Program jika SW 1, SW2, dan SW3. Dan datakan output lampu LED1, LED2, LED3, akan
menyala beserta langkah langkahnya adalah sebagai berikut.
$MOD51
;SW1, SW2, SW3, sw4, sw4, sw5, sw6,sw7, sw8 pada port P2.0, P2.1, P2.2, P2.3, P2.4, P2.5,
P2.6, P2.7
;LED 1, LED 2, LED 3, LED4. LED5, LED6,LED7,LED8 pada port P0.0, P0.1, P0.2, P0.3,
P0.4, P0.5, P0.6, P0.7
Page 4
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
;LED yang akan menyala sesuai dengan suwitch LED yang ditekan
sjmp start
delay:
mov R7,#5
djnz R6,l2
djnz R7,l1
ret
display1:
clr Led1
ret
display2:
clr Led2
ret
display3:
clr Led3
ret
display4:
clr Led4
ret
Page 6
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
display5:
clr Led5
ret
display6:
clr Led6
ret
display7:
clr Led7
ret
display8:
clr Led8
ret
start:
jnb Sw1,display1
jnb Sw2,display2
jnb Sw3,display3
Page 7
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
jnb Sw4,display4
jnb Sw5,display5
jnb Sw6,display6
jnb Sw7,display7
jnb Sw8,display8
acall delay
clr Led1
clr Led2
clr Led3
clr Led4
clr Led5
clr Led6
clr Led7
clr Led8
sjmp start
end
4. Jelaskan instruksi Jump (Tidak berkondisi atau berkondisi) atau instruksi subroutine.
Jawab :
Sebenarnya Subroutine merupakan penggal progam yang sering digunakan, sehingga bisa
digunakan progam berkali- kali, tanpa harus menulis ulang perintahnya. Proses tersebut mirip
Page 8
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
pada progam basik klasik, dimana masih terdapat line numbernya dan memanggil subrutin
dengan perintah GOSUB.
Pada MCU MCS-51 terdapat dua cara memanggil subroutine yang terdapat pada progam
memori, yaitu:
- ACALL, yang maksimum hanya bisa mengakses hingga 2K (11 address line) saja di
progam memori. Apabila subroutine kurang dari 2K dapat digunakan ACALL yang
lebih cepat karena hanya memiliki total 2 byte (instruksi dan alamat yang dituju),
sedangkan ACALL yang memiliki 3 byte terdiri dari opcode, alamat byte tinggi dan
alamat byte rendah yang dituju.
Acall hitung ; memanggil subroutine hitung yang alamatnya lebih kecil dari 2048
Hitung: ; progam hitung ini harus diletakan pada alamat yang <2048, misalnya 1024 atau ;
0412h
Mov a,#0Aah
Mov b, #0BBh
Add a,b
Kode operasi dari acall dibentuk dengan mengombinasikan opcode + lokasi alamat yang dituju,
dengan format sebagai berikut;
A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0
Page 9
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
A10 A9 A8 1 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0
1 0 0 10001 0 0 0 1 0 0 1 0
Jika digunakan LCALL, maka kodenya untuk pemanggilan subrutin hitung tersebut diatas adalah
: 12h 04h 12h, dimana 12h adalah opcodenya.
Proses ACALL dan LCALL menggunakan memori stack untuk menyimpan data – data
alamat yang ditinggalkan sebelum melaksanakan subrutin, agar bila kembali melaksanakab
subrutin, MCU ingat lokasi kembalinya. Akhir subrutin ada perintah RET(return from
Subroutin). Proses PUSHing sejak meninggalakan progam pertama dan proses POPing setelah
selesai subrutin, pada stack dilakukan otomatis. Jadi bila progam menggunakan subrutin,
didefinisikan dan diperhatikan baik- baik lokasi stack.
Huruf J terdapat pada instruksi jump dalam asembler, berarti jump atau lompat. Subroutine
adalah lompat dan kembali lagi, kalau hanya lompat tak terkondisi, biasanya tidak kembali
ketempat semula, ini dalam perintah basic classic identik dengan perintah GOTO. Dalam system
MCU MCS-51terdapat AJMP yang hanya bisa melompat di dalam program memori maksimum
2K saja, dan LJMP yang dapat melompat ke mana saja hingga 64K di program memori.
Untuk perintah lompat ke lokasi memori 0412h, menggunakan AJMP, kode Instruksinya;
A10 A9 A8 0 0 0 0 1 A7 A6 A5 A4 A3 A2 A1 A0
1 0 0 00001 0 0 0 1 0 0 1 0
Page 10
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
Apabila digunakan LJMP maka kodenya untuk melompat ke 0412h tersebut di atas adalah:
02h,04h,12h, dimana 02h adalah opcodenya.
Instruuksi jump relatif menggunakan perintah SJMP atau shortjump sejauh -128 (mundur) atau
+127 (maju). Jika lokasi tujuan Instruksi jump dijangkauan -128 hingga +127 dari tempat mulai
lompat sebaiknya gunakan perintah SJMP , lebih cepat prosesnya karena hanya menggunakan 2
byte instruksi.
Instruksi JMP @A+DPTR adalah lompat absolut ke lokasi memori yang alamatnya ditunjukkan
pada DPTR+isi A, lompatan ini biasanya digunakan untuk instruksi lompat ke lokasi tertentu
yang ditentukan oleh isi dari A, contoh berikut memberi penjelasan;
JMP @A+DPTR
JMP_TABLE:
AJMP LABEL0
AJMP LABEL1
AJMP LABEL2
AJMP LABEL3
Jika isi a mula-mula =0, maka akan melompat ke LABEL0, jika A=1 akan melompat ke
LABEL1 dan seterusnya.
Instruksi lompat terkondisi adalah lompat ke alamat tertentu bila kondisi terpenuhi. Secara
umum perintahnya adalah: CJNE <dest-byte>,<scr-byte>,rel; artinya Comapre destination byte
dan source byte, Jump is not Equal re(active). Source byte adalah A yang dibandingkan dengan
Page 11
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
destination byte berupa direct memori atau immediate constant. Source dapat juga berupa direct
Rn atau indirect @Rn yang dibandingkan dengan immediate constant.
START
Label1:
__
__
Instruksi DJNZ direct,rel adalah: Decrement Jump If Not Zero, artinya kurangi satu
dahulu data di direct, kemudian bila isinya 0 maka lompatlah ke rel. Biasanya instruksi ini
digunakan untuk pencacah.
START :
LOOP:
Page 12
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04
Inc R1 ; R1=R1+1
Sjmp $ ; usai
Pada memori lokasi 40h ,41h, 42h,43h,dan 44h diisi oleh data Aah,disini R0 digunakan
sebagai pencacah sebanyak 5 kali sedangkan R1 digunakan sabagai pointer memori dengan
alamat awal 40h. Dan MCU melompat ke tempat yang sama, artinya looping di tempat
berdasarkan perintah SJMP$.
Page 13