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 Swap 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 Swap a,#FAh a ; iasi a dengan FAh ; isi a menjadi AFh Data Transper 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 Internal memory 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. Sebagian besar internal memory dan Special function Register dapat digunakan sebagai sumber Contoh: Kondisi awal isi RAM dengan alamat 30h adalah 40h, lokasi 40h berikan data berisikan 11110001b MOV MOV MOV MOV MOV MOV R0,# 30h A,@R R1,A B, @R1 @R1,P1 P3,P1 10h, P1 ; isi R0 dengan 30h ; A berisikan 40h ; Isikan data di alamat 40h ke R1 (R1 berikan 10h) ; isi B adalah 10h ; alamat 40h berisikan data 11110000b ; isi P3=P1= 11110000b Program memory MOVC merupakan perintah code bit, Mengopy isi memori program (dikatifkan dengan PSEN)di lokasi yang di berikan register dasar (DPTR atau PC). Contoh: MOV A,@A+DPTR MOV A,@R+PC Data memory 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. Instruksi MOVX menggunakan indirect addresing menggunakan register R0 atau R1. Contoh: MOV MOV A,@R0 @R1,A ; Copy data di memori R0 ke 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 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. Proses stack menggunakan register stac pointer (SP). Contoh instruksi di bawah menjelaskan proses stack MOV MOV SP, # 2Fh A, # AAh ; isi SP dengan 2Fh ; isi A dengan BBh MOV PUSH B, # BBh ACC ; isi B dengan CCh ; memori lokasi 30h berisikan AAh, SP=30h PUSH B cat: Compiler tidak mengenal PUSH A, tetapi PUSH ACC ; memori lokasi 31h berisikan CCh, SP=31h PUSH POP POP B ACC B ; memori lokasi 32h berisikan CCh, SP=32h ; A= memori lokasi 32hdengan isi data CCh, SP=31h ; B= memori lokasi 31hdengan isi data BBh, SP=30h PUSH Menaikan 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. Pertukaran data 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. Contoh: MOV MOV XHC A,#DDh B,#EEh A,B ; isi A dengan DDh ; isi B dengan EEh ; isi A=EE dan isi B=DDh XCHD adalah pertukaran nible rendah antara accumulator dengan memori denen cara penggalamatan tidak langsung. Instruksi ini tidak menyebabkan nible tinggi berubah. Contoh: MOV MOV A,#FDh 20h,#AAh ; isi A dengan FDh ; Alamat memori 20h berisikan ACh MOV XHCD R2,#20h A,#R2 ; isi R1 dengan 20h ; tukar nible antara A dengan memori di alamat 20h, A=ADh, dan memori dengan alamat 20h berisikan data= FCh Pencabangan Program Pencabangan program dalam bahasa assembler di perlukan untuk kebutuhan lompat kelokasi memori dengan alamat tertentu. Pencabangan program terdiri dari: Pelaksanaan subrutin Pencabangan bersyarat Pencabangan tanpa syarat 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 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>,<scrbyte>,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: ACALL LCALL ACALL dapat memanggil 2K (11 line), sedangkan LCALL dapat memanggil sampai 64 K 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. 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. Pencabangan tak bersyarat, biasanya tidak kembali lagi tetempat semula. Pencabangan relatif menggunakan perintah SJMP sejauh – 128 (mundur) atau +127(maju). Instruksi JMP @A+DPTR lompat absolut ke lokasi yang ditunjuk pada lokasi yang ditentukan oleh DPTR + isi A. Pencabangan bersyarat Pencabangan bersyarat artinya lompat kealamat tertentu jika persyaratannya dipenuhi. Instruksi yang di gunakan adalah CJNE<dest-byte>, <srcbyte>,rel. pengertiannya compare destination byte and source byte, jump if not equal along rel (aktif) Contoh: Mulai: CJNE CJNE A,#040h, Label1 A,P2, Label1 Label1 ______ _______ ; Bandikan A dengan 40h, jika tidak sama lompat ke label1 ; Bandikan A dengan P2, jika tidak sama lompat ke label1 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 2 MOV R1,# 20H ; isi R1 dengan 20h MOV INC DJNZ SJM$ @R1, #BBh R1 R0,Putar ; isis memori R1 dengan BBh ; R1=R!+1 ; R0=R0-1 ≠0, kembali putar ;selesai Putar: 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-SOAL 1. Intruksi dalam bahasa assembler yang identik dengan shift register: a. MOV c. CALL b. Rotate d. LJUMP 2. Intruksi MOV dalam bahasa assembler mikrokontroler berfungsi dalam proses….: a. Interupt b. Timer/conter c. Operasi logika d. Transper data 2. Intruksi MOV dalam bahasa assembler mikrokontroler berfungsi dalam proses….: a. Interupt b. Timer/conter c. Operasi logika d. Transper data 3. Perintah untuk menaikan isi stack pointer adalah …..: a. PUSH b. INT c. CALL d. ADD 3. Perintah untuk menaikan isi stack pointer adalah …..: a. PUSH b. INT c. CALL d. ADD 4. Perintah/instruksi untuk memanggil subrutin adalah …..: a. CALL b. LCALL c. A dan B benar d. A dan B Salah 4. Perintah/instruksi untuk memanggil subrutin adalah …..: a. CALL b. LCALL c. A dan B benar d. A dan B Salah 5. Intruksi NOP bisa di gunakan untuk ….: a. Interupsi b. Delay c. Polling d. Semua jawaban salah 5. Intruksi NOP bisa di gunakan untuk ….: a. Interupsi b. Delay c. Polling d. Semua jawaban salah 1. Intruksi dalam bahasa assembler yang identik dengan shift register: a. MOV c. CALL b. Rotate d. LJUMP