A. Bahasa Assembly di Mikrokontroler AT89C51
1. Set Instruksi pada Mikrokontroler AT89C51
Beberapa instruksi yang terdapat dalam pemprograman pada mikrokontroler jenis AT89C51 adalah sebagai berikut:
ADD
Instruksi untuk melakukan operasi penjumlahan pada dua buah data yang terdapat pada alamat register yang ditunjuk oleh instruksi.
ADDC
Instruksi melakukan operasi penjumlahan data pada dua buah data disertai penjumlahan data pada carry flag.
DEC
Instruksi ini melakukan operasi pengurangan dengan nilai 1 pada data yang terdapat pada alamat register yang ditunjuk oleh instruksi dan menyimpannya pada alamat register yang ditunjuk.
DIV
Instuksi ini melakukan operasi pembagian dua buah data dan menyimpan hasilnya pada alamat data yang ditunjuk.
INC
Instruksi ini akan melakukan operasi penjumlahan dengan nilai 1 pada data yang terdapat pada alamat register yang ditunjuk oleh instruksi dan menyimpannya pada alamat register tersebut.
MUL
Instruksi ini akan melakukan operasi perkalian data antara dua buah register.
SUBB
Instruksi ini melakukan operasi pengurangan data antara dua buah alamat register beserta dengan bit carry flag.
ANL
Instruksi ini melakukan operasi AND antara dua buah variabel dan menyimpannya pada alamat register yang ditunjuk.
ORL
Instruksi ini melakukan operasi OR antara dua buah variabel dan menyimpannya pada alamat register yang ditunjuk.
XRL
Instruksi ini melakukan operasi XOR antara dua buah variabel dan menyimpannya pada alamat register yang ditunjuk.
ACALL
Instruksi ini melakukan panggilan pada subrutin yang ditunjuk dengan jangkauan maksimal 2 Kbyte.
LCALL
Instruksi ini melakukan panggilan pada subrutin yang ditunjuk dengan jangkauan maksimal 64 Kbyte.
AJMP
Instruksi ini melakukan lompatan ke subrutin yang ditunjuk sejauh maksimum 11 bit dari alamat yang ditentukan.
LJMP
Instruksi ini melakukan lompatan ke subrutin yang ditunjuk sejauh maksimum 16 bit dari alamat yang ditentukan.
SJMP
Instruksi ini melakukan lompatan ke subrutin yang ditunjuk sejauh maksimum 128 byte dari alamat yang ditentukan.
CJNE
Instruksi ini melakukan perbandingan antara data sumber dengan data tujuan. Apabila datanya sama maka melanjutkan ke instruksi dibawahnya, bila data tidak sama maka lompat ke alamat yang dituju.
JB
Instruksi ini melakukan pengujian bit pada alamat bit yang ditunjuk. Jika data bit = 1 maka program akan melompat ke subrutin yang ditunjuk oleh instruksi. Namun bila data bit = 0 maka program akan menjalankan instruksi dibawahnya atau selanjutnya.
JBC
Instruksi ini melakukan pengujian bit pada alamat bit yang ditunjuk. Jika data bit tersebut bernilai 1 maka program berpindah ke subrutin yang ditunjuk oleh instruksi dan sekaligus mengubah kondisi dari data bit tersebut menjadi bernilai 0.
JC
Instruksi ini melakukan pengujian bit pada carry flag, jika data bit pada bernilai 1 maka program tersebut akan melompat ke subrutin yang ditunjuk oleh instruksi. Apabila data bit bernilai 0, program akan menjalankan instruksi dibawahnya atau selanjutnnya.
JNB
Instruksi ini melakukan pengujian bit pada alamat bit yang ditunjuk. Jika data bit bernilai 0 maka program akan melompat ke subrutin yang ditunjuk oleh instruksi. Apabila data bit bernilai 1 maka program akan menjalankan instruksi dibawahnya atau berikutnya.
MOV
Instruksi ini melakukan operasi pemindahan data dari alamat register satu ke alamat register lainnya.
SETB
Instruksi ini melakukan operasi set pada bit data pada alamat yang ditunjuk.
RET
Instruksi ini digunakan untuk kembali ke subrutin.
RET 1
Instruksi ini digunakan untuk kembali subrutin, tapi instruksi ini lebih diprioritaskan dari pada instruksi RET.
DJNZ
Instruksi ini melakukan operasi pengurangan pada alamat register serbaguna yang ditunjuk dengan nilai 1 dan akan lompat bila hasil dari pengurangan itu tidak sama dengan 0.
JNZ
Instruksi ini melakukan pengujian data pada akumulator. Jika datanya tidak sama dengan 00h maka program akan melompat ke subrutin yang ditunjuk. Namun jika data pada akumulator sama dengan 00h maka program menjalankan perintah dibawahnya.
2. Mode Pengalamatan
Mode pengalamatan ini secara garis besar terdiri dari pengalamatan tak langsung, pengalamatan langsung, Pengalamatan segera, pengalamatan bit, dan pengalamatan kode.
a. Pengalamatan tak langsung
Pada pengalamatan tak langsung, instruksi menunjuk pada sebuah register yang berisi alamat memori yang akan dituju. Pengalamatan tak langsung ini biasanya menggunakan simbol @ yang maksudnya menunjuk alamat memori yang terdapat pada register tersebut.
Contoh:
Dec @R0
Instruksi ini melakukan operasi pengurangan data dari alamat memori yang ditunjuk oleh register R0 dengan 1.
b. Pengalamatan langsung
Pengalamatan langsung pada sebuah operasi dilakukan dengan memberikan data secara langsung ke sebuah alamat register.
Contoh:
MOV A,R1
Instruksi ini melakukan operasi penambahan data pada register R1 dengan data pada akumulator dan hasilnya disimpan di akumulator.
c. Pengalamatan segera
Pengalamatan segera pada sebuah operasi dilakukan dengan memberikan data secara langsung tanpa perantara dari alamat tertentu. Biasanya pengalamatan segera diawali dengan tanda #.
Contoh:
MOV A,#10h
Instruksi ini melakukan operasi memindahkan data 10h ke dalam akumulator
d. Pengalamatan bit
Pengalamatan bit pada sebuah operasi digunakan untuk mengalamati suatu alamat secara bit.
Contoh:
SETB A.1
Instruksi ini memberi data bit pada alamat A.1 dari akumulator dengan nilai 1.
e. Pengalamatan Kode
Pada pengalamatan kode ini, proses pengalamatannya ditujukan langsung pada kode atau sering disebut sebagai rutin.
Contoh:
SJMP START
Instruksi ini melakukan lompatan ke subrutin start.
3. Operasi Aritmatika pada Set Instruksi
Operasi aritmatika sering kali digunakan pada set instruksi. Beberapa operasi aritmatika itu diantaranya operasi penjumlahan (+), pengurangan (-), pembagian (:), dan perkalian (x). Pada pemprograman assembler juga terdapat instruksi operasi aritmatika yaitu penjumlahan (ADD, ADDC), pengurangan (SUBB), perkalian (MUL), dan pembagian (DIV).
Contoh:
ADD A,#10h
Operasi penjumlahan akumulator dengan 10h dan disimpan pada akumulator.
4. Operasi Logika Pada Set Instruksi
Pada pemprograman assembler juga terdapat instruksi yang dapat digunakan untuk operasi logika diantaranya untuk logika AND adalah ANL, logika OR adalah ORL dan logika XOR adalah XRL.
Contoh:
ANL A,#10h
Data yang berada pada akumulator di-AND-kan dengan 10h lalu disimpan pada akumulator.