Anda di halaman 1dari 8

7.

Logika Pemrograman
Setelah kita mempelajari perangkat instruksi dari mikrokontroler 8031,
langkah

selanjutnya

adalah

membuat

program secara

sederhana.

Sebelumnya dijelaskan terlebih dulu beberapa instruksi.

7.1. Kelompok Instruksi


7.1.1. Instruksi transfer data
Kelompok instruksi ini digunakan untuk memindahkan data antara :
register - register
memori - memori
register - memori
interface - register
interface - memori
Contoh :
MOV A, R1

: memindahkan isi register R1 ke akumulator.

MOV A, @R2

: memindahkan isi memori yang alamatnya


ditunjukkan oleh register R2 ke akumulator

MOV A, P3

: memindahkan isi port 3 ke akumulator

Dalam MCS 51 tidak dikenal perintah IN dan OUT seperti pada 8088 atau
Z80.

Mikrokontroler MCS51

87

7.1.2. Instruksi Aritmatika


Instruksi aritmatika mencakup penambahan (ADD), pengurangan (SUBB),
perkalian (MUL) dan pembagian (DIV).

Penambahan (ADD) :
Instruksi ini akan menjumlahkan suatu data dengan isi akumulator dan
hasilnya disimpan dalam akumulator.

Penambahan hanya melibatkan

register akumulator. Penambahan ada 2 macam, yaitu tanpa carry (ADD)


dan dengan carry (ADDC).
ADD

: (A) <- (A) + data

ADDC

: (A) <- (A) + (C) + data

Bilangan berukuran 1 byte dapat ditambahkan dengan perintah ADD dan


ADDC.

Pengurangan (SUBB) :
Instruksi ini mengurangkan isi akumulator dengan isi carry flag dan isi
data. Hasilnya akan disimpan dalam akumulator.
SUBB

: (A) <- (A) - (C) - data

Perkalian (MUL) :
Instruksi ini akan mengalikan isi akumulator dengan isi register B
MUL

: (AB) <- (A) * (B)

Byte bawah hasil perkalian disimpan dalam akumulator. Byte atas


disimpan dalam register B.

Pembagian (DIV) :
Mikrokontroler MCS51

88

Instruksi ini akan membagi isi akumulator dengan isi register B


DIV

: (AB) <- (A) / (B)

Akumulator akan berisi hasil bagi, sedangkan register B berisi sisa


pembagian.

Penambahan satu (INC) :


Proses increment merupakan proses penambahan satu pada isi suatu
register atau memori
INC A

: (A) <- (A) + 1

Pemakaian instruksi ini menghemat pemakaian memori karena INC hanya


instruksi 1 byte

Pengurangan satu (INC) :


Proses decrement merupakan proses pengurangan satu pada isi suatu
register atau memori
DEC R0 : (R0) <- (R0) - 1
Pemakaian instruksi ini menghemat pemakaian memori karena DEC hanya
instruksi 1 byte

7.1.3. Instruksi Logika


Logika AND (ANL)
Instruksi ini melakukan proses logika AND antara suatu register dengan
register, register dengan data, carry flag dengan isi suatu alamat bit, dan
lain-lain.

Mikrokontroler MCS51

89

Sebagai contoh, misal akumulator berisi 1011 1011B dan register R0 berisi
0100 1100B. Instruksi ANL A,R0 akan menyebabkan isi akumulator
menjadi :
A

: 1011 1011

R0

: 0100 1100
0000 1000

Akumulator akan berisi 0000 1000B atau 08H

Logika OR (ORL)
Instruksi ini melakukan proses logika OR antara suatu register dengan
register, register dengan data, carry flag dengan isi suatu alamat bit, dan
lain-lain.
Sebagai contoh, misal akumulator berisi 1111 1011B dan register R1 berisi
0010 1110B. Instruksi ORL A,R1 akan menyebabkan isi akumulator
menjadi :
A

: 1111 1011

R1

: 0010 1110
1111 1111

Akumulator akan berisi 1111 1111B atau FFH

Logika NOT (CPL)


Instruksi ini melakukan proses logika NOT antara suatu register carry flag
atau isi suatu alamat bit.
Sebagai contoh, misal akumulator berisi 0101 1100B. Instruksi CPL A
akan menyebabkan isi akumulator menjadi :
A
Mikrokontroler MCS51

: 0101 1100
90

1010 0011
Isi akumulator menjadi 1010 0011B atau A3H

Logika EXOR (XRL)


