p6-k16asper

Upload: solich-ichin

Post on 07-Mar-2016

215 views

Category:

Documents


0 download

DESCRIPTION

P6-K16asper

TRANSCRIPT

BAB VIIPercobaan 6Pengenalan Bahasa Assembly

7.1 Tujuan Percobaan1. Memahami dasar-dasar pengoperasian microcontroller MCS512. Mengetahui instruksi dasar bahasa assembly3. Memahami penggunaan delay pada bahasa assembly4. Memahami pengaplikasian sederhana dari bahasa assembly

7.2 Dasar Teori7.2.1 Bahasa AssemblyBahasa rakitan atau lebih umum dikenal sebagai Assembly adalah bahasa pemrograman tingkat rendah yang digunakan dalam pemrograman komputer, mikroprosesor, pengendali mikro, dan perangkat lainnya yang dapat diprogram. Bahasa rakitan mengimplementasikan representasi atas kode mesin dalam bentuk simbol-simbol yang secara relatif lebih dapat dipahami oleh manusia. Berbeda halnya dengan bahasa-bahasa tingkat tinggi yang berlaku umum, bahasa rakitan biasanya mendukung secara spesifik untuk suatu ataupun beberapa jenis arsitektur komputer tertentu. Dengan demikian, portabilitas bahasa rakitan tidak dapat menandingi bahasa-bahasa lainnya yang merupakan bahasa pemrograman tingkat tinggi. Namun, bahasa rakitan memungkinkan programmer memanfaatkan secara penuh kemampuan suatu perangkat keras tertentu yang biasanya tidak dapat ataupun terbatas bila dibuat dengan menggunakan bahasa pemrograman tingkat tinggi.Pada bahasa rakitan, programmer umumnya menggunakan sebuah program utilitas yang disebut sebagai perakit (bahasa Inggris: assembler) yang digunakan untuk menerjemahkan kode dalam bahasa rakitan tersebut ke dalam kode mesin untuk perangkat keras tertentu. Sebuah perintah dalam bahasa rakitan biasanya akan diterjemahkan menjadi sebuah instruksi mnemonic dalam kode mesin, berbeda halnya dengan kompiler pada bahasa pemrograman tingkat tinggi yang menerjemahkan sebuah perintah menjadi sejumlah instruksi dalam kode mesin.Beberapa perangkat lunak bahasa rakitan terkenal biasanya menyediakan tambahan fitur untuk memfasilitasi proses pengembangan program, mengontrol proses perakitan, dan alat bantu pengawakutuan (debugging).

7.2.2 Mikrokontroler MCS-51Mikrokontroler yang termasuk dalam keluarga MCS-51 adalah mikrokontroler 8031 (versi 8051 tanpa EPROM), 8751, dan 8052. Keluarga MCS-51 memiliki tipe CPU, RAM, counter/timer, port paralel, dan port serial yang sama. Pada awal perkembangannya, mikroprosesor dibuat berdasarkan kebutuhan aplikasi yang lebih spesifik, dalam hal ini mikroprosesor dibagi menjadi beberapa jenis, yaitu:Mikroprosesor RISC (Reduced Instruction Set of Computing) dan CISC (Complex Instruction Set of Computing). Jenis ini yang digunakan untuk pengolahan informasi dengan perangkat lunak yang rumit dan digunakan untuk kebanyakan PC saat ini.Dalam hal aplikasi, mikrokontroler memiliki karakteristik sebagai berikut: Program relatif lebih kecil dari pada program PC Konsumsi daya kecil. Rangkaian sederhana dan kompak Murah, karena komponen yang digunakan sedikit Unit I/O yang sederhana, misalnya keypad, LCD, LED, latch. Lebih tahan terhadap kondisi lingkungan ekstrim misalnya temperatur, tekanan, kelembaban dan sebagainya.

Gambar 7.1 Microcontroller MCS-51

Perintah Dasar MCS51Perintah dasar yang biasa digunakan pada mikrocontroller MCS-51 adalah sebagai berikut:Tabel 7.1. Instruksi ArithmatikaMnemonicDeskripsiContoh

ADDPertambahanADD A,

ADDCPertambahan dengan carryADDC A,

SUBBPenguranganSUBB A,

INCPenambahan angka 1INC A

DECPengurangan angka 1DEC A

INC DPTRPenambahan angka 1 pada data pointerINC DPTR

MULPerkalianMUL AB

DIVPembagianDIV AB

DADecimal AdjustDA A

Tabel 7.2. Instruksi LogikaMnemonicDeskripsiContoh

