Daftar Set Instruksi 8051 dan Contoh Program Kelompok Instruksi (addressing mode)

Bahasa pemrograman assembly untuk mikrokontroler berasitektur 8051 memiliki 8 jenis mode pengalamatan.
a. Register addressing
Adalah pengalamatan yang melibatkan register.
Contoh : `MOV A,R1  ; isi register R1 dikopi ke akumulator
b. Direct addressing
Adalah pengalamatan dengan menuliskan langsung nomor alamat memory (biasanya dalam format heksadesimal).
Contoh : MOV A, 90H  ; isi alamat 90H dikopi ke akumulator
c. Indirect addressing
Adalah pengalamatan dengan cara menaruh alamat yang dimaksud ke suatu register dalam hal ini khususnya register R0 dan R1.
Contoh : MOV A, @R1  ; isi memory yang alamatnya ditunjukan oleh
; isi register R1 dikopi ke akumulator
d. Immediate addressing
Adalah pengalamatan dengan cara langsung menuliskan data yang diinginkan .
Contoh : MOV A, #12  ; data angka 12 dimasukkan ke akumulator
e. Relative addressing
Adalah pengalamatan secara relatife terhadap alamat yang ada di program counter.
Contoh : SJMP DEKAT
f. Absolute addressing
Adalah pengalamatan dengan menggunakan 11 bit alamat pasti dari tujuan, sehingga dapat menjangkau sampai 2 Kbytes memori program.
Contoh : AJMP SEDANG
g. Long addressing
Adalah pengalamatan dengan menggunakan 16 bit alamat pasti dari tujuan, sehingga dapat menjangkau sampai 64 Kbytes memori program.
Contoh : LJMP JAUH
h. Indexed addressing
Adalah pengalamatan dengan menggunakan offset dan base register tertentu.
Contoh : MOVC A, @A+R1

set intruksi 8051 dibagi menjadi 3 kelompok besar, yaitu :
1. Intruksi-intruksi transfer data
2. Intruksi-intruksi pemrosesan data
3. Intruksi-intruksi lompatan
1. Intruksi-intruksi transfer data
1.1. Daftar Intruksi Transfer data
 

1.2. Instruksi Transfer Data
a) RAM Internal
Perintah perpindahan data (MOV, XCH, POP, PUSH) pada RAM internal membutuhkan 1 sampai 2 cycle. Format instruksi :
MOV (tujuan), (asal)
Memungkinkan data untuk berpindah diantara 2 lokasi RAM internal atau SFR tanpa harus melalui akumulator terlebih dahulu.
b) RAM EKternal
Perintah MOV 16-bit digunakan untuk inisialisasi DPTR atau untuk akses data 16-bit pada memori ekternal.perpindahan data antera memori internal dan ekternal menggunakan indirect addressing dengan menggunakan alamat 1-byte (@R1) atau 2-byte (@DPTR).
c) Look Up Tables
Ada dua perintah untuk membaca look-up tables pada ROM. MOVC (move constant) menggunakan program counter sebagai base register dan akumulator sebagai offsetnya.
MOVC A, @A+DPTR
Perintah tersebut dapat mengakses 256 entri. Nomor entri dimasukkan ke akumulator dan awal tabelnya pada DPTR.
MOVC A, @A+PC
2. Instruksi-intruksi Pemrosesan Data
Instruksi-intruksi pemrosesan data dibagi manjadi 2 :
- Instruksi-instruksi Aritmatika
- Instruksi-intruksi Logika
2.1 Intruksi-intruksi Aritmatika
Set intruksi Aritmatika terdiri dari :
- Instruksi-instruksi penjumlahan dan pengurangan
- Instruksi-instruksi perkalian dan pembagian
- Instruksi-instruksi Increment dan Decrement
- Instruksi pengubahan ke decimal (Decimal Adjust)
Daftar Set intruksi
 
Dengan beberapa macam type addresing maka instruksi aritmatika dapat dituliskan dengan setiap macam addresing seperti :
ADD A, 7FH (direct addressing)
ADD A, @R0 (indirect addressing)
ADD A, R7 (register addressing)
ADD A, #35H (immediate addressing)
Semua instruksi aritmatika mempunyai waktu eksekusi 1 cycle kecuali INC DPTR (2 cycle),MUL AB dan DIV AB (4 cycle). Perintah INC dapat berperasi pada data pointer 16-bit, yang biasanya digunakan untuk alamat 16-bit pada memori aksternal. Karena perintah DEC untuk data pointer ada, maka diperlukan serangkaian perintah sebagai berikut :

DEL DPL    ; pengurangan low-byte dari DPTR
MOV R7, DPL  ; disalin ke R7
CJNE R7, #0FFH, SKIP  ; pindah jika R7 dibawahb 0FFH
DEC DPH  ; mengurangi high-byte
SKIP   ; melanjutkan program
2.2 Instruksi-instruksi Logika
set instruksi logika terdiri dari :
- Instruksi-instruksi AND, OR, dan EX-OR
- Instruksi-instruksi komplemen dan clear
- Instruksi-instruksi putar
- Instruksi SWAP
- Instruksi logika per-bit
Daftar set intruksi
 
Perintah logika pada 8051 melakukan operasi Boolean seperti AND, OR, Exclusive OR, dan NOT pada sepanjang byte atau bit.
Karena ada beberapa macam addressing maka perintah logika dapat juga berbentuk :
AND A, 55H  (direct addressing)
AND A, @R0  (indirect addressing)
AND A, R6  (register addressing)
AND A, #33H  (immediate addressing)
Perintah rotasi (RL A dan RR A) menggeser bit akumulator 1 bit ke kiri atau ke kanan perintah RLC A dan RRC A menggeser bit akumulator dan bit carry pada PSW ke kiri atau ke kanan 1 bit.
3. Instruksi-instruksi Lompatan
Set intruksi lompatan terdiri dari:
A. Unconditional Jump
Ada tiga variasi perintah jump yang tidak bersyarat yaitu SJMP, LJMP, dan AJMP (relatif, long dan absolut addressing). Bila tidak ada referensi pada jarak 2K maka dianggap sebagai AJMP, jika tidak maka dianggap sebagai LJMP. SJMP akan mengambil alamat tujuan sebagai offsetnya dengan batas -128 hingga +127 byte relatif dari alamat setelah perintah SJMP. 
B. Conditional Jump
Perintah jump bersyarat mempunyai kesamaan dalam jangkauan alamat seperti pada perintah jump tidak bersyarat. Perintah JZ dan JNZ mengetes akumulator untuk nilai 0 karena PSW tidak memiliki flag zero. Sedangkan DJNZ (Decrecment and Jump if Not Zero) adalah perintah yang sering digunakan untuk kontrol loop. Perintah berikut melakukan loop sbanyak 10 kali :
MOV R7, #10
LOOP : … ; mulai loop

… ; akhir loop
DJNZ R7, LOOP
(melanjutkan program)
Jika sebuah karakter dibaca oleh akumulator dari serial port, dan diharapkan akan pindah ke label HABIS bila karakter tang masuk adalah Ctrl-C (30H), maka perintahnya adalah :
CJNE A, #03H, SKIP
SJMP HABIS
AKIP : (melanjutkan program)
C. Jump Table
Alamat tujuan dihitung sebagai jumlah dari DPTR 16-bit sebagai jump table dan akumulator sebagai indeksnya. Jika ada 5 syarat yang diinginkan, nilai 0 sampai 4 dimasukkan ke akumulator dan proses jump di lakukkan sebagai berikut :
MOV DPTR, #JUMP_TABLE
MOV A, INDEX_NUMBER
RL A
JMP @A+DPTR
JUMP_TABLE: AJMP CASE0
AJMP CASE1
AJMP CASE2
AJMP CASE3
D. Subrutin DAN interupsi
Yang termasuk kelompok ini adalah instruksi CALL, RET dan RETI. Penafsiran dari assembler addressing perintah CALL sama halnya seperti pada perintah JMP. Perintah CALL akan menyimpan nilai PC ke ctack (push PC ke stack) dan mengambilnya ketika subrutin selesai atau RET (pop PC dari stack).
Daftar set Instruksi
ACALL
Absolute Call
Memanggil subrutin program
ADD
Add Accumulator
Instruksi ADD digunakan untuk melakukan penambahan pada dua buah operand. Dan destination (tempat hasil dari proses) selalu pada A, sdang operand source dapat berupa register, data langsung, maupun memory
ADDC
Add Accumulator (With Carry)
Instruksi ADD digunakan untuk melakukan penambahan pada dua buah operand dengan carry
AJMP
Absolute Jump
AJMP ini adalah lompat tidak bersyarat jarak menengah. Disebut juga sebagai Jump 11-bit. Ini adalah instruksi 2-byte. Menjangkau alamat instruksi tepat di bawah AJMP, dan alamat label yang dituju, harus berada pada blok 2 KB yang sama.
ANL
AND Logic
Instruksi ini adalah melakukan AND logika pada dua operand dan menaruh hasilnya pada destination ( Akumulator)
CJNE
Compare and Jump if Not Equal
Membandingkan data langsung dengan lokasi memori yang dialamati oleh register atau Akumulator jika tidak sama maka instruksi akan menuju ke alamat kode
CLR
Clear Register
Mereset isi register
CPL
Complement Register
Mengkomplement isi register
DA
Decimal Adjust
Mengkoreksi masalah yang timbul yang berkaitan denga penjumlahan bilangan BCD
DEC
Decrement Register
Mengurangi isi lokasi memori yang ditujukan oleh register R dengan 1, dan hasilnya disimpan pada lokasi tersebut
DIV
Divide Accumulator
Melakukan operasi pembagian
DJNZ
Decrement Register and Jump if Not Zero
Mengurangi nilai register dengan 1 dan jika hasilnya sudah 0 maka instruksi selanjutnya akan dieksekusi. Jika belum 0 akan menuju ke alamat kode
INC
Increment Register
Menambahkan isi memori dengan 1 dan menyimpannya pada alamat tersebut
JB
Jump if Bit Set
Membaca data per satu bit, jika data tersebut adalah 1 maka akan menuju ke alamat kode dan jika 0 tidak akan menuju ke alamat kode
JBC
Jump if Bit Set and Clear Bit
Membaca data per satu bit, jika data tersebut adalah 1, selain akan melompat ke instruksi lain juga akan menolkan bit yang baru saja diperiksa
JC
Jump if Carry Set
Membaca data carry
JMP
Jump to Address
Instruksi untuk memerintahkan menjangkau ke alamat kode tertentu
JNB
Jump if Bit Not Set
Membaca data per satu bit, jika data tersebut adalah 0 maka akan menuju ke alamat kode dan jika 1 tidak akan menuju ke alamat kode
JNC
Jump if Carry Not Set (jump if no carry, jump if CY=1)
Instruksi ini, menggunakan carry sebagai menentu keputusan dalam jump. Jika CY=1, maka program akan melompat ke alamat yang ditunjuk. Namun jika CY=0, maka program akan mengeksekusi instruksi selanjutnya dibawah JNC tersebut.
JNZ
Jump if Accumulator Not Zero
Instruksi ini tidak akan memeriksa isi A. Jika 00, maka program akan melompat ke alamat yang ditunjuk
JZ
Jump if Accumulator Zero
JZ (lompat jika A=0), atau JC (lompat jika CY=1), akan membuat program melompat pada lokasi yang ditunjuk hanya jika kondisi yang diminta terpenuhi
LCALL
Long Call
Ini adalah instruksi 3-byte. Byte pertama adalah opcode, sedang 2-byte lainnya adalah alamat 16-bit yang dituju. Saat instruksi LCALL ini dijalankan, CPU tidak lagi mengeksekusi instruksi-instruksi di bawah LCALL, namun segera melompat pada alamat yang dituju
LJMP
Long Jump
Instruksi 3-byte, di mana byte pertama adalah opcode, sedang dua byte yang lain adalah representasi dari alamat 16-bit yang dituju
MOV
Move Memory
Instruksi ini untuk memindahkan isi akumulator/register atau data dari nilai luar atau alamat lain
MOVC
Move Code Memory
Membedakan bahwa instruksi ini dipakai di memori program
MOVX
Move Extended Memory
Perintah yang dipakai untuk memori data eksternal
MUL
Multiply
Melakukan operasi perkalian
NOP
No Operation
Menyisipkan instruksi untuk tidak mengerjakan apa-apa
ORL
OR Logic
Operand tujuan dan sumber di-OR-kan, dan menempatkan hasilnya pada tujuan destination. Instruksi ORL dapat digunakan untuk men-Set menjadi 1′s beberapa bit dalam register.
POP
Pop Value From Stack
Memanggil subrutin dengan instruksi CALL, memory stack akan menyimpan alamat di mana CPU akan kembali setelah menjalankan subrutin
PUSH
Push Value Onto Stack
Memanggil subrutin dengan instruksi CALL, memory stack akan menyimpan alamat di mana CPU akan kembali setelah menjalankan subrutin
RET
Return From Subroutine
Intruksi untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut di panggil
RETI
Return From Interrupt
Mereset bit yang bersangkutan
RL
Rotate Accumulator Left
Pada putar kiri , 8-bit dalam akumulator digeser ke kiri sejauh satu bit. Bit D7 keluar dari Most Significant Bit (MSB) dan ditempatkan pada D0 atau Least Significant Bit (LSB)
RLC
Rotate Accumulator Left Through Carry
Menggeser 8-bit dalam akumulator ke kanan sejauh 1 bit melewati Carry. Bit D0 keluar dari Least Significant Bit (LSB) dan ditempatkan pada Carry. Sedangkan isi Carry ditempatkan pada D7 atau Most Significant Bit (MSB)
RR
Rotate Accumulator Right
Pada putar kanan , 8-bit dalam akumulator digeser ke kanan sejauh satu bit. Bit D0 keluar dari Least Significant Bit (LSB) dan ditempatkan pada D7 atau Most Significant Bit (MSB)
RRC
Rotate Accumulator Right Through Carry
Menggeser 8-bit dalam akumulator ke kanan sejauh 1 bit melewati Carry. Bit D0 keluar dari Least Significant Bit (LSB) dan ditempatkan pada Carry. Sementara isi Carry ditempatkan pada D7 atau Most Significant Bit (MSB)
SETB
Set Bit
Instruksi untuk mengaktikan atau memberikan logika 1 pada sebuat bit data
SJMP
Short Jump
SJMP adalah lompat tanpa syarat jarak pendek. Disebut juga sebagai Jump relatif 8-bit. Ini adalah instruksi 2 byte. Byte pertama adalah opcode, sedang byte lainnya adalah alamat relatif yang dituju. Ya alamat relatif, sehingga nilai pada byte ke dua ini bukan representasi dari alamat yang dituju, melainkan nilai relatif terhadap nilai PC saat itu
SUBB
Subtract From Accumulator With Borrow
SUBB bisa difungsikan sebagai SUB. Yaitu dengan membuat/memastikan CY=0 sebelum perintah SUBB dilaksanakan
SWAP
Swap Accumulator Nibbles
men-swap (menukar balik) nible bawah dan nible atas
XCH
Exchange Bytes
Merubah bit
XCHD
Exchange Digits
Merubah digit
XRL
Exclusive OR Logic
Membalik nilai (complement) beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-XRL-kan bilangan asal. Bit yang ingin dibalik-nilai diwakili dengan ‘1’ pada data konstan, sedangkan bit lainnya diberi nilai ‘0’

Belum ada Komentar untuk "Daftar Set Instruksi 8051 dan Contoh Program Kelompok Instruksi (addressing mode)"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel