2.6 Instruksi MCS-51
Pengalamatan adalah pengelompokkan berdasarkan orientasi lokasi memori, tipe-tipe instruksi adalah pengelompokkan berdasarkan fungsi instruksi. Beberapa
fungsi pada instruksi MCS-51 yang akan digunakan yaitu Aritmatika, Transfer data,dll. Pada table-tabel perlu dijelaskan arti dari simbol-simbol yang digunakan pada
mnemonics sebagai berikut :
Rn
Register serbaguna R0 sd R7 di register bank yang diseleksi oleh PSW.
Direct
8 bit alamat internal RAM 0-127 atau SFR 128-255
Rn
lokasi internal RAM yang alamatnya ditunjukkan oleh R0 atau R1 pengalamatan tak langsung dengan R0 sd R7. Perhatikan;
tidak untuk R2, R3, R4, R5, R6, dan R7
Data
konstanta 8 bit
Data 16
konstanta 16 bit
Addrl1
alamat 11 bit untuk akses memori hingga 2K
Addr16
alamat 16 bit untuk akses memori hingga 64K
Rel
8 bit offset relative bertanda 2’S complement, digunakan untuk SJMP, lompat dalam jangkauan 128 mundur hingga
+127 maju
Instruksi-instruksi diperlihatkan disajikan pada table 2.5, yang menunjukkan ragam pengalamatan yang dapat digunakan dengan masing-masing instruksi.
Tabel 2.5 Instruksi Aritmatika
Mnemonic Diskripsi
ADD A, source A=A+source
ADDC A, source A=A+source+C
SUBB A, source A=A-source-C
INC A A=A+1
INC source source=source+1
Universitas Sumatera Utara
DEC A A=A-1
DEC source source=source-1
INC DPTR DPTR=DPTR+1
MUL AB AB = A X B
DIV AB A = Hasil AB; B = sisa AB
DA A Decimal Adjust
Source sumber adalah operand dengan ragam pengalamatan; register direct, indirect atau immediate. Contoh program penjumlahan pada ragam pengalamatan
untuk instruksi aritmatika seperti berikut ini :
ADD A, 7FH ;a diisi dengan a+isi dri memori lokasi 7FH ;pengalamatan langsung
ADD A, R1 ;a diisi dengan a+isi dari memori yang alamatnya ; disimpan di R1 pengalamatan tak langsung
ADD A, R7 ;a diisi dengan a+isi dari R7
ADD A, 127 ;a diisi dengan a+127 pengalamatan segera
Untuk penggunaan kristal 12 MHz, kebanyakan instruksi aritmatik dieksekusi dalam 1 µs kecuali instruksi INC DPTR yang memerlukan waktu 2 µs dan instruksi-
instruksi perkalian dan pembagian yang memerlukan waktu 4 µs.
Data didalam memori internal dapat dinaikkan atau diturunkan increment atau decrement, tanpa melalui akumulator , demikian juga pada DPTR yang digunakan
untuk menghasilkan pengalamatan 16 bit di memori eksternal. Instruksi MUL AB mengalikan dengan data yang ada pada register B dan meletakkan hasil 16 bit ke
dalam register A dan B. Register A berisi lo-byte dan register B berisi hi-byte. Bila hasilnya lebih besar dari 255 0FFh, maka bit OV set, sedangkan bit C selalu akan
diclearkan ‘0’. Instruksi DIV AB membagi isi akumulator dengan data dalam register B dan meletakkan hasil bagi quotient 8 bit dalam akumulator, dan sisanya
remainder 8 bit dalam register B. Operasi DIV akan membuat bit-bit CY dan OV menjadi ‘0’.
Universitas Sumatera Utara
MOV adalah proses move pindahkan data dari sumber ke tujuan yang sebenarnya adalah proses mengcopy, artinya data di sumber tidak berubah. Proses
data transfer yang lain adalah PUSH dan POP, XCH dan XCHD seperti yang diperlihatkan pada tabel 2.6.
Tabel 2.6 Data Transfer
Mnemonic ARTI
MOV dest,source dest=source, memori int
MOV DPTR,data 16 Dptr = data16
MOVC A,A+base-reg A = isi dilokasi A+base-reg
MOVX dest,source dest=source,data mem
PUSH direct Simpan data ke memori stack
POP direct Ambil data dari memori stack
MOVdest,source
adalah copy data dari source ke destination, atau sumber ke tujuan, semua memori internal dan SFR dapat berlaku sebagai source dan
sebagian besar dapat berlaku sebagai destination. Ragam pengalamatan dari kedua operand bisa semua kombinasi, berikut contoh proses transfer data.
;keadaan awal isi RAM dengan alamat 30h adalah
;40h, lokasi 40h berisi 10h, P1 berisi 11001010b
Mov R0,30h ;R0 berisi 30h Mov A,R0
;A berisi 40h Mov R1,A
;R1 berisi 40h Mov B,R1
;B berisi 10h Mov R1,P1
;RAM lokasi 40h berisi 11001010b Mov P2,P1
;P2=P1=11001010b
Program asembler bersifat sekuensial, seperti pada program basic klasikawal mula basic, dan biasanya diperlukan pencabangan untuk tujuan tertentu, yaitu lompat
ke lokasi instruksi dengan alamat tertentu. Pencabangan ini terdiri dari: pelaksanaan subrutin, pencabangan tanpa syarat dan bersyarat. Subrutin adalah penggal program
yang sering digunakan, tanpa harus menulis ulang perintahnya. Proses ACALL dan LCALL menggunakan memori stack untuk menyimpan data-data alamat yang
Universitas Sumatera Utara
ditinggalkan sebelum melaksanakan subrutin, agar apabila kembali melaksanakan subrutin, mikrokontroller ingat lokasinya kembali. Berikut tabel pencabangan
program.
Tabel 2.7 Pencabangan Program
Mnemonic ARTI
ACALL addr11 dest=source, memori int
LCALL addr16 Dptr = data16
RET A = isi dilokasi A+base-reg
SJMP rel Lompat maju atau mundur sejauh
rel JMP A+DPTR
Lompat ke alamat a+dptr CJNE dest-byte,scr-
byte,rel Bila destsource lompat
sejauh rel CJNE A,data,rel
Bila Adata lompat sejauh rel DJNZ direct, rel
Direct= direct-1,bila 0 lompat sejauh rel
NOP No Operation, tidak ada operasi
Pencabangan bersyarat adalah lompat ke alamat tertentu bila persyaratan terpenuhi. Secara umum perintahnya adalah :
CJNE dest-byte,src-byte, rel
; artinya Compare destination byte dan source byte, Jump if Not Equal along
relactive. Source byte adalah A, yang dibandingkan dengan destination byte berupa direct memory atau immediate constant. Source dapat juga berupa direct Rn atau
indirect Rn yang dibandingkan dengan immediate constant.
START : CJNE A,040h, LABEL1
;bandingkan dengan 40h, jika tak ;sama lompat ke LABEL1
CJNE A,P1,LABEL1 ;bandingkan a dengan P1, jika tak
;sama lompat ke LABEL1 CJNE R1,040h,LABEL1 ;bandingkan R1 dengan 40h, jika
;tak sama lompat ke LABEL1 CJNE R1,0CCh,LABEL1 ;bandingkan indirect R1 dengan
;CCh,jika tak sama lompat ke ;LABEL1
LABEL1:
Universitas Sumatera Utara
----- -----
Instruksi
DJNZ direct, rel,
adalah : Decrement Jump if Not Zero, artinya kurangi satu dahulu data di direct, kemudian bila isinya nol, maka lomatlah ke rel.
Biasanya instruksi ini digunakan untuk pencacah. Berikut contoh penggunaan instruksi tersebut ;
START : Mov R0,5
;isi R0 dengan 5 Mov R1,40h
;isi R1 dengan 40h LOOP:
Mov R1,0AAh ;isi memori di R1 dengan AAh Inc R1
;R1=R1+1 DJNZ R0,LOOP
;R0=R0-1, jika belum 0 kembali ke LOOP Sjmp
:usai
Perintah diatas adalah mengisi memori lokasi 40h,41h,42h,43h dan 44h dengan data AAh, disini R0 digunakan sebagai pencacah sebanyak 5 kali, sedangkan R1
digunakan sebagai pointer memori dengan alamat awal 40h. Perintah SJMP memerintahkan mikrokontroller untuk melompat ke tempat yang sama, artinya
looping ditempat. Instruksi NOP adalah tidak memerintahkan MCU mengerjakan apa- apa, proses ini hanya menunda kerja mikrokontroller, karena satu instruksi NOP
memakan 1 mikrodetik, sehingga beberapa perintah NOP bisa digunakan untuk proses penundaan atau delay.
2.7 Motor DC Dirrect Current