Anda di halaman 1dari 13

Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.

04

TUGAS MIKROKONTROLLER

Disusun Sebagai Tugas Mata Kuliah Mikrokontroller Kelas TK2B Semester III

Disusun oleh:

Nama : Defi Riyantika

Kelas : TK 2B

NIM : 3.33.08.1.04

PROGRAM STUDI TEKNIK TELEKOMUNIKASI

JURUSAN TEKNIK ELEKTRO

POLITEKNIK NEGERI SEMARANG

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

; LED jenis common anoda, LED aktif low

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

2.Sama dengan gambar soal nomor 1

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 :

MOV P1,#00h ; hidupkan LED1,LED2, LED3, LED4,LED5,


LED6,LED7,LED8

NOP ; tunda 12 µS

NOP ; tunda 12 µS

MOV P1,#0FFh ; matikan LED pada P1

SJMP Start ; kembali ke start

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

;LED jenis common anoda, LED aktif low

;PORT 2 normaly kondisi high

;SW 1 - 3 normaly high

;SW1 to LED 1, SW2 to LED 2, SW3 to LED 3

Page 4
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04

;LED yang akan menyala sesuai dengan suwitch LED yang ditekan

Sw1 bit P2.0

Sw2 bit P2.1

Sw3 bit P2.2

Sw4 bit P2.3

Sw5 bit P2.4

Sw6 bit P2.5

Sw7 bit P2.6

Sw8 bit P2.7

Led1 bit P0.0

Led2 bit P0.1

Led3 bit P0.2

Led4 bit P0.3

Led5 bit P0.4

Led6 bit P0.5

Led7 bit P0.6

Led8 bit P0.7

sjmp start

delay:

mov R7,#5

l1: mov R6,#1


Page 5
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04

l2: mov R5,#2

l3: djnz R5,l3

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.

- LCALL yang dapat mengakses hingga 64 K. 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

Ret ;kembali kesubrutin

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

Dalam contoh diatas, alamatnya 0412h, maka formatnya menjadi:

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

Atau dalam format hexa ; 91h 12h

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.

a. Instruksi lompat tak terkondisi

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

Atau dalam format hexa; 81h,12h

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;

MOV DPTR, #JMP_TABLE

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.

b. Instruksi lompat terkondisi

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

CJNE A,#040h,LABEL1 ; bandingkan A dengan 40h, jika tak

; sama lompat ke LABEL1

CJNE A,P1,LABEL1 ; bandingkan A dengan P1, jika tak

; sama lompat ke LABEL1

CJNE R1,#040h,LABEL1 ; bandingkan R1 dengan 40h, jika tak

; sama lompat ke LABEL1

CJNE @R1,#0CCh,LABEL1 ; bandingkan indirect R1 dengan CCh, jika tak

; sama lompat ke LABEL1

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.

Berikut contoh penggunaan instruksi tersebut;

START :

MOV R0,#5 ; isi R0 dengan 5

MOV R1,#40h ; isi R1 dengan 40h

LOOP:
Page 12
Tugas Mikrokontroller Defi Riyantika TK 2B / 3.33.08.1.04

MOV @R1,#0Aah ; isi memori di <R1> dengan 0Aah

Inc R1 ; R1=R1+1

DJNZ R0, LOOP ; R0=R0-1, jika belum 0 kembali ke LOOP

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

Anda mungkin juga menyukai