Thursday, 11 December 2014

INSTRUKSI MCS-51



Sebuah mikrokontroler tidak akan bekerja bila tidak diberikan program kepadanya. Program tersebut memberitahu mikrokontroler tentang apa yang harus dia lakukan.

Mikrokontroler MCS-51 memiliki 256 perangkat instruksi. Seluruh instruksi dapat dikelompokkan dalam 4 bagian yang meliputi instruksi 1 byte sampai 4 byte. Apabila frekuensi clock mikrokontroler yang digunakan adalah 12 MHz, kecepatan pelaksanaan instruksi akan bervariasi dari 1 sampai 4 mikrodetik.

Instruksi yang dimiliki oleh mikrokontroler MCS-51 pada dasarnya digolongkan menjadi;
·           Intruksi operasi aritmatika
·           Operasi logika
·           Transfer data
·           Operasi manipulasi boolean
·           Perintah percabangan

Aturan penulisan bahasa assembly-nya tidak jauh berbeda dengan bahasa assembly untuk IBM PC. Beberapa intruksi populer dapat dijelaskan pada bagian di bawah ini.


1.                  ADD (Add Immediate Data)
Operand          : A       akumulator
                        : data   -256 <= data <= +255
Format             : ADD A, #data
Operasi                        : (A) <- (A) + data
Keterangan     : intruksi ini menambah 8 bit data langsung ke dalam  isi akumulator dan menyimpan hasilnya pada akumulator

2.                  AJMP (Absolute Jump within 2K byte Page)
Operand          : Alamat kode
Format             : AJMP alamat kode
Operasi                        : (PC) <- (PC) + 2
                          (PC) 0 – 10 <- page address
Keterangan     : intruksi meletakan bagian bawah 11 bit dari pencacah program dengan 11 bit alamat yang dikodekan

3.                  CALL (Generic Call)
Operand          : Alamat kode
Format             : CALL alamat kode
Operasi                        :
Keterangan     : instruksi ini akan ditranslasikan ke ACALL atau LCALL



4.                  CJNE (Compare Immediate Data to Accumulator) Jump if Not Equal
Operand          : A       akumulator
                        : data   -256 <= data <= +255
                        : alamat kode
Format             :CJNE A, #data, alamat kode
Operasi                        : (PC) <- (PC) + 3
                        : Jika (A) <> data, maka (PC) <- (PC) + offset relatif
                        : Jika (A) < data, maka (C) <- 1,
                        : lainnya (C) <- 0
Keterangan     : intruksi ini akan membandingkan data langsung dengan isi akumulator. Apabila tidak sama, eksekusi akan menuju alamat kode. Bila sama, instruksi selanjutnya yang akan dijalankan. Jika data langsung lebih besar dari isi alamat data tertentu, carry flag akan di-set menjadi 1.

5.                  CLR (Clear Accumulator)
Operand          : A       akumulator
Format             : CLR A
Operasi                        : (A) <- 0
Keterangan      : intruksi ini akan me-reset akumulator menjadi 00H
Contoh                        : CLR A

6.                  CLR (Clear Bit)
Operand          : alamat bit      0<= alamat bit <= 255
Format             : CLR alamat bit
Operasi                        : Alamat  <- 0
Keterangan      : intruksi akan me-reset alamat bit menjadi 00H
Contoh                        : CLR 40.5


7.                  DA (Decimal Adjust Accumulator)
Operand          : A       akumulator
Format             : DA A
Operasi                        :
Keterangan     :intruksi ini mengatur isi akumulator ke padanan BCD nya, setelah penambahan dua angka BCD. Jika auxiliary carry flag 1 atau isi nibble bawah (bit 0-3) dari akumulator lebih tinggi dari 9, isi akumulator akan ditambah 6. Jika carry flag di set sebelum atau sesudah penambahan atau isi nibble atas (bit 4-7) lebih tinggi dari 9, isi akumulator akan di tambah 60H.

8.                  DEC (Decrement Accumulator)
Operand          : A       akumulator
Format             : DEC A
Operasi                        : (A) <- (A) - 1
Keterangan     : intruksi akan mengurangi isi akumulator dengan 1. Hasilnya disimpan dalam akumulator.
Contoh            : DEC A

9.                  DJNZ (Decrement Register And Jump If Not Zero)
Operand          : Rr      register 0<=r<=7
                        : Alamat kode
Format             : DJNZ Rr, alamat kode
Operasi                        : (PC) <- (PC) + 2
                        : (Rr) <- (Rr) -1
                        : Jika (Rr) <> 0, maka (PC) <- (PC) + offset relatif
Keterangan     : instruksi ini mengurangi registerr dengan 1 dan menempatkan hasilnya pada register tertentu. Jika hasilnya sudah 0, instruksi selanjutnya yang akan dieksekusi. Jika belum 0, eksekusi akan menuju ke alamat kode.

