Daftar Set Instruksi 8051 dan Contoh Program untuk Setiap Kelompok Instruksi (Addressing Mode)

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
 Berikut Contoh Program EdSim 51 untuk transfer data :


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


Berikut contoh program EdSim 51 untuk pemrosesan intruksi aritmatika:


Prosesnya :
  
CY=0, AC=0, dan kita harus memeriksa kondisi Carry tersebut untuk mengetahui hasilnya positif atau negatif.


3.Instruksi-Instruksi Lompatan
Instruksi-instruksi lompatan dibagi menjadi 3 yaitu:
Instruksi-instruksi lompatan tak bersyarat
Instruksi-instruksi lompatan bersyarat
Instruksi CALL dan RET

Berikut Contoh program untuk menyalin 55h ke dalam memory lokasi 40 s/d 15h menggunakan intruksi lompatan Loop menggunakan edsim 51 :


berikut ini rincianya :

        MOV  A,#55h                 ;A= 55h
        MOV  R0,#40h               ;isi dengan pointer
        MOV  R2,#5                   ;isi dengan counter
         LOOP:   MOV  @R0,A  ;salin A pada lokasi ditunjuk R0
        INC  R0                          ;ke alamat selanjutnya
        DJNZ R2,LOOP              ;kurangi R2 lompat jika tidak 0

Beberapa Jenis instruksi dan fungsinya secara lebih jelas diuraikan dalam tabel di bawah ini:
ACALLAbsolute CallMemanggil subrutin program
ADDAdd AccumulatorInstruksi 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
ADDCAdd Accumulator (With Carry)Instruksi ADD digunakan untuk melakukan penambahan pada dua buah operand dengan carry
AJMPAbsolute JumpAJMP 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.
ANLAND LogicInstruksi ini adalah melakukan AND logika pada dua operand dan menaruh hasilnya pada destination (Akumulator)
CJNECompare and Jump if Not EqualMembandingkan data langsung dengan lokasi memori yang dialamati oleh register atau Akumulator jika tidak sama maka instruksi akan menuju ke alamat kode
CLRClear RegisterMereset isi register
CPLComplement RegisterMengkomplement isi register
DADecimal AdjustMengkoreksi masalah yang timbul yang berkaitan denga penjumlahan bilangan BCD
DECDecrement RegisterMengurangi isi lokasi memori yang ditujukan oleh register R dengan 1, dan hasilnya disimpan pada lokasi tersebut
DIVDivide AccumulatorMelakukan operasi pembagian
DJNZDecrement Register and Jump if Not ZeroMengurangi nilai register dengan 1 dan jika hasilnya sudah 0 maka instruksi selanjutnya akan dieksekusi. Jika belum 0 akan menuju ke alamat kode
INCIncrement RegisterMenambahkan isi memori dengan 1 dan menyimpannya pada alamat tersebut
JBJump if Bit SetMembaca data per satu bit, jika data tersebut adalah 1 maka akan menuju ke alamat kode dan jika 0 tidak akan menuju ke alamat kode.
JBCJump if Bit Set and Clear BitMembaca data per satu bit, jika data tersebut adalah 1, selain akan melompat ke instruksi lain juga akan menolkan bit yang baru saja diperiksa.
JCJump if Carry SetMembaca data carry
JMPJump to AddressInstruksi untuk memerintahkan menjangkau ke alamat kode tertentu
JNBJump if Bit Not SetMembaca data per satu bit, jika data tersebut adalah 0 maka akan menuju ke alamat kode dan jika 1 tidak akan menuju ke alamat kode.
JNCJump 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.
JNZJump if Accumulator Not ZeroInstruksi ini tidak akan memeriksa isi A. Jika 00, maka program akan melompat ke alamat yang ditunjuk
JZJump if Accumulator ZeroJZ (lompat jika A=0), atau JC (lompat jika CY=1), akan membuat program melompat pada lokasi yang ditunjuk hanya jika kondisi yang diminta terpenuhi
LCALLLong CallIni 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
LJMPLong JumpInstruksi 3-byte, di mana byte pertama adalah opcode, sedang dua byte yang lain adalah representasi dari alamat 16-bit yang dituju
MOVMove MemoryInstruksi ini untuk memindahkan isi akumulator/register atau data dari nilai luar atau alamat lain
MOVCMove Code MemoryMembedakan bahwa instruksi ini dipakai di memori program
MOVXMove Extended MemoryPerintah yang dipakai untuk memori data eksternal
MULMultiplyMelakukan operasi perkalian
NOPNo OperationMenyisipkan instruksi untuk tidak mengerjakan apa-apa
ORLOR LogicOperand 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.
POPPop Value From StackMemanggil subrutin dengan instruksi CALL, memory stack akan menyimpan alamat di mana CPU akan kembali setelah menjalankan subrutin
PUSHPush Value Onto StackMemanggil subrutin dengan instruksi CALL, memory stack akan menyimpan alamat di mana CPU akan kembali setelah menjalankan subrutin
RETReturn From SubroutineIntruksi untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut di panggil
RETIReturn From InterruptMereset bit yang bersangkutan
RLRotate Accumulator LeftPada 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)
RLCRotate Accumulator Left Through CarryMenggeser 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)
RRRotate Accumulator RightPada 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)
RRCRotate Accumulator Right Through CarryMenggeser 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)
SETBSet BitInstruksi untuk mengaktikan atau memberikan logika 1 pada sebuat bit data
SJMPShort JumpSJMP 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
SUBBSubtract From Accumulator With BorrowSUBB bisa difungsikan sebagai SUB. Yaitu dengan membuat/memastikan CY=0 sebelum perintah SUBB dilaksanakan
SWAPSwap Accumulator Nibblesmen-swap (menukar balik) nible bawah dan nible atas
XCHExchange BytesMerubah bit
XCHDExchange DigitsMerubah digit
XRLExclusive OR LogicMembalik 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 untuk Setiap Kelompok Instruksi (Addressing Mode)"

Posting Komentar

Iklan Atas Artikel

Iklan Tengah Artikel 1

Iklan Tengah Artikel 2

Iklan Bawah Artikel