IC 89S51 adalah salah satu ic mikro kontroller yang cocok untuk belajar program bagi pemula. Pemrogramannya cukup simpel dan mudah dimengerti serta banyak referensinya. Bahasa yang sering dipakai untuk pemrograman IC 89S51 adalah bahasa assembler (meskipun kini sudah banyak juga yang memakai bahasa c).
Bahasa assembler adalah instruksi dasar mesin pada mikro kontroller. Bahasa ini berupa kode perintah program dan nilai heksa desimal yang dipisahkan dengan spasi. Bahasa assembler pada pemrograman IC 89S51 mengacu pada instruksi set dari atmel selaku produsen IC tersebut.
Contoh bahasa assembler :
MOV R1,#F7h
CALL TUNDA
Instruksi MOV R1,#F7h berarti meemberi nilai heksa desimal sebesar F7 pada R1. Jadi setelah instruksi ini maka R1 bernilai F7h.
Instruksi CALL TUNDA berarti alur program menuju ke label TUNDA dan akan kembali setelah ada perintah RET
Berikut ini beberapa instruksi assembler yang sering dipakai :
Instruksi | Penjelasan | Contoh |
MOV | Memindahkan/mengisi nilai pada suatu register atau akumulator | MOV R1,#F7h |
MOVC | Memindahkan/mengisi nilai dari lookup table ke akumulator | MOVC A,@A+DPTR |
CALL | Memindahkan alur program ke label setelah call | CALL TUNDA |
ADD | Menjumlahkan akumulator dengan nilai byte | ADD A,#5Bh |
ADDC | Menjumlahkan akumulator dengan nilai byte disertai carry | ADDC A,#87h |
SUBB | Mengurangi akumulator dengan nilai byte | SUBB A,#45h |
INC | Ditambah satu | INC A |
DEC | Dikurangi satu | DEC A |
ANL | Operasi logika AND | ANL A,#77h |
ARL | Operasi logika OR | ORL A,#77h |
CPL | Operasi logika NOT | CPL A |
SETB | Membuat nilai bit menjadi satu | SETB TR1 |
CLR | Membuat nilai bit menjadi nol | CLR TR1 |
RL | Nilai byte digeser ke kiri | RL A |
RLC | Nilai byte digeser ke kiri melibatkan carry | RLC A |
RR | Nilai byte digeser ke kanan | RR A |
RRC | Nilai byte digeser ke kanan | RRC A |
SWAP | Menukar 4bit (nible) dalam satu byte | SWAP A |
JB | Lompat jika nilai bit=1 | JB P1.1,TERUS |
JNB | Lompat jika nilai bit=0 | JNB TF1,LANJUT |
JC | Lompat jika nilai carry=1 | JC TERUS |
JNC | Lompat jika nilai carry=0 | JNC LANJUT |
JZ | Lompat jika nilai akumulator=1 | JZ TERUS |
JNZ | Lompat jika nilai akumulator=0 | JNZ LANJUT |
DJNZ | Kurangi satu lalu lompat ke label jika nilai belum sama dengan nol | DJNZ R1,ULANG |
CJNE | Bandingkan isi akumulator dengan nilai byte lalu lompat ke label jika nilainya tidak sama | CJNE A,#77h,BEDA |
JMP | Lompat ke label. selain JMP ada lagi instruksi lompat yaitu AJMP, LJMP dan SJMP | JMP START |
PUSH | Memindahkan nilai ke register penampung | PUSH R1 |
POP | Mengambil nilai dari register penampung | POP R1 |
ORG | Inisialisasi memori awal program, biasanya diisi #00h | ORG 00h |
END | Akhir program | END |
0 komentar:
Posting Komentar