10.              JB (Jump If Bit is Set)
Operand          : Alamat bit     0 <= alamat bit <= 255
                        : Alamat kode
Format             : JB alamat bit, alamat kode
Operasi                        : (PC) <- (PC) + 3
                        : Jika (alamat bit) = 1, maka (PC) <- (PC) + offset relatif
Keterangan     : Instruksi ini akan menguji satu alamat bit. Jika berisi 1, eksekusi akan menuju alamat kode. Jika tidak, instruksi selanjutnya akan dieksekusi. Pencacah program akan dinaikkan pada instruksi selanjutnya. Jika pengujian berhasil, offset relatif akan ditambahkan ke pencacah program yang telah dinaikkan dan instruksi pada alamat ini akan dieksekusi.

11.              JC (Jump if Carry is Set)
Operand          : Alamat kode
Format             : JC alamat kode
Operasi                        : (PC) <- (PC) + 2
                        : Jika (PC) = 1, maka (PC) <- (PC) + offset relatif
Keterangan     : instruksi akan menguji isi carry flag. Jika berisi 1, eksekusi akan menuju alamat kode. Jika berisi 0, instruksi selanjutnya yang akan di eksekusi.

12.              JNB (Jump if Bit is Not Set)
Operand          : Alamat bit
                        : Alamat kode
Format             : JNB alamat bit, alamat kode
Operasi                        : (PC) <- (PC) + 3
                        : Jika (alamat bit) = 0, maka (PC) <- (PC) + offset relatif
Keterangan     : instruksi ini akan menguji suatu alamat bit. Jika isinya 0, eksekusi akan menuju ke alamat kode. Jika isinya 1, instruksi selanjutnya yang akan dieksekusi.

13.              JNC (Jump if Carry is Not Set)
Operand          : Alamat kode
Format             : JNC alamat kode
Operasi                        : (PC) <- (PC) + 2
                        : Jika (C) = 0, maka (PC) <- (PC) + offset relatif
Keterangan     : instruksi akan menguji isi carry flag. Jika isinya 0, eksekusi akan menuju ke alamat kode. Jika isinya 1, instruksi selanjutnya yang akan dieksekusi.

14.              LJMP (Long Jump)
Operand          : Alamat kode 0 <= alamat kode <= 65535
Format             : LJMP alamat kode
Operasi                        : (PC) <- alamat kode
Keterangan      : instruksi ini akan menuju alamat kode

15.              MOV (Move Immediate Data to Accumulator)
Operand          : A       akumulator
                        : Data  -256 <= data <= +255
Format             : MOV A, #data
Operasi                        : (A) <- data
Keterangan      : intruksi ini memindahkan  data 8 bit secara langsung ke akumulator
Contoh                        : MOV A, #02H

16.              MOV (Move Register to Accumulator)
Operand          : A       akumulator
                        : Rr      register 0 <= r <= 7
Format             : MOV A, Rr
Operasi                        : (A) <- (Rr)
Keterangan      : instruksi ini memindahkan isi register r ke akumulator
Contoh                        : MOV A, R0

17.              NOP (No Operation)
Operand          :
Format             : NOP
Operasi                        : tak ada operasi
Keterangan      : instruksi ini tidak melakukan apapun selam satu siklus
Contoh                        : NOP

18.              RET (Return from Subroutine) (Non Interrupt)
Operand          :
Format             : RET
Operasi                        : (PC high) <- ((SP))
                        : (SP) <- (SP) – 1
                        : (PC low) <- ((SP))
                        : (SP) <- (SP) - 1
Keterangan     :  intruksi akan dipakai untuk kembali dari subroutine ke alamat terakhir saat subroutine dipanggil

19.              RL (Rotate Accumulator Left)
Operand          : A       akumulator
Format             : RL A
Operasi                        :
Keterangan     : intruksi ini memutar setiap bit dalam akumulator satu posisi ke kiri. Bit paling besar (MSB) bergerak ke bit paling kecil (LSB).
Contoh                        : RL A

20.              RR (Rotate accumulator Right)
Operand          : A       akumulator
Format             : RR A
Operasi                        :
Keterangan     : intruksi ini memutar setiap bit dalam akumulator satu posisi ke kanan. Bit paling kecil (LSB) bergerak ke bit paling besar (MSB).
Contoh            : RR A

21.              SJMP (Short Jump)
Operand          : alamat data
Format             : SJMP alamat kode
Operasi                        : (PC) <- (PC) +2
                          (PC) <- (PC) + offset relatif
Keterangan      : intruksi ini akan menyebabkan operasi melompat ke alamat kode

No comments:

Post a Comment