ANLGerbang ANDANL A,B

ORLGerbang ORORL A,B

XRLGerbang XORXRL A,B

CLR0 kan CLR A

CPLKomplemenkan CPL A

RLGeser byte ke kiriRL A

RLCGeser byte ke kiri via CRLC A

RRGeser byte ke kananRR A

RRCGeser byte ke kanan via C RRC A

SWAPTuker nibble dari SWAP A

Tabel 7.3. Instruksi Data TransferMnemonicDeskripsiContoh

MovMemindahkan dataMov A,B

Mov DPTRMemindahkan data di data pointerMov DPTR, #data16

Push Simpan data ke memori stackPush direct

Pop Ambil data dari memori stackPop direct

XCHTukar byteXch

Tabel 7.4. Percabangan ProgramMnemonicDeskripsiContoh

AcallPanggil Acall addr11

LcallPanggil Lcall addr11

RETKembali dari subrutinRET

RETIKembali dari servis subrutinRETI

AjmpLompat ke alamat Ajmp addr11

SjmpLompat ke alamat Ljmp addr16

JZLompat ke rel bila A=0JZ rel

JNZLompat ke rel bila A0JNZ rel

DJNZDirect=direct-1, bila 0 lompat sejauh relDJNZ rel

NOPNo operationNOP

Tabel 7.5. Manipulasi dan Operasi BooleanMnemonicDeskripsiContoh

clr0 kan Clr A

Setb1 kan Setb P1

ANL C,bitC=C AND bitANL C,bit

ANL C,/bitC=C AND NOT bitANL C,/bit

ORL C,bitC=C OR bitORL C,bit

ORL C,/bitC=C OR NOT bitORL C,/bit

7.3 Rangkaian Percobaan7.3.1 Rangkaian Instruksi 8051 dan Delay pada Assembly

Gambar 7.2 Rangkaian instruksi dan Delay pada Assembly

7.4 Langkah Percobaan7.4.1 Instruksi 80511. Menjalankan program Proteus ISIS Professional 8.3 SP22. Memilih komponen dan merangkai sesuai Gambar 7.2, komponen-komponen yang dibutuhkan: Microcontroller 8051, 2 buah LED, dan 1 buah push button3. Menyusun kode program dengan cara meng-klik kanan pada komponen Microcontroller 8051 > Edit Source Code, kemudian memasukkan kode berikut:

led1 equ p1.0led2 equ p1.1pb equ p2.0

org 0000hjmp Startorg 0100h

Start: mov p1, #00000000b JNB pb,Nyala SJMP Start

Nyala: setb led1 JNB pb,Nyala2 SJMP Nyala Nyala2: CLR led1 setb led2 JNB pb,loop SJMP Nyala2loop: SJMP Start

END

4. Menjalankan simulasi lalu mengamati hasilnya5. Mengamati register yang berubah dengan cara mem-pause simulasi sesaat kemudian membuka menu Debug > 8051 CPU > Registers

6. Mengulangi langkah 4 sampai 6 namun coding diganti dengan variasi kode berikut ini:

led1 equ p1.0led2 equ p1.1pb equ p2.0

org 0000hjmp Startorg 0100h

Start: mov p1, #00000000b JNB pb,Nyala SJMP Start

Nyala: mov p1,#00000101b JNB pb,Nyala2 SJMP Nyala Nyala2: mov p1,#00001010b JNB pb,loop SJMP Nyala2loop: SJMP Start

END

7.4.2 Delay dengan Bahasa Assembler

1. Menjalankan program Proteus ISIS Professional 8.3 SP22. Memilih dan merangkai sesuai Gambar 7.2, komponen-komponen yang dibutuhkan: Microcontroller 8051, 2 buah LED, dan 1 buah push button

3. Menyusun kode program dengan cara meng-klik kanan pada komponen Microcontroller 8051 > Edit Source Code, kemudian memasukkan kode berikut:

Start: mov p1, #00000000b JNB pb,Hura2 SJMP StartHura2: setb led1 aCall delay Clr led1 setb led2 aCall delay mov p1,#00000000b aCall delay mov p1,#00000011b aCall delay JNB pb,loop SJMP Hura2 loop:

SJMP Start Delay: Mov pb,#04Hore1: Mov R1,#255Hore2: Mov R2, #255Hore3: DJNZ R2, Hore3 DJNZ R1, Hore2 DJNZ R0, Hore1Ret

4. Menjalankan simulasi lalu mengamati hasilnya5. Mengamati register yang berubah dengan cara mem-pause simulasi sesaat kemudian membuka menu Debug > 8051 CPU > Registers

