Sebuah mikrokontroler tidak akan
bekerja bila tidak diberikan program kepadanya. Program tersebut memberitahu
mikrokontroler tentang apa yang harus dia lakukan.
Mikrokontroler MCS-51 memiliki
256 perangkat instruksi. Seluruh instruksi dapat dikelompokkan dalam 4 bagian
yang meliputi instruksi 1 byte sampai 4 byte. Apabila frekuensi clock
mikrokontroler yang digunakan adalah 12 MHz, kecepatan pelaksanaan instruksi akan
bervariasi dari 1 sampai 4 mikrodetik.
Instruksi
yang dimiliki oleh mikrokontroler MCS-51 pada dasarnya digolongkan menjadi;
·
Intruksi operasi aritmatika
·
Operasi logika
·
Transfer data
·
Operasi manipulasi boolean
·
Perintah percabangan
Aturan penulisan bahasa
assembly-nya tidak jauh berbeda dengan bahasa assembly untuk IBM PC. Beberapa
intruksi populer dapat dijelaskan pada bagian di bawah ini.
1.
ADD (Add
Immediate Data)
Operand : A akumulator
: data -256 <= data <= +255
Format : ADD A, #data
Operasi : (A) <- (A) + data
Keterangan : intruksi ini menambah 8 bit data langsung
ke dalam isi akumulator dan menyimpan
hasilnya pada akumulator
2.
AJMP
(Absolute Jump within 2K byte Page)
Operand : Alamat kode
Format : AJMP alamat kode
Operasi : (PC) <- (PC) + 2
(PC) 0 – 10 <- page address
Keterangan : intruksi meletakan bagian bawah 11 bit
dari pencacah program dengan 11 bit alamat yang dikodekan
3.
CALL
(Generic Call)
Operand : Alamat kode
Format : CALL alamat kode
Operasi :
Keterangan : instruksi ini akan ditranslasikan ke
ACALL atau LCALL
4.
CJNE
(Compare Immediate Data to Accumulator) Jump if Not Equal
Operand : A akumulator
: data -256 <= data <= +255
: alamat kode
Format :CJNE A, #data, alamat kode
Operasi : (PC) <- (PC) + 3
: Jika (A) <>
data, maka (PC) <- (PC) + offset relatif
: Jika (A) < data,
maka (C) <- 1,
: lainnya (C) <- 0
Keterangan : intruksi ini akan membandingkan data
langsung dengan isi akumulator. Apabila tidak sama, eksekusi akan menuju alamat
kode. Bila sama, instruksi selanjutnya yang akan dijalankan. Jika data langsung
lebih besar dari isi alamat data tertentu, carry flag akan di-set menjadi 1.
5.
CLR (Clear
Accumulator)
Operand : A akumulator
Format : CLR A
Operasi : (A) <- 0
Keterangan : intruksi ini akan me-reset akumulator
menjadi 00H
Contoh : CLR A
6.
CLR (Clear
Bit)
Operand : alamat bit 0<= alamat bit <= 255
Format : CLR alamat bit
Operasi : Alamat <- 0
Keterangan : intruksi akan me-reset alamat bit
menjadi 00H
Contoh : CLR 40.5
7.
DA
(Decimal Adjust Accumulator)
Operand : A akumulator
Format : DA A
Operasi :
Keterangan :intruksi ini mengatur isi akumulator ke
padanan BCD nya, setelah penambahan dua angka BCD. Jika auxiliary carry flag 1
atau isi nibble bawah (bit 0-3) dari akumulator lebih tinggi dari 9, isi akumulator
akan ditambah 6. Jika carry flag di set sebelum atau sesudah penambahan atau
isi nibble atas (bit 4-7) lebih tinggi dari 9, isi akumulator akan di tambah
60H.
8.
DEC
(Decrement Accumulator)
Operand : A akumulator
Format : DEC A
Operasi : (A) <- (A) - 1
Keterangan : intruksi akan mengurangi isi akumulator
dengan 1. Hasilnya disimpan dalam akumulator.
Contoh : DEC A
9.
DJNZ
(Decrement Register And Jump If Not Zero)
Operand : Rr register
0<=r<=7
: Alamat kode
Format : DJNZ Rr, alamat kode
Operasi : (PC) <- (PC) + 2
: (Rr) <- (Rr) -1
: Jika (Rr) <> 0,
maka (PC) <- (PC) + offset relatif
Keterangan : instruksi ini mengurangi registerr dengan
1 dan menempatkan hasilnya pada register tertentu. Jika hasilnya sudah 0,
instruksi selanjutnya yang akan dieksekusi. Jika belum 0, eksekusi akan menuju
ke alamat kode.
10.
JB (Jump
If Bit is Set)
Operand : Alamat bit 0 <= alamat bit <= 255
: Alamat kode
Format : JB alamat bit, alamat kode
Operasi : (PC) <- (PC) + 3
: Jika (alamat bit) = 1,
maka (PC) <- (PC) + offset relatif
Keterangan : Instruksi ini akan menguji satu alamat
bit. Jika berisi 1, eksekusi akan menuju alamat kode. Jika tidak, instruksi
selanjutnya akan dieksekusi. Pencacah program akan dinaikkan pada instruksi
selanjutnya. Jika pengujian berhasil, offset relatif akan ditambahkan ke
pencacah program yang telah dinaikkan dan instruksi pada alamat ini akan
dieksekusi.
11.
JC (Jump
if Carry is Set)
Operand : Alamat kode
Format : JC alamat kode
Operasi : (PC) <- (PC) + 2
: Jika (PC) = 1, maka
(PC) <- (PC) + offset relatif
Keterangan : instruksi akan menguji isi carry flag.
Jika berisi 1, eksekusi akan menuju alamat kode. Jika berisi 0, instruksi
selanjutnya yang akan di eksekusi.
12.
JNB (Jump
if Bit is Not Set)
Operand : Alamat bit
: Alamat kode
Format :
JNB alamat bit, alamat kode
Operasi : (PC) <- (PC) + 3
: Jika (alamat bit) = 0,
maka (PC) <- (PC) + offset relatif
Keterangan : instruksi ini akan menguji suatu alamat
bit. Jika isinya 0, eksekusi akan menuju ke alamat kode. Jika isinya 1,
instruksi selanjutnya yang akan dieksekusi.
13.
JNC (Jump
if Carry is Not Set)
Operand : Alamat kode
Format : JNC alamat kode
Operasi : (PC) <- (PC) + 2
: Jika (C) = 0, maka
(PC) <- (PC) + offset relatif
Keterangan : instruksi akan menguji isi carry flag.
Jika isinya 0, eksekusi akan menuju ke alamat kode. Jika isinya 1, instruksi
selanjutnya yang akan dieksekusi.
14.
LJMP (Long
Jump)
Operand : Alamat kode 0 <= alamat kode
<= 65535
Format : LJMP alamat kode
Operasi : (PC) <- alamat kode
Keterangan : instruksi ini akan menuju alamat kode
15.
MOV (Move
Immediate Data to Accumulator)
Operand : A akumulator
: Data -256 <= data <= +255
Format : MOV A, #data
Operasi : (A) <- data
Keterangan : intruksi ini memindahkan data 8 bit secara langsung ke akumulator
Contoh : MOV A, #02H
16.
MOV (Move
Register to Accumulator)
Operand : A akumulator
: Rr register 0 <= r <= 7
Format : MOV A, Rr
Operasi : (A) <- (Rr)
Keterangan : instruksi ini memindahkan isi register r
ke akumulator
Contoh : MOV A, R0
17.
NOP (No
Operation)
Operand :
Format : NOP
Operasi : tak ada operasi
Keterangan : instruksi ini tidak melakukan apapun
selam satu siklus
Contoh : NOP
18.
RET (Return
from Subroutine) (Non Interrupt)
Operand :
Format : RET
Operasi : (PC high) <- ((SP))
: (SP) <- (SP) – 1
: (PC low) <- ((SP))
: (SP) <- (SP) - 1
Keterangan : intruksi akan dipakai untuk kembali dari
subroutine ke alamat terakhir saat subroutine dipanggil
19.
RL (Rotate
Accumulator Left)
Operand : A akumulator
Format : RL A
Operasi :
Keterangan : intruksi ini memutar setiap bit dalam
akumulator satu posisi ke kiri. Bit paling besar (MSB) bergerak ke bit paling
kecil (LSB).
Contoh
: RL A
20.
RR (Rotate
accumulator Right)
Operand : A
akumulator
Format : RR A
Operasi :
Keterangan : intruksi ini memutar setiap bit dalam
akumulator satu posisi ke kanan. Bit paling kecil (LSB) bergerak ke bit paling
besar (MSB).
Contoh :
RR A
21.
SJMP (Short
Jump)
Operand :
alamat data
Format :
SJMP alamat kode
Operasi :
(PC) <- (PC) +2
(PC) <- (PC) + offset relatif
Keterangan : intruksi ini akan menyebabkan operasi melompat ke alamat kode
No comments:
Post a Comment