Anda di halaman 1dari 20

TRAINING

MIKROKONTROLER AT89S51/52
DENGAN MODUL MA-51

SUDIRMAN,Ir.,M.Kom

SEKOLAH TINGGI TEKNOLOGI DUTA BANGSA


BEKASI
Dasar-dasar Pemrograman Bahasa Assembler

1. MOV,MOVC dan MOVX


a. Instruksi MOV digunakan untuk menyalin data antara 2 operand.
b. Instruksi MOVC digunakan untuk menyalin data yang terdapat pada
memeori program internal.
c. Instruksi MOVX digunakan untuk menyalin data yang terdapat pada
memori program eksternal.

Contoh Syntax Keterangan


MOV A,R1 Salin nilai R1 ke Accumulator
MOV A@R1 Salin isi lokasi yag ditunjuk R1 ke A
MOV A,P1 Salin data pada Port 1 ke Akumulator
MOV P1,A Salin data pada Akumulator ke Port 1
MOVC A,@X+DPTR Salin data int. yang ditunjuk DPTR ke A
MOVX A,@DPTR Salin data eks. Yang ditunjuk DPTR ke A
MOVX @DPTR,A Salin data akumulator ke lokasi yang ditunjuk DPTR

2. ADD dan SUBB


a. Instruksi ADD digunakan untuk melakukan operasi penjumlahan
akumulator dengan suatu operand dan hasilnya disimpan dalam
akumulator
b. Instruksi SUBB digunakan untuk melakukan operasi pengurangan
akumulator dengan suatu operand dan hasilnya disimpan dalam
akumulator.

Contoh Syntax Keterangan


ADD A,@#20 A = A + 20
ADD A,@R0 A = S + [ R0 }
ADD A,B A=A -B
ADD A,@10 A = A - 10

3. MUL AB dan DIV AB


a. Instruksi MUL AB digunakan untuk melakukan operasi perkalian antara
akumulator dengan register B. Hasilnya berupa data 16 bit dengan low
byte pada A dan high byte pada B.
Contoh:
Misal A = 50h ; B = A0h
MUL a,b
Hasil = 3200h, maka A = 00h dan B = 32h
b. Instruksi DIV AB digunakan untuk melakukan operasi pembagian antara
akumulator dengan register B. Hasilnya pembagian disimpan pada
akumulator dan sisa pembagian disimpan pada register B.

Misal :
A = FBh ; B = 12h

DIV a,b

Hasil = 0Dh , maka A = 0Dh B=11h


Karena FBh = 0D x 12 + 11

4. DEC dan INC


a. Instruksi DEC digunakan utnuk melakukan pengurangan sebesar satu pada
suatu operand.
b. Instruksi INC digunakan untuk melakukan penambahan sebesar satu pada
suatu operand.
Contoh Syntaks Keterangan
DEC A A=A–1
DEC @R0 [ R0 ] = [ R0 ] – 1
INC A A=A+1
INC DPTR DPTR = DPTR + 1

5. ORL, ANL dan CPL


a. Instruksi ORL digunakan untuk melakukan operasi OR antara dua
operand.
b. Instrukis ANL digunakan utnuk melakukan operasi AND antara dua
operand.
c. Instruksi CPL digunakan untuk melakukan operasi komplemen suatu
operand.

Syntaks Akumulator Register B Hasil


ORL A,B 0011 1010 1111 0000 1111 1010
ANL A,B 0011 1010 1111 0000 0011 0000
CPL A 0011 1010 1100 0101

6. RR,RL dan SWAP


a. Instruksi RR digunakan untuk melakukan operasi pergeseran kekanan
sebanyak 1 bit .
b. Instruksi RL digunakan utnuk melakukan operasi pergeseran ke kiri
sebanyak 1 bit.
c. Instruksi SWAP digunakan utnuk melakukan operasi pertukaran data low
nible dan high nible.
Syntaks Akumulator Hasil
RR A 0011 1010 0001 1101
RL A 0011 1010 0111 0100
SWAP A 0011 1010 1010 0011

7. SETB dan CLR


a. Instruksi SETB digunakan untuk memberikan logika 1 pada bit operand,
b. Instruksi CLR digunakan untuk memberikan logika 0 pada bit operand.
Contoh:
SETB p2.0
SETB acc.0
CLR p2.1
CLR acc.1