7.5 Data Percobaan7.5.1 Instruksi 80517.5.1.1 Instruksi menggunakan SET BIT dan CLEAR7.5.1.1.1 Screenshot Simulasi

Gambar 7.3 Simulasi percobaaan Instruksi 8051 SETB dan CLEAR7.5.1.1.2 Listing Programled1 equ p1.0led2 equ p1.1pb equ p2.0

org 0000hjmp Startorg 0100h

Start: mov p1, #00000000b JNB pb,Nyala SJMP Start

Nyala: setb led1 JNB pb,Nyala2 SJMP Nyala Nyala2: CLR led1 setb led2 JNB pb,loop SJMP Nyala2loop: SJMP Start

END7.5.1.2 Instruksi menggunakan MOV7.5.1.2.1 Screenshot Simulasi

Gambar 7.4 Simulasi percobaaan Instruksi 8051 MOV

7.5.1.2.2 Listing Programled1 equ p1.0led2 equ p1.1pb equ p2.0

org 0000hjmp Startorg 0100h

Start: mov p1, #00000000b JNB pb,Nyala SJMP Start

Nyala: mov p1,#00000101b JNB pb,Nyala2 SJMP Nyala Nyala2: mov p1,#00001010b JNB pb,loop SJMP Nyala2loop: SJMP Start

END

7.5.2. Delay dengan Bahasa Assembler7.5.2.1 Screenshot Simulasi

Gambar 7.5 Simulasi percobaaan delay (kondisi awal)

Gambar 7.6 Simulasi percobaaan delay (1 detik setelah tombol ditekan)

Gambar 7.7 Simulasi percobaaan delay (2 detik setelah tombol ditekan)

Gambar 7.8 Simulasi percobaaan delay (3 detik setelah tombol ditekan)

Gambar 7.9 Simulasi percobaaan delay (4 detik setelah tombol ditekan)

7.5.2.2 Listing ProgramStart: mov p1, #00000000b JNB pb,Hura2 SJMP StartHura2: setb led1 aCall delay Clr led1 setb led2 aCall delay mov p1,#00000000b aCall delay mov p1,#00000011b aCall delay JNB pb,loop SJMP Hura2 loop:

SJMP Start Delay: Mov pb,#04Hore1: Mov R1,#255Hore2: Mov R2, #255Hore3: DJNZ R2, Hore3 DJNZ R1, Hore2 DJNZ R0, Hore1Ret

7.6 Analisa dan Pembahasan7.6.1 Instruksi 80517.6.1.1 Instruksi menggunakan SET BIT dan CLEAR7.6.1.1.1 Penjelasan Listing Program Instruksi menggunakan SET BIT dan CLEARled1 equ p1.0 ;set port1 pin0 sebagai led 1led2 equ p1.1 ;set port1 pin1 sebagai led 2pb equ p2.0 ;set port2 pin0 sebagai push button

org 0000h ;isi alamat awal 0000hjmp Start ;memanggil routine startorg 0100h ;memulai dari alamat 0100h

Start:; routine Start mov p1, #00000000b ;memindahkan nilai #00000000b ke p1 JNB pb,Nyala ;jika pb ditekan panggil routine Nyala SJMP Start ;jika tidak, panggil kembali routine Start

Nyala:; routine Nyala setb led1 ;mengeset bit untuk led1 menjadi 1 JNB pb,Nyala2 ;jika pb ditekan, panggil routine Nyala2 SJMP Nyala ;jika tidak, panggil kembali Nyala Nyala2:; routine Nyala2 CLR led1 ;menghapus bit untuk led1 menjadi 0 setb led2 mengeset bit untuk led2 menjadi 1 JNB pb,loop ;memanggil fungsi loop jika pb ditekan SJMP Nyala2 ;jika tidak, panggil kembali Nyala2

loop:;routine loop SJMP Start ;kembali ke Start

END;akhir program

7.6.1.1.2 Flowchart Program Instruksi menggunakan SET BIT dan CLEAR

Gambar 7.10 Flowchart program instruksi menggunakan SET BIT dan CLEAR

7.6.1.1.3 Analisa Screenshot Program

Gambar 7.11 Simulasi percobaaan Instruksi 8051 Instruksi SET BIT dan CLEAR