Instruksi ini melakukan proses logika EXOR antara suatu register dengan
register, register dengan data, carry flag dengan isi suatu alamat bit, dan
lain-lain.
Sebagai contoh, misal akumulator berisi 1011 1111B dan register B berisi
1111 1111B. Instruksi XRL A,B akan menyebabkan isi akumulator
menjadi :
A

: 1011 1111

: 1111 1111
0100 0000

Akumulator akan berisi 0100 0000B atau 40H

Pergeseran ke kiri (RL)


Instruksi ini akan menggeser isi akumulator satu bit ke kiri. Bagian MSB
akan mengisi bagian LSB.
Sebagai contoh, akumulator semual berisi 1011 1011B. Setelah diberi
perintah RL A, akan menyebabkan akumulator menjadi 0111 0111B

Pergeseran ke kanan (RR)


Instruksi ini akan menggeser isi akumulator satu bit ke kanan. Bagian LSB
akan mengisi bagian MSB.
Sebagai contoh, akumulator semual berisi 1110 0101B. Setelah diberi
perintah RR A, akan menyebabkan akumulator menjadi 1111 0010B
Mikrokontroler MCS51

91

Pergeseran ke kiri dengan Carry (RLC)


Instruksi ini akan menggeser isi akumulator satu bit ke kiri. Isi carry flag
akan mengisi bagian LSB, sementara MSB akan mengisi carry flag.

Pergeseran ke kanan dengan carry (RRC)


Instruksi ini akan menggeser isi akumulator satu bit ke kanan. Bagian LSB
akan mengisi carry flag, sementara carry flag akan mengisi MSB.

7.1.4. Instruksi Percabangan


Percabangan dengan syarat
CJNE
Instruksi ini akan membandingkan isi register atau isi memori dengan suatu
data. Bila sama, instruksi selanjutnya yang akan dituju. bila tidak sama,
instruksi yang ditunjuk oleh label yang akan dilaksanakan.
Contoh :
CJNE R0,#02H,Tak_Sama
berarti jika R0 tidak sama dengan 02H maka instruksi akan menuju ke
label Tak_Sama.

DJNZ
Instruksi ini akan mengurangi isi register atau memori dengan satu. Bila
sudah 0, instruksi selanjutnya yang akan dilaksanakan. Bila belum 0,
instruksi dilanjutkan ke label.
Contoh:
DJNZ R1,Ulang
Mikrokontroler MCS51

92

berarti jika R1 tidak sama dengan 0, setelah dikurangi 1, pelaksanaan


instruksi harus melompat ke label Ulang.

JB
Instruksi ini akan menguji suatu alamat bit. Bila isinya 1, instruksi akan
menuju ke label. Bila isinya 0, instruksi selanjutnya yang akan dieksekusi.
Contoh :
JB TF0,Ulang
bila TF0 (Timer 0 overflow flag) = 1, instruksi akan menuju ke label Ulang

JBC
Instruksi ini akan menguji suatu alamat bit. Bila isinya 1, bit tersebut akan
di-clear dan eksekusi menuju ke label. Bila isinya 0, instruksi selanjutnya
yang akan dieksekusi.
Contoh :
JB C, Lanjut
bila carry flag berisi 1, carry flag akan di-clear dan eksekusi menuju label.
Bila carry flag berisi 0, instruksi selanjutnya yang akan dieksekusi.

JC
Instruksi ini akan menguji carry flag. Bila isinya 1, eksekusi menuju ke
label. Bila isinya 0, instruksi selanjutnya yang akan dieksekusi.
JNB
Instruksi ini akan menguji suatu alamat bit. Bila isinya 0, eksekusi akan
menuju ke alamat kode. Bila isinya 1, instruksi selanjutnya yang akan
dieksekusi.
Mikrokontroler MCS51

93

JNC
Instruksi ini akan menguji carry flag. Bila isinya 0, eksekusi menuju ke
alamat kode. Bila isinya 1, instruksi selanjutnya yang akan dieksekusi.

JNZ
Instruksi ini akan menguji akumulator. Bila tidak sama dengan 0, eksekusi
menuju alamat kode. Jika sama dengan 0, instruksi selanjutnya yang akan
dilaksanakan.

JZ
Instruksi ini akan menguji akumulator. Bila nilainya 0, eksekusi menuju
alamat kode. Jika tidak 0, instruksi selanjutnya yang akan dilaksanakan.

Percabangan tanpa syarat


Instruksi percabangan tanpa syarat meliputi SJMP (short jump) dan LJMP
(long jump). Sebagai contoh dalam instruksi
SJMP Start
eksekusi program akan menuju label Start tanpa syarat apa pun.

Mikrokontroler MCS51

94