8. PUSH dan POP


a. Instruksi PUSH digunakan untuk menyimpan operand ke dalam stack.
b. Instruksi POP digunakan untuk mengembalikan nilai operand dari stack,
Contoh :
PUSH 7
PUSH 6
PUSH 5
MOV R7,#04H
LUPA: MOV R6,#0FFH
LUPB: MOV R5,#0FFH
DJNZ R5,$
DJNZ R6,LUPA
DJNZ R7,LUPB
POP 5
POP 6
POP 7

9. JMP,JB,JNB,JZ,JNZ dan CJNE


a. JMP (jump) digunakan untuk melakukan lpompatan ke suatu blok
program.
Contoh:

Org 00h
Start:
Jmp loop
Org 300h
Loop:
Setb p0.0
Clr p0.1
Sjmp loop
End
b. JB (Jump if Bit) dan JNB (Jump If Not Bit) digunakan untuk melakukan
lompatan ke suatu blok program jika nilai operand 1 (bit) atau 0 (Not bit).
Contoh JB:
Org 00h
Start:
Mov p0,#00h
Jb p0.0,Nyala
Sjmp Start
Nyala:
Setb p2.0
Sjmp Start
End
Contoh JNB:
Org 00h
Start:
Mov p0,#00h
Jnb p0.0,Nyala
Sjmp Start
Nyala:
Setb p2.0
Sjmp Start
End

c. JZ (Jump if Zero) dan JNZ (Jump If Not Zero) digunakan utnuk


melakukan lpmpatan ke suatu blok program jika nilai operand 0 (Zero)
atau <> 0 (Not Zero).

Contoh:
Org 00h
Utama:
Mov rl,#10
Jz rl,Nyala
Sjmp start
Nyala:
Setb p2.0
Jmp Utama
End
d. CJNE (Compare and Jump If Not Equal) digunakan utnuk melakukan
pembandingan dua operand dan lompat ke blok program lain jika tidak
sama.
Contoh:
Org 00h
Utama:
Mov a,#10
Tambah:
Inc a
Cjne a,#20,tambah
Setb p2.0
Sjmp utama
end

10. CALL dan RET


a. Instruksi CALL digunakan untuk memanggil prosedur tertentu dalam
program (subprogram).
b. Instruksi RET digunakan untuk mengembalikan ke baris program yang
melakukan CALL.

Contoh:
Org 00h
Kedip:
Setb p2.0
Call tunda
Clr p2.0
Call tunda
Sjmp kedip
Tunda:
Mov r7,#20h
La: mov r6,#0ffh
Lb: mov r5,#0ffh
Djnz r5,$
Djnz r6,lb
Djnz r7,la
Ret

End
PENGGUNAAN MODUL MA-51 UNTUK MIKROKONTROLER AT89S51/52

1.Gambar MA-51

Spesifikasi:
- Format file yang didukunng adalah *.hex
- Target In system Programmer (ISP)
- Kompatibel dengan Windows XP dan Vista
- Didukung oleh software ISP_Prog V1.3
- Tidak membutuhkan catu daya tambahan dari luar untuk mendownload
- Terdapat selector jumper untuk power board mikrokontroler Atmel jika membutuhkan
power dari USB
IC yang didukung antara lain:
1. At89S51
2. At89S52
3. At89S8252
4. At89S8253

Petunjuk instalasi ISP Programmer:

1..Install-lah driver USB yang ada pada CD (MA-51 Driver)

• Pilih driver sesuai dengan windows anda (Xp atau Vista)

2. Hubungkan MA-51 Usb Downloader pada computer


• Pada board akan terlihat lampu led orange akan menyala
• Pasanglah jumper jika hanya menggunakan power dari USB ke mikro At89S52 atau
lepaskan jumper jika menggunakan power dari luar (7-30Volt)
• Led hijau menyala menandakan Mikro At89S52 telah mendapatkan power
• Geser switch pada P (Program) untuk mendownload atau S (serial TTL) untuk
mengkomunikasikan Mikro ke Komputer dengan menggunakan USB to serial TTL

3. Kenalilah Port Com yang terdeteksi


Caranya: Liat di Device manager pada my computer anda

• My Computer klik kanan