Pada screenshot program terlihat bahwa LED yang aktif adalah LED2 yang keluar dari PORT1 PIN0, yang juga ditandai dengan register yang aktif adalah P1 dengan nilai 02h dengan biner 00000010b. Sebetulnya ini tidak salah, namun idealnya ketika tombol ditekan sekali maka yang menyala seharusnya LED1 dari PORT1 PIN0. Hal ini dikarenakan adanya efek jeda pada push button karena begitu lambatnya jalan waktu di simulasi, sehingga microcontroller menganggap 2x inputan.

7.6.1.2 Instruksi menggunakan MOV7.6.1.2.1 Penjelasan Listing Program Instruksi menggunakan MOVled1 equ p1.0 ;set port1 pin0 sebagai led 1led2 equ p1.1 ;set port1 pin1 sebagai led 2pb equ p2.0 ;set port2 pin0 sebagai push button

org 0000h ;isi alamat awal 0000hjmp Start ;memanggil routine startorg 0100h ;memulai dari alamat 0100h

Start:; routine Start mov p1, #00000000b ;memindahkan nilai #00000000b ke p1 JNB pb,Nyala ;jika pb ditekan panggil routine Nyala SJMP Start ;jika tidak, panggil kembali routine Start

Nyala:; routine Nyala mov p1, #00000101b ;memindahkan nilai #00000101b ke p1 JNB pb,Nyala2 ;jika pb ditekan, panggil routine Nyala2 SJMP Nyala ;jika tidak, panggil kembali Nyala Nyala2:; routine Nyala2mov p1, #00001010b ;memindahkan nilai #00000101b ke p1 JNB pb,loop ;memanggil fungsi loop jika pb ditekan SJMP Nyala2 ;jika tidak, panggil kembali Nyala2

loop:;routine loop SJMP Start ;kembali ke Start

END;akhir program

7.6.1.2.2 Flowchart Program Instruksi menggunakan MOV

Gambar 7.12 Flowchart program instruksi menggunakan MOV

7.6.1.2.3 Analisa Screenshot Program

Gambar 7.13 Simulasi percobaaan Instruksi 8051 instruksi MOV

Hampir sama dengan Instruksi SET BIT dan CLEAR, pada screenshot program terlihat bahwa LED yang aktif adalah LED2 yang keluar dari PORT1 PIN0, yang juga ditandai dengan register yang aktif adalah P1 dengan nilai 0A (nilai binernya 00001010). Sebetulnya ini tidak salah, namun idealnya ketika tombol ditekan sekali maka yang menyala seharusnya LED1 dari PORT1 PIN0. Hal ini dikarenakan adanya efek jeda pada push button karena begitu lambatnya jalan waktu di simulasi, sehingga microcontroller menganggap 2 kali inputan.7.6.1.3 Perandingan intruksi MOV dan SETB CLR7.6.2 Delay dengan Bahasa Assembler7.6.2.1 Penjelasan Listing Programled1 equ p1.0 ;set port1 pin0 sebagai led 1led2 equ p1.1 ;set port1 pin1 sebagai led 2pb equ p2.0 ;set port2 pin0 sebagai push buttonorg 0000h ;isi alamat awal 0000hjmp Start ;memanggil routine startorg 0100h ;memulai dari alamat 0100h

Start:;mulai program mov p1, #00000000b ;memasukkan nilai #00000000b ke p1 JNB pb,Hura2 ;jika tombol ditekan panggil rotine Hura2 SJMP Start ;selain itu kembali ke startHura2: ;routine Hura2 setb led1 ;mengeset bit untuk led1 menjadi 1 aCall delay ;memanggil routine delay Clr led1 ;menghapus bit untuk led1 menjadi 0 setb led2 ;mengeset bit untuk led2 menjadi 1 aCall delay ;memanggil routine delay mov p1,#00000000b ;memasukkan nilai 00000000b ke p1 aCall delay ;memanggil routine delay mov p1,#00000011b ;memasukkan nilai 00000011b ke p1 aCall delay ;memanggil routine delay JNB pb,loop ;saat tombol ditekan panggil routine loop SJMP Hura2 ;selain itu kembali panggil routine Hura2 loop: ;routine loop

SJMP Start ;kembali ke start delay: Mov R0,#04 ;memasukkan nilai ke R0Hore1: Mov R1,#255 ;memasukkan nilai 255d ke R1Hore2: Mov R2, #255 ;memasukkan nilai 255d ke R2Hore3: DJNZ R2, Hore3 ;mengurangi nilai sampai ke 0, jika belum pindahkan Hore3 ke R2 DJNZ R1, Hore2 ;mengurangi nilai sampai ke 0, jika belum pindahkan Hore2 ke R1 DJNZ R0, Hore1 ;mengurangi nilai sampai ke 0, jika belum pindahkan Hore1 ke R0Ret ;kembali ke awal

