pertemuan 06 - set instruksi mikrokontroler 89c51 (lanjutan) · proses stack menggunakan register...
TRANSCRIPT
PERTEMUAN
SET INSTRUKSI MIKROKONTROLER AT 89C51
(Lanjutan)
Rotate
Perintah Rotate identik dengan Shift register dimana bit-bit dalam byte di geser ke kiri atau kekanan dengan atau tanpa carry.
Perintah-perintah Rotate dalam bahasa assembler adalah:
Mnemonic Keterangan
RL Rotate Left = Putar 1 Bit data kekiri
RR Rotate Right = Putar 1 Bit data kekanan
RLC Rotate Left Carry = Putar 1 Bit data kekiri melalui Carry
RRC Rotate Right Carry = Putar 1 Bit data kekanan melalui Carry
Proses Rotate di dalam Accumulator
Instruksi Swap adalah perintah untuk menukar nible dari byte dalam accumulator, nible rendah ditukar dengan nible tinggi.
Contoh Pemakaian instruksi nible dalam bahasa Assemler:
Mov a,#FAh ; iasi a dengan FAh
Swap
Data Transper
Mov a,#FAh ; iasi a dengan FAhSwap a ; isi a menjadi AFh
Instruksi MOV adalah perintah salin data dari sumber ke tujuan tanpa merubah data yang ada di sumber.
Copy data bisa antar internal memory atau dengan eksternal memory.
Instruksi transfer data yang lain adalah : PUSH, POP, XCH danXCHD
Mnemonic Keterangan
MOV <dest>,<source> <dest> =<source>, memori int
MOV DPTR, #data16 DPTR = data16
MOV A, @A+<base-reg> A = isi dilokasi A + <base-reg>
MOVC <dest>,<source> <dest> =<source>, data memori
PUSH direct simpan data ke memory stack
POP direct ambil data ke memory stack
XCH <byte>
XCHD A,@Rn
Keterangan Data Transfer
MOV <dest>,<source> adalah perintah copy data dari source ke destination ( dari sumber ketujuan). Sumua internal memory dan Special function Register dapat digunakan sebagai sumber.
Internal memory
Contoh:
Sebagian besar internal memory dan Special function Register dapat digunakan sebagai sumber
Kondisi awal isi RAM dengan alamat 30h adalah 40h, lokasi 40h berikan data 10h, P1 berisikan 11110001b
MOV R0,# 30h ; isi R0 dengan 30h MOV A,@R ; A berisikan 40hMOV R1,A ; Isikan data di alamat 40h ke R1 (R1 berikan 10h)MOV B, @R1 ; isi B adalah 10hMOV @R1,P1 ; alamat 40h berisikan data 11110000bMOV P3,P1 ; isi P3=P1= 11110000b
Contoh:
MOVC merupakan perintah code bit, Mengopy isi memori program (dikatifkan dengan PSEN)di lokasi yang di berikan register dasar (DPTR atau PC).
Program memory
Contoh:
MOV A,@A+DPTRMOV A,@A+DPTR
MOV A,@R+PC
MOVx merupakan mov external untuk mengopy data dari memori data ke memori data.Perintah ini dapat alamat 2 byte 00h - FFh, dengan jangkauan 0 s/d 255.
Data memory
Instruksi MOVX menggunakan indirect addresing menggunakan register R0 atau R1.
Contoh:
MOV A,@R0 ; Copy data di memori R0 ke AMOV @R1,A ; Copy isi A ke lokasi memori R!
Proses Stack
Instruksi yang digunakan adalah:PUSH artinya mendorong dari kata pushing
POP artinya menampilkan kembali dari kata poping
Proses Stack
Proses stack menggunakan register stac pointer (SP). Contoh instruksi di bawah menjelaskan proses stack
Proses stack di gunakan untuk mengamankan suatau data karena register tempat data tersebut di gunakan untuk proses yang lain, atau untuk mengingat alamat yang ditinggalkan data karena ada pemanggilan sun rutin pada proses interupsi.
Contoh instruksi di bawah menjelaskan proses stack
MOV SP, # 2Fh ; isi SP dengan 2FhMOV A, # AAh ; isi A dengan BBhMOV B, # BBh ; isi B dengan CChPUSH ACC ; memori lokasi 30h berisikan AAh, SP=30h
cat: Compiler tidak mengenal PUSH A, tetapi PUSH ACCPUSH B ; memori lokasi 31h berisikan CCh, SP=31hPUSH B ; memori lokasi 32h berisikan CCh, SP=32hPOP ACC ; A= memori lokasi 32hdengan isi data CCh, SP=31hPOP B ; B= memori lokasi 31hdengan isi data BBh, SP=30h
PUSHMenaikan isi Stack pointer (SP) menjadi SP+1,
kemudian mendorong data lansung ke alamat yang ditunjuk stack pointer k alamat yang ditunjuk Stack Pointer, kemudian isi stack pointer dikurangi satu.Prosesnya dilkenal dengan istilah Last In First Out (LIFO) atau data yang terahir masuk keluar terlebih dahulu.
Di dalam mikrokontrler 89C51 stack pointer menunjuk memori internal dialamat awal 30 h.
atau data yang terahir masuk keluar terlebih dahulu.
Pertukaran data
Contoh:
Intruksi yang di gunakan adalah XCH (exchange).XCH (exchange) adalah pertukaran data di dalam dua accumulator dengan ukuran byte.
Penggalamatan XHC bisa dengan cara direct, register atau indirect.
XCHD adalah pertukaran nible rendah antara accumulator dengan memori denen cara penggalamatan tidak langsung.Instruksi ini tidak menyebabkan nible tinggi berubah.
Contoh:
MOV A,#DDh ; isi A dengan DDhMOV B,#EEh ; isi B dengan EEhXHC A,B ; isi A=EE dan isi B=DDh
Contoh:
MOV A,#FDh ; isi A dengan FDhMOV 20h,#AAh ; Alamat memori 20h berisikan AChMOV R2,#20h ; isi R1 dengan 20hXHCD A,#R2 ; tukar nible antara A dengan memori
di alamat 20h, A=ADh, dan memori dengan alamat 20h berisikan data= FCh
Pencabangan Program
Pencabangan program terdiri dari:Pelaksanaan subrutin
Pencabangan bersyaratPencabangan tanpa syarat
Pencabangan Program
Pencabangan program dalam bahasa assembler di perlukan untuk kebutuhan lompat kelokasi memori dengan alamat tertentu.
Tabel pencabangan program
Mnemonic Keterangan
AACALL addr11 Jalankan subrutin di addr11
LCALL add 16 Jalankan subrutin di addr16
RET Kembali dari subrutin
RETI Kembali dari service interupsi
AJMP addr11 Lompat kealamat addr11
SJMP add 16 Lompat kealamat addr16SJMP add 16 Lompat kealamat addr16
JMP @A + DPTR Lompat kealamat A+DPTR
JZ rel Lompat ke rel jika A= 0
DJNZ rel Lompat ke rel jika A ≠ 0
CJNE <dest-byte>,<scr-byte>,rel
Bila ,dest> ≠ <source> lompat sejauh rel
CJNE A,#data,rel Bila A ≠ data lompat sejauh rel
DJNZ direct,rel Direct = Direct-1, bila ≠ 0 lompat sejauh rel
NOP No operation atau tidak ada operasi
Subrutin
Sub rutin adalah potongan program yang terdapat pada memori program yang sering digunakan. Pada mikrokontroler 89C51 subrutin dapat dipanggil dengan instruksi:
ACALLLCALLLCALL
Jika program menjalankan intruksi ACALL dan LCALL maka memori stack di gunakan untuk menyimpan data-data alamat yang ditinggalkan. Untuk kembali ke program utama setelah menjalankan subrutin maka digunakan intruksi RET.
ACALL dapat memanggil 2K (11 line), sedangkan LCALL dapat memanggil sampai 64 K
Pencabangan tak bersyarat
Dalam bahasa assemlerr untuk pencabangan program menggunakan instruksi JMP diambil dari kata jump atau lompat.Jika dilihat dari pembahasan subrutin diatas berarti subrutin adalah lompat dan kembali lagi.
Instruksi JMP @A+DPTR lompat absolut ke lokasi yang ditunjuk pada lokasi yang ditentukan oleh DPTR + isi A.
adalah lompat dan kembali lagi.
Pencabangan tak bersyarat, biasanya tidak kembali lagi tetempat semula.
Pencabangan relatif menggunakan perintah SJMP sejauh – 128 (mundur) atau +127(maju).
Pencabangan bersyarat
Pencabangan bersyarat artinya lompat kealamat tertentu jika persyaratannya dipenuhi.
Instruksi yang di gunakan adalah CJNE<dest-byte>, <src-byte>,rel. pengertiannya compare destination byte and source byte, jump if not equal along rel (aktif)source byte, jump if not equal along rel (aktif)
Contoh:
Mulai:CJNE A,#040h, Label1 ; Bandikan A dengan 40h, jika tidak sama lompat
ke label1CJNE A,P2, Label1 ; Bandikan A dengan P2, jika tidak sama lompat
ke label1Label1
_____________
Perintah DJNZ (Decriment Jump if not Zero) pengertiannya adalah data di register di kurang satu jika hasilnya nol kembali ke ke program utama.Instruksi DJNZ di gunakan untuk counter atau pencacah.
Contoh:
Mulai:MOV Ro, #2 ; isi R0 dengan 2MOV R1,# 20H ; isi R1 dengan 20h
Putar:MOV @R1, #BBh ; isis memori R1 dengan BBhINC R1 ; R1=R!+1DJNZ R0,Putar ; R0=R0-1 ≠0, kembali putarSJM$ ;selesai
No Operation
Perintah NOP memerintahkan mikrokontroler 89C51 untuk menunda menjalankan program.Perintah NOP membutuhkan waktu 1 µs, sehingga perintah ini dapat di gunakan untuk delay.
SOAL-SOALSOAL-SOAL
1. Intruksi dalam bahasa assembler yang identik dengan shift register:
a. MOV c. CALLb. Rotate d. LJUMP
2. Intruksi MOV dalam bahasa assembler mikrokontroler berfungsi dalam proses….:
a. Interuptb. Timer/conterc. Operasi logikad. Transper data
2. Intruksi MOV dalam bahasa assembler mikrokontroler berfungsi dalam proses….:
a. Interuptb. Timer/conterc. Operasi logikad. Transper datad. Transper data
3. Perintah untuk menaikan isi stack pointer adalah …..:a. PUSHb. INTc. CALLd. ADD
3. Perintah untuk menaikan isi stack pointer adalah …..:a. PUSHb. INTc. CALLd. ADD
4. Perintah/instruksi untuk memanggil subrutin adalah …..: a. CALLb. LCALLc. A dan B benard. A dan B Salah
4. Perintah/instruksi untuk memanggil subrutin adalah …..: a. CALLb. LCALLc. A dan B benard. A dan B Salah
5. Intruksi NOP bisa di gunakan untuk ….:a. Interupsib. Delayc. Pollingd. Semua jawaban salah
5. Intruksi NOP bisa di gunakan untuk ….:a. Interupsib. Delayc. Pollingd. Semua jawaban salah
1. Intruksi dalam bahasa assembler yang identik dengan shift register:
a. MOV c. CALLb. Rotate d. LJUMP