![]() |
| Transfer Data MCS51 |
MOV
Melakukan pemindahan data dari variabel pada kode operasi kedua dan disimpan di variabel pada kode operasi pertama.MOV A,Rn
Melakukan pemindahan data dari Rn (R0…R7) menuju ke akumulator A
MOV A,direct
Melakukan pemindahan data dari alamat langsung ke akumulator A.
MOV A,@Ri
Melakukan pemindahan data dari alamat yang ditunjuk oleh Register Index (R0 atau R1) menuju ke akumulator A.
MOV A,#data
Melakukan pemindahan data dari immediate menuju ke akumulator A.
Contoh:
Data EQU 05H
Mov A,#Data
Konstanta Data yang dideklarasikan sebagai 05H dipindah ke akumulator A sehingga nilai akumulator A menjadi 05H.
Melakukan pemindahan data dari akumulator A menuju ke Rn (R0…R7).
MOV Rn,direct
Melakukan pemindahan data dari alamat langsung menuju ke Rn (R0…R7).
Contoh:
Mov R7,10H
Data di alamat 10H dipindah ke dalam R7.
Melakukan pemindahan data dari immediate menuju ke Rn (R0…R7).
Contoh:
Mov R7,#05H
Data 05H dipindah ke dalam R7.
MOV direct,A
Melakukan pemindahan data dari akumulator A menuju ke alamat langsung.
Contoh:
Mov 10H,A
Data di akumulator A dipindah ke alamat 10H.
MOV direct,Rn
Melakukan pemindahan data dari Rn (R0…R7) menuju ke alamat langsung.
MOV direct,direct
Melakukan pemindahan data dari alamat langsung menuju ke alamat langsung.
Contoh:
Mov P1,P2
P1 adalah register yang terletak di alamat 90H dan P2 adalah register yang terletak di alamat A0H, oleh karena itu instruksi di atas adalah sama dengan Mov 90H,0A0H. Artinya, data di alamat 90H atau di Port 1, dipindah ke alamat 0A0H atau Port 2.
Melakukan pemindahan data dari alamat yang ditunjuk oleh Register Index (R0 atau R1) ke alamat langsung.
Contoh:
Mov 05H,@R0
Bila R0 sebelumnya berisi 20H, maka nilai atau data yang tersimpan di alamat 20H akan dipindah ke alamat 05H.
Melakukan pemindahan data dari immediate ke alamat langsung.
MOV @Ri,A
Melakukan pemindahan data dari akumulator A menuju ke alamat yang ditunjuk oleh Register Index (R0 atau R1).
MOV @Ri,direct
Melakukan pemindahan data dari alamat langsung menuju ke alamat yang ditunjuk oleh Register Index (R0 atau R1).
MOV @Ri,#data
Melakukan pemindahan data immediate menuju ke alamat yang ditunjuk oleh Register Index (R0 atau R1).
MOV DPTR,#data16
Melakukan pemindahan data immediate 16 bit menuju ke DPTR.
Contoh:
Mov DPTR,#2000H
Data 2000H dalam bentuk 16 bit dipindah ke alamat Register DPTR yang terdiri dari DPH dan DPL.
Melakukan pemindahan data dari memori program yang ditunjuk oleh DPTR dengan indeks akumulator A menuju ke akumulator A. Pada instruksi ini, mikrokontroler akan membaca memori program, yaitu sebuah memori yang ada dalam Flash PEROM AT89C51 atau pada sebuah komponen memori di luar AT89C51 yang di mana input RD dari memori tersebut terhubung dengan PSEN. Sinyal PSEN aktif pada saat instruksi ini dijalankan.
Contoh:
Mov A,#50H
Mov DPTR,#2000H
Movc A,@A+DPTR
Data yang terletak di komponen memori di luar AT89C51 dan terletak pada alamat 2000H + 50H akan dibaca dan hasilnya disimpan di akumulator A
MOVC A,@A+PC
Melakukan pemindahan data dari memori program yang ditunjuk oleh PC (Program Counter) dengan indeks akumulator A menuju ke akumulator A. Pada instruksi ini, mikrokontroler akan membaca memori program, yaitu sebuah memori yang ada dalam Flash PEROM AT89C51 atau pada sebuah komponen memori di luar AT89C51 yang di mana input RD dari memori tersebut terhubung dengan PSEN. Sinyal PSEN aktif pada saat instruksi ini dijalankan.
Contoh:
Mov A,#50H
Movc A,@A+PC
Apabila pada saat itu Program Counter sedang berada di alamat 2100H, maka data yang terletak di komponen memori di luar AT89C51 dan terletak pada alamat 2100H + 50H akan dibaca dan hasilnya disimpan di akumulator A.
MOVX A,@RI
Melakukan pemindahan data dari memori eksternal (komponen memori di luar AT89C51) ke akumulator A. Jalur alamat dan data dari memori tersebut terhubung melalui Port 0 dan proses pengiriman alamat serta pengambilan data dilakukan secara bergantian (multiplex) Alamat dari memori terdiri dari 8 bit sehingga kapasitas maksimal dari memori adalah 256 byte.
Contoh:
Mov R0,#50H Movx A,@R0
Data di alamat 50H dari memori eksternal dipindah ke akumulator A.
Melakukan pemindahan data dari memori eksternal yang ditunjuk oleh DPTR menuju ke akumulator A. Berbeda dengan MOVC, pada saat instruksi ini dijalankan, sinyal yang muncul adalah sinyal RD (bukan PSEN), sehingga memori eksternal di mana input RDnya terhubung dengan RD dari AT89C51 yang terbaca.
Contoh:
Mov DPTR,#2500H
Movx A, @DPTR
Data yang terletak di alamat 2500H dipindah ke akumulator A.
Melakukan pemindahan data dari akumulator A ke memori eksternal yang ditunjuk oleh Register Indeks. Jalur alamat dan data dari memori tersebut terhubung melalui Port 0 dan proses pengiriman alamat serta pengiriman data dilakukan secara bergantian (multiplex) Alamat dari memori terdiri dari 8 bit sehingga kapasitas maksimal dari memori adalah 256 byte.
Contoh:
Mov R0,#60H Movx @R0,A
Data di akumulator A dipindah ke alamat yang ditunjuk oleh R0 pada memori eksternal.
Melakukan pemindahan data dari akumulator A ke alamat yang ditunjuk oleh DPTR pada memori eksternal.
Contoh:
Mov A,#55H
Mov DPTR,#3000H
Movx @DPTR,A
Data 55H pada akumulator A dipindah ke alamat 3000H yang terletak pada memori eksternal.
Melakukan penyimpanan data dari suatu register atau memori ke dalam stack. Lokasi data dalam stack tersebut ditunjuk oleh stack pointer. Pada saat instruksi ini dijalankan, nilai dari stack pointer akan bertambah satu dan register atau memori yang di PUSH akan masuk ke dalam alamat yang ditunjuk oleh stack pointer tersebut.
Contoh:
Push A
Isi dari SP sebelumnya adalah 09H, maka SP akan bertambah 1 menjadi 0AH dan nilai akumulator A akan tersimpan di alamat 0AH.
Melakukan pengambilan data dari dalam stack ke suatu register atau memori. Lokasi data dalam stack tersebut ditunjuk oleh stack pointer. Pada saat instruksi ini dijalankan, data di alamat yang ditunjuk oleh stack pointer akan dipindah ke register atau memori dilanjutkan dengan pengurangan nilai stack pointer dengan 1.
Contoh:
Pop B
Isi dari SP sebelumnya adalah 08H, maka data yang tersimpan di alamat 08H akan dipindah ke Register B dilanjutkan dengan pengurangan nilai SP menjadi 07H.
Menukar data yang tersimpan di akumulator A dengan Rn (R0…R7).
XCH A,DIRECT
Menukar data yang terseimpan di akumulator A dengan alamat langsung.
Contoh:
XCH A,70H
Data di akumulator A ditukar dengan data di alamat 70H dari RAM Internal.
Menukar data yang tersimpan di akumulator A dengan alamat yang ditunjuk oleh Register Index (R0 atau R1).
Contoh:
XCH A,@R0
Data di akumulator A ditukar dengan data di alamat yang ditunjuk oleh R0.
Menukar data nibble rendah dari akumulator A dengan nibble rendah dari data yang ditunjuk oleh Register Indeks (R0 atau R1). Nibble tinggi tidak berubah.
Contoh:
XCHD A,@R0
Bila sebelumnya akumulator A berisi 15H, R0 berisi 20H dan isi dari RAM internal alamat 20H adalah 41H, maka setelah instruksi ini dijalankan isi dari akumulator A berubah menjadi 11H dan isi RAM Internal di alamat 20H menjadi 45H.
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 1 | Mov A,Rn | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari Rn (R0…R7) menuju ke akumulator A
MOV A,direct
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 2 | Mov A,direct | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari alamat langsung ke akumulator A.
MOV A,@Ri
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 1 | Mov A,@Ri | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari alamat yang ditunjuk oleh Register Index (R0 atau R1) menuju ke akumulator A.
MOV A,#data
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 2 | Mov A,#data | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari immediate menuju ke akumulator A.
Contoh:
Data EQU 05H
Mov A,#Data
Konstanta Data yang dideklarasikan sebagai 05H dipindah ke akumulator A sehingga nilai akumulator A menjadi 05H.
MOV Rn,A
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 1 | Mov Rn,A | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari akumulator A menuju ke Rn (R0…R7).
MOV Rn,direct
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 2 | Mov Rn,direct | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari alamat langsung menuju ke Rn (R0…R7).
Contoh:
Mov R7,10H
Data di alamat 10H dipindah ke dalam R7.
MOV Rn,#data
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 2 | Mov Rn,#data | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari immediate menuju ke Rn (R0…R7).
Contoh:
Mov R7,#05H
Data 05H dipindah ke dalam R7.
MOV direct,A
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 2 | Mov direct,A | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari akumulator A menuju ke alamat langsung.
Contoh:
Mov 10H,A
Data di akumulator A dipindah ke alamat 10H.
MOV direct,Rn
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 2 | Mov direct,Rn | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari Rn (R0…R7) menuju ke alamat langsung.
MOV direct,direct
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 3 | Mov direct,direct | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari alamat langsung menuju ke alamat langsung.
Contoh:
Mov P1,P2
P1 adalah register yang terletak di alamat 90H dan P2 adalah register yang terletak di alamat A0H, oleh karena itu instruksi di atas adalah sama dengan Mov 90H,0A0H. Artinya, data di alamat 90H atau di Port 1, dipindah ke alamat 0A0H atau Port 2.
MOV direct,@Ri
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 2 | Mov direct,@Ri | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari alamat yang ditunjuk oleh Register Index (R0 atau R1) ke alamat langsung.
Contoh:
Mov 05H,@R0
Bila R0 sebelumnya berisi 20H, maka nilai atau data yang tersimpan di alamat 20H akan dipindah ke alamat 05H.
MOV direct,#data
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 3 | Mov direct,#data | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari immediate ke alamat langsung.
MOV @Ri,A
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 1 | Mov @Ri,A | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari akumulator A menuju ke alamat yang ditunjuk oleh Register Index (R0 atau R1).
MOV @Ri,direct
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 2 | Mov @Ri,direct | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari alamat langsung menuju ke alamat yang ditunjuk oleh Register Index (R0 atau R1).
MOV @Ri,#data
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 2 | Mov @Ri,#data | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data immediate menuju ke alamat yang ditunjuk oleh Register Index (R0 atau R1).
MOV DPTR,#data16
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 3 | Mov DPTR,#data16 | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data immediate 16 bit menuju ke DPTR.
Contoh:
Mov DPTR,#2000H
Data 2000H dalam bentuk 16 bit dipindah ke alamat Register DPTR yang terdiri dari DPH dan DPL.
MOVC A,@A+DPTR
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 1 | Movc A,@A+DPTR | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari memori program yang ditunjuk oleh DPTR dengan indeks akumulator A menuju ke akumulator A. Pada instruksi ini, mikrokontroler akan membaca memori program, yaitu sebuah memori yang ada dalam Flash PEROM AT89C51 atau pada sebuah komponen memori di luar AT89C51 yang di mana input RD dari memori tersebut terhubung dengan PSEN. Sinyal PSEN aktif pada saat instruksi ini dijalankan.
Contoh:
Mov A,#50H
Mov DPTR,#2000H
Movc A,@A+DPTR
Data yang terletak di komponen memori di luar AT89C51 dan terletak pada alamat 2000H + 50H akan dibaca dan hasilnya disimpan di akumulator A
MOVC A,@A+PC
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 1 | Movc A,@A+PC | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari memori program yang ditunjuk oleh PC (Program Counter) dengan indeks akumulator A menuju ke akumulator A. Pada instruksi ini, mikrokontroler akan membaca memori program, yaitu sebuah memori yang ada dalam Flash PEROM AT89C51 atau pada sebuah komponen memori di luar AT89C51 yang di mana input RD dari memori tersebut terhubung dengan PSEN. Sinyal PSEN aktif pada saat instruksi ini dijalankan.
Contoh:
Mov A,#50H
Movc A,@A+PC
Apabila pada saat itu Program Counter sedang berada di alamat 2100H, maka data yang terletak di komponen memori di luar AT89C51 dan terletak pada alamat 2100H + 50H akan dibaca dan hasilnya disimpan di akumulator A.
MOVX A,@RI
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 1 | Movx A,@Ri | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari memori eksternal (komponen memori di luar AT89C51) ke akumulator A. Jalur alamat dan data dari memori tersebut terhubung melalui Port 0 dan proses pengiriman alamat serta pengambilan data dilakukan secara bergantian (multiplex) Alamat dari memori terdiri dari 8 bit sehingga kapasitas maksimal dari memori adalah 256 byte.
Contoh:
Mov R0,#50H Movx A,@R0
Data di alamat 50H dari memori eksternal dipindah ke akumulator A.
MOVX A,@DPTR
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 1 | Movx A,@DPTR | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari memori eksternal yang ditunjuk oleh DPTR menuju ke akumulator A. Berbeda dengan MOVC, pada saat instruksi ini dijalankan, sinyal yang muncul adalah sinyal RD (bukan PSEN), sehingga memori eksternal di mana input RDnya terhubung dengan RD dari AT89C51 yang terbaca.
Contoh:
Mov DPTR,#2500H
Movx A, @DPTR
Data yang terletak di alamat 2500H dipindah ke akumulator A.
MOVX @RI,A
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 1 | Movx @Ri,A | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari akumulator A ke memori eksternal yang ditunjuk oleh Register Indeks. Jalur alamat dan data dari memori tersebut terhubung melalui Port 0 dan proses pengiriman alamat serta pengiriman data dilakukan secara bergantian (multiplex) Alamat dari memori terdiri dari 8 bit sehingga kapasitas maksimal dari memori adalah 256 byte.
Contoh:
Mov R0,#60H Movx @R0,A
Data di akumulator A dipindah ke alamat yang ditunjuk oleh R0 pada memori eksternal.
MOVX @DPTR,A
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 1 | Movx @DPTR,A | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pemindahan data dari akumulator A ke alamat yang ditunjuk oleh DPTR pada memori eksternal.
Contoh:
Mov A,#55H
Mov DPTR,#3000H
Movx @DPTR,A
Data 55H pada akumulator A dipindah ke alamat 3000H yang terletak pada memori eksternal.
PUSH DIRECT
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 2 | Push direct | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan penyimpanan data dari suatu register atau memori ke dalam stack. Lokasi data dalam stack tersebut ditunjuk oleh stack pointer. Pada saat instruksi ini dijalankan, nilai dari stack pointer akan bertambah satu dan register atau memori yang di PUSH akan masuk ke dalam alamat yang ditunjuk oleh stack pointer tersebut.
Contoh:
Push A
Isi dari SP sebelumnya adalah 09H, maka SP akan bertambah 1 menjadi 0AH dan nilai akumulator A akan tersimpan di alamat 0AH.
POP DIRECT
Siklus | Jumlah Byte | Instruksi | |||||||
2 | 2 | Pop direct | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Melakukan pengambilan data dari dalam stack ke suatu register atau memori. Lokasi data dalam stack tersebut ditunjuk oleh stack pointer. Pada saat instruksi ini dijalankan, data di alamat yang ditunjuk oleh stack pointer akan dipindah ke register atau memori dilanjutkan dengan pengurangan nilai stack pointer dengan 1.
Contoh:
Pop B
Isi dari SP sebelumnya adalah 08H, maka data yang tersimpan di alamat 08H akan dipindah ke Register B dilanjutkan dengan pengurangan nilai SP menjadi 07H.
XCH A,RN
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 1 | XCH A,RN | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Menukar data yang tersimpan di akumulator A dengan Rn (R0…R7).
XCH A,DIRECT
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 2 | Xch direct | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Menukar data yang terseimpan di akumulator A dengan alamat langsung.
Contoh:
XCH A,70H
Data di akumulator A ditukar dengan data di alamat 70H dari RAM Internal.
XCH A,@Ri
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 1 | Xch A,@Ri | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Menukar data yang tersimpan di akumulator A dengan alamat yang ditunjuk oleh Register Index (R0 atau R1).
Contoh:
XCH A,@R0
Data di akumulator A ditukar dengan data di alamat yang ditunjuk oleh R0.
XCHD A,@RI
Siklus | Jumlah Byte | Instruksi | |||||||
1 | 1 | XCHD A,@Ri | |||||||
Flag | C | AC | F0 | RS1 | RS0 | OV | P | ||
Menukar data nibble rendah dari akumulator A dengan nibble rendah dari data yang ditunjuk oleh Register Indeks (R0 atau R1). Nibble tinggi tidak berubah.
Contoh:
XCHD A,@R0
Bila sebelumnya akumulator A berisi 15H, R0 berisi 20H dan isi dari RAM internal alamat 20H adalah 41H, maka setelah instruksi ini dijalankan isi dari akumulator A berubah menjadi 11H dan isi RAM Internal di alamat 20H menjadi 45H.