END ;mengakhiri program

7.6.2.2 Flowchart Program Percobaan Delay

Gambar 7.14 Flowchart program percobaan Delay pada bahasa Assembler7.6.2.3 Analisa Screenshot Program

Gambar 7.15 Simulasi percobaaan delay (kondisi awal)

Gambar 7.16 Simulasi percobaaan delay (1 detik setelah tombol ditekan)

Gambar 7.17 Simulasi percobaaan delay (2 detik setelah tombol ditekan)

Gambar 7.18 Simulasi percobaaan delay (3 detik setelah tombol ditekan)

Gambar 7.19 Simulasi percobaaan delay (4 detik setelah tombol ditekan)

Pada gambar diatas, terlihat bahwa urutan nyala LED akan sesuai dengan siklus yang terdapat pada program, sesuai kapan push button di tekan. Akan tetapi untuk timing nyala ataupun mati nya LED tidak bisa persis sama dengan perhitungan nyata, dikarenakan waktu simulasi pada Proteus yang lebih lambat daripada waktu nyata.Delay yang terdapat pada percobaan ini ditentukan oleh suatu perhitungan. Perhitungan tersebut diambil dari coding pada bagian delay:Delay: Mov R0,#04Hore1: Mov R1,#255Hore2: Mov R2, #255Hore3: DJNZ R2, Hore3 DJNZ R1, Hore2 DJNZ R0, Hore1RetPada percobaan digunakan frekuensi 12 MHz. Sebagaimana oscillator internal MCS-51 pada umumnya menggunakan 1/12 dari frekuensi 12 MHz tersebut, sehingga nilainya sekitar 1 MHz. Dengan begitu setiap periodenya adalah 1 S. Melihat looping dari program di atas, didapat waktu delay adalah:

Nilai 1 * Nilai 2 * Nilai 3 * Machine Cycle *1s = delay4 x 255 x 255 x 4 * 1s = 1.040 second

DJNZ merupakan instruksi yang memiliki machine cycle sebanyak 2. Mengalikan setiap nilai di atas pada tiap register dan menghitung total machine cycle (Hore 3 tidak dihitung karena me looping dirinya sendiri). Sehingga delay yang didapat adalah sekitar 1 second. Namun karena pada simulasi waktu berjalan sangat lambat, waktu delay yang teramati sedikit lebih lama dari perhitungan.7.6 Kesimpulan

1. Pada percobaan istruksi menggunakan SETB dan CLEAR, input dan output direpresentasikan dalam logika HIGH atau LOW pada tiap port maupun pin.2. Pada percobaan instruksi menggunakan MOV, input dan output direpresentasikan dengan nilai biner, decimal, maupun hexadecimal pada alamat register yang bersangkutan.3. Untuk menyalakan LED dengan memberikan logika high pada PORT_led, baik dengan perintah MOV maupun SETB.4. Untuk mematikan LED dengan memberikan logika low pada PORT_led, baik dengan perintah MOV maupun CLR.5. Pada percobaan instruksi 8051, inputan seringkali dianggap lebih dari satu kali, hal ini dikarenakan adanya keterlambatan waktu pada simulasi.6. Pada percobaan delay, perintah delay tidak bisa langsung diinstruksikan pada program, melainkan harus diakali dengan membuat subroutine yang berisi looping dan operasi decremental dalam rentangan nilai tertentu.7. Instruksi DJNZ (decrement and jump if not zero) bekerja dengan menghitung mundur dari suatu nilai sampai nilai nya menjadi nol. Perintah ini memiliki machine cycle sebanyak 2.8. Waktu delay dalam percobaan dapat dihitung dengan menjumlah semua nilai decremental dikali jumlah total machine cycle. Waktu delay default nilainya adalah dalam microsecond (S). Waktu delay pada percobaan adalah 1.04 second.9. Perbedaan waktu delay perhitungan dan pada simulasi disebabkan karena jalan waktu di simulasi lebih lambat dari waktu nyata, sehingga terjadi keterlambatan.10. Pada percobaan aplikasi sederhana dengan MCS-51, digunakan SETB dan CLEAR agar mempermudah pengkodingan jika alamat PORT maupun PIN tidak diketahui. Penggunaan MOV akan mengefisienkan listing pemrograman asalkan mengetahui nilai maupun posisi PORT dan PIN dengan tepat.11. Pada semua percobaan, setiap nyala LED akan sesuai dengan nilai hexadecimal pada tiap register pada PORT yang bersangkutan.