• Pilih Device Manager _ Ports (COM & LPT)
• Lihat Prolific USB-to-Serial Comm port di com berapa?

Nb: Untuk merubah Com port klik dua kali pada prolific USB-to-Serial Comm Port
kemudian pilih menu Port settings _ Advanced, pilihlah com pada COM PORT Number
(sebaiknya pilih antara 1-6)
4. Jalankan program "ISP_PROG v1.3"

• Copy File “ISP_PROG v1.3” ke Komputer anda, kemudian jalankan


• Lakukan Settings untuk memilih Com Port terlebih dahulu <Options_Settings>

• Lakukan setting Device utk memilih Target Chip yang digunakan <Options_Device>
• Buka File dan masukan file *.Hex yang akan anda download <File_Load Flash File>

• Erase terlebih dahulu chip yang akan anda program (klik Chip Erase, kemudian klik
RUN)
• Kemudian pilih Write Flash untuk mendownload file program .Hex anda (klik Write
Flash,
kemudian klik RUN)
• Pilih Verify untuk mengecek ulang data yang telah terdownload.
• Pilih Lock Device untuk memproteksi data pada chip agar tidak dapat dibaca
programmnya
kembali. (program dapat ditulis kembali dengan meng-erase chip)
LANGKAH-LANGKAH MEMBUAT PROGRAM

1.Tulislah program dengan notpad.


2. Simpan program dengan extension .asm (contoh.asm)
Penyimpanan program harus satu FOLDER dengan ASM51.EXE, yang akan
Digunakan untuk meng-compile prorgam tadi.
3.Kembali ke prompt C: (lokasi asm51.exe dan program disimpan)
4.Lakukan COMPILE dengan cara : asm51 namaprogram.asm
Contoh : asm51 contoh.asm
5. Bila tidak ada error, maka akan diperoleh file. HEX
6. Download program dengan ISP

CONTOH PROGRAM

Program 1. Lampu kelompok genap nyala, kelompok ganjil padam.

$mod51
Org 00h
Mulai:
Clr p0.0
Setb p0.1
Clr p0.2
Setb p0.3
Clr p0.4
Setb p0.5
Clr p0.6
Setb p0.7

Program 2. Lampu LED menyala semua

$mod51
Org 00h
Mulai:
Mov p0,#0ffh
Sjmp Mulai
End
Program 3. Lampu LED menyala semua dan berkedip

$mod51
Org 00h
loop:
mov p0,#0ffh
call tunda
mov p0,#00h
call tunda
sjmp loop
tunda:
mov r7,#02h
lupa: mov r6,#0fah
lupb: mov r5,#0ffh
djnz r5,$
djnz r6,lupb
djnz r7,lupa
ret
end

Program 4. Menghidupkan LED ganjil/genap secara bergantian


$mod51
Org 00h
mulai:
mov p0,#01010101b
acall delay
mov p0,#10101010b
acall delay
sjmp mulai
delay:
mov r0,#0ffh
delay1:mov r1,#0ffh
delay2:mov r2,#02h
djnz r2,$
djnz r1,delay2
djnz r0,delay1
ret
end
Program 5. Lampu LED menyala dari arah tengah ke sisi kiri dan kanan, ,lalu
kembali ke Tengah.
$mod51
Org 00h
mulai:
mov p0,#11100111b
acall delay
mov p0,#11011011b
acall delay
mov p0,#10111101b
acall delay
mov p0,#01111110b
acall delay
mov p0,#10111101b
acall delay
mov p0,#11011011b
acall delay
sjmp mulai
delay:
mov r0,#0ffh
delay1:mov r1,#0ffh
delay2:mov r2,#02h
djnz r2,$
djnz r1,delay2
djnz r0,delay1
ret
end

Program 6. Lampu LED menyala bila port input ditekan (P2)


$mod51
Org 00h
Mulai:
Mov p0,p2
Sjmp Mulai
End
Program 7. Lampu LED menyala jika port input ditekan secara bergantian

$mod51
Org 00h
Mulai:
Mov a,p3
Cjne a,#0feh,terus
Mov p0,#0
Sjmp Mulai
Terus:
Cjne a,#0fdh,mulai
Mov p0,#0ffh
Sjmp mulai
End

Penggunaan JNB
org 00h

mulai:
jnb p2.0,ok
sjmp mulai
ok: mov p0,#00011110b
sjmp mulai
end

Penggunaan JNB
org 00h

mulai:
jnb p2.0,ok
jnb p2.1,ok2
jnb p2.2,ok3
sjmp mulai
ok: mov p0,#11111110b
sjmp mulai
ok2: mov p0,#11111101b
sjmp mulai
ok3: mov p0,#11111011b
sjmp mulai
end

Penggunaan JNB
org 00h

mulai:
jnb p2.0,ok
jnb p2.1,ok2
jnb p2.2,ok3
sjmp mulai
ok: mov p0,#11111110b
sjmp mulai
ok2: mov p0,#11111100b
sjmp mulai
ok3: mov p0,#11111000b
sjmp mulai

Penggunaan JNB
org 00h
mulai:
jnb p2.0,ok
jnb p2.1,ok2
jnb p2.2,ok3
jnb p2.3,ok4
sjmp mulai
ok: mov p0,#11111110b
sjmp mulai
ok2: mov p0,#11111100b
sjmp mulai
ok3: mov p0,#11111000b
sjmp mulai
ok4: mov p0,#11111111b
sjmp mulai
end

Program Motor Steeper


ORG 0000H
LJMP MULAI
ORG 0100H
MULAI: MOV A,#00010001B
MOV R0,#50
LOOP: MOV P0,A
CALL DELAY
RL A
DJNZ R0,LOOP
HERE: SJMP HERE
DELAY: MOV R5,#0FFH
MOV R6,#0FH
MOV R7,#01H
DLY: DJNZ R5,DLY
DJNZ R6,DLY
DJNZ R7,DLY
ret
end

Program Motor Steeper


ORG 0000H
LJMP MULAI
ORG 0100H
MULAI: MOV A,#00010001B
LOOP: MOV P0,A
CALL DELAY
RL A
SJMP LOOP
;----------------------------------
; DELAY SUBROUTINE
;----------------------------------
DELAY: MOV R5,#0FFH
MOV R6,#0FH
MOV R7,#01H
DLY: DJNZ R5,DLY
DJNZ R6,DLY
DJNZ R7,DLY
ret
end

Penggunaan JNB
org 00h
jnb p2.0,kiri
mov p0,#0feh
mov a,p0
kiri:
rl a
mov p0,a
call tunda
cjne a,#7fh,kiri
kanan:
rr a
mov p0,a
call tunda
cjne a,#0feh,kanan
sjmp kiri
tunda:
mov r7,#02h
lupa: mov r6,#0ffh
lupb: mov r5,#0ffh
djnz r5,$
djnz r6,lupb
djnz r7,lupa
ret
end

Program Motor Steeper:


ORG 0000H
LJMP MULAI
ORG 0100H
MULAI: MOV A,#00010001B
LOOP: MOV P0,A
CALL DELAY
RR A
SJMP LOOP
;----------------------------------
; DELAY SUBROUTINE
;----------------------------------
DELAY: MOV R5,#0FFH
MOV R6,#0FH
MOV R7,#01H
DLY: DJNZ R5,DLY
DJNZ R6,DLY
DJNZ R7,DLY
ret
end

Program Timer:
RATUSAN EQU 20
CACAH EQU -50000
ORG 0H
MOV TMOD,#01H
MULAI:
MOV P0,#000H
CALL TUNDA
MOV P0,#0FFH
CALL TUNDA
SJMP MULAI
TUNDA: MOV R1,RATUSAN
LAGI: MOV TH0,#HIGH CACAH
MOV TL0,LOW CACAH
SETB TR0
TUNGGU: JNB TF0,TUNGGU
CLR TF0
CLR TR0
DJNZ R1,LAGI
RET
END

Program Timer1
CACAH EQU -5
ORG 0H
MOV TMOD,#00001110B
LAGI: MOV TH0,#CACAH
MOV TL0,#CACAH
SETB TR0
CEK: JNB TF0,$
MOV P1,#00h

CLR TF0
CEK1: JNB TF0,$
MOV P1,#0FFH

CLR TF0
SJMP CEK
END

Bahan Acuan:
1. Manual MA-51 oleh Creative Vision
2. Agfianto, Mikrokontroler AT89S51

Anda mungkin juga menyukai