43
Microcontroller: Bahasa Pemrograman Assembly 8051 Oleh: Ali Sofyan Kholimi Universitas Muhammadiyah Malang E-Mail / IM: [email protected] Blog: http://kholimi-id.blogspot.com

Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Embed Size (px)

Citation preview

Page 1: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Microcontroller:Bahasa Pemrograman Assembly 8051

Oleh:

Ali Sofyan KholimiUniversitas Muhammadiyah MalangE-Mail / IM: [email protected]: http://kholimi-id.blogspot.com

Page 2: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Tujuan Belajar

� Mendaftar register dari mikrokontroler 8051� Memanipulasi data menggunakan register dan instruksi MOV� Mengkode instruksi sederhana dari bahasa Assembly 8051� Merakit dan menjalankan program 8051� Menjelaskan urutan kejadian yang terjadi pada 8051 sejak

dinyalakan� Memeriksa program pada kode ROM dari 8051� Menjelaskan peta memori ROM dari 8051� Menjelaskan detail dari eksekusi instruksi bahasa Assembly

8051� Menjelaskan tipe data 8051

Page 3: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Tujuan Belajar

� Menjelaskan kegunaan dari register PSW (Program Status Word)

� Mendiskusikan alokasi ruang memori RAM di8051

� Menjelaskan diagram penggunaan stack di8051

Page 4: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Register

� Register digunakan untuk menyimpaninformasi sementara, sedangkan informasibisa berupa:– byte data yang akan diproses, atau– alamat yang menunjuk ke data yang akan diambil

� Mayoritas register 8051 adalah register 8-bit– Hanya ada satu tipe data, 8 bit

Page 5: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Register

� Register 8 bit register ditampilkan dari MSB D7hingga LSB D0

– Dengan tipe data 8-bit, data apapun yang lebih besar dari 8 bit harus dipecah menjadi potongan 8-bit sebelum diproses

Page 6: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Register

� Register yang paling banyak digunakan– A (Accumulator)

� Untuk semua instruksi aritmetika dan logika– B, R0, R1, R2, R3, R4, R5, R6, R7– DPTR (data pointer), dan PC (program counter)

Page 7: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Instruksi MOV

MOV tujuan, sumber� menyalin data sumber

ke register tujuan.� instruksi memberitahu

CPU untukmemindahkan (padakenyataannya,MENYALIN) operand sumber ke operand tujuan.

Page 8: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Instruksi MOV

� Value (ditandai dengan #) dapat di-load secara langsung ke register A, B, atau R0 –R7– MOV A, #23H– MOV R5, #0F9H

� If nilai 0 hingga F dipindahkan ke register 8-bit, sisa bitnya diasumsikan semuanya nol.MOV A, #5– Hasilnya akan A = 05; dalam biner, A = 00000101

Page 9: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Instruksi MOV

� Memindahkan sebuah nilai yang terlalu besar ke register akan menyebabkan errorMOV A, #7F2H– ILLEGAL: 7F2H>8 bits (FFH)

Page 10: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Instruksi ADD

ADD A, sumber� ADD operand sumber ke accumulator� Instruksi ADD memberitahu CPU untuk

menambahkan byte sumber ke register A dan menaruh hasilnyadi register A

� Operand sumber dapat berupa register atau data, tapi operand tujuan harus selalu register A

– “ADD R4, A” dan “ADD R2, #12H” adalah invalid karena A haruslah menjadi operand tujuan dari setiap operasi arithmetic

Page 11: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Banyak Jalan Menuju UMM

MOV A, #25H; load 25H into A

MOV R2, #34H;load 34H into R2

ADD A, R2;;add R2 to Accumulator;(A = A + R2)

MOV A, #25H;load one operand ;into A (A=25H)

ADD A, #34H ;add the second ;operand 34H to A

Page 12: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Struktur Bahasa Assembly

� Pada masa-masa awal komputer, programmer mengkodekan dengan bahasa mesin yang terdiri dari 0 dan 1

– Membosankan, lama, dan mudah mendapatkan error� Bahasa Assembly yang menyediakan mnemonics

untuk instruksi kode mesin serta fitur-fitur lain dibuat.– Sebuah program bahasa Assembly terdiri dari satu seri

baris-baris dari instruksi-instruksi bahasa Assembly� Bahasa Assembly seringkali disebut sebagai bahasa

low-level– It melakukan “transaksi” secara langsung dengan struktur

internal CPU

Page 13: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Struktur Bahasa Assembly

� Instruksi bahasa assembly meliputi:– mnemonic (singkatan yang mudah diingat)

� perintah ke CPU, yang menyatakan hal apa yang harusdilakukan dengan item-item yang ada

– Kadang diikuti oleh satu atau dua Operand� Data yang akan dimanipulasi

Page 14: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Struktur Bahasa Assembly

� Suatu program bahasa Assembly berupa serangkaian statement– Instruksi bahasa Assembly

� Memberitahukan CPU, apa yang harus dilakukan

– Directive (atau instruksi-pseudo)� Memberikan arahan ke assembler

Page 15: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Struktur Bahasa Assembly

� Instruksi Bahasa Assembly language terdiri dari empat fields[label:] Mnemonic [operands] [;comment]

Page 16: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Program Counter

� Program counter menunjuk pada alamatinstruksi berikutnya yang akan dieksekusi– Sebagaimana CPU mengambil opcode dari ROM

program, program counter meningkat untukmenunjuk ke instruksi berikutnya

� Program counter lebarnya 16 bit– Ini berarti bahwa PC dapat mengakses program

dengan alamat 0000 hingga FFFFH, total kode64K byte

Page 17: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Program Counter

� Semua anggota 8051 dimulai dari alamat memori 0000 ketika dinyalakan– Program Counter memiliki nilai 0000– opcode pertama dibakar ke ROM di alamat

0000H, karena ini adalah tempat 8051 mencariinstruksi pertama ketika boot

– Kita bisa mengubahnya dengan statement ORGdi source program

Page 18: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

ROM Memory

� Tidak ada anggota keluarga 8051 yang dapat mengakses opcode lebih dari 64Kbytes – Program counter adalah register 16-bit

Page 19: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Tipe Data

� mikrokontroler 8051 hanya mempunyai satutipe data 8 bit– Ukuran masing-masing register juga 8 bit– Memecahkan masalah data yang lebih besar dari

8 bit (00 sampai FFH, atau 0-255 dalam desimal)adalah tugas para programmer

– tipe data dapat bernilai positif atau negatif

Page 20: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Directive Assembler

� direktif DB adalah direktif data yang paling banyak digunakan di assembler– digunakan untuk menentukan data 8-bit– Ketika DB digunakan untuk mendefinisikan data,

bilangan bisa berupa desimal, biner, hex, format ASCII

Page 21: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Directive Assembler

� ORG (origin)– direktif ORG digunakan untuk menunjukkan

alamat awal– Bilangan setelah ORG bisa berupa hex maupun

desimal� Jika nomor tidak diikuti oleh H, adalah desimal dan

assembler yang akan dikonversi ke hex

Page 22: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Directive Assembler

� END– Sebagai penunjuk kepada assembler akhir dari

source file assembler– direktif END adalah baris terakhir suatu Program

Assembly� Artinya bahwa kode apapun setelah direktif END ini

diabaikan oleh assembler

Page 23: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Directive Assembler

� EQU (equate)– Digunakan untuk mendefinisikan sebuah

konstanta tanpa menempati lokasi memori– direktif EQU tidak melakukan penyimpanan untuk

item data tetapi lebih pada nilai konstanta denganmenggunakan label data

– Ketika label muncul dalam program, label akandiganti dengan nilai konstanta

Page 24: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Directive Assembler

� EQU (equate)– Dissumsikan bahwa ada konstanta yang

digunakan dalam banyak tempat yang berbedadalam program, dan programmer ingin mengubahnilai seluruhnya� Dengan menggunakan EQU, seseorang dapat

mengubahnya sekali dan assembler yang akanmengubah seluruhnya

Page 25: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Program Status Word

� Register PSW juga disebut sebagai register penanda, adalah sebuah register 8 bit

– Hanya 6 bit yang digunakan� Yang empat adalah CY (carry), AC (auxiliary carry), P

(parity), dan OV (overflow)– Disebut penanda kondisi, yang berarti bahwa mereka

menunjukkan beberapa kondisi yang dihasilkan setelah sebuahinstruksi dieksekusi

– PSW3 dan PSW4 dirancang sebagai RS0 dan RS1, dandigunakan untuk mengubah bank

– Dua bit yang tidak terpakai dapat didefinisikan oleh pengguna

Page 26: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Program Status Word

Page 27: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Program Status Word

Page 28: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Instruksi Yang Berpengaruh PadaFlag PSW

Page 29: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Alokasi Ruang Memori RAM

� 8051 memiliki RAM sebesar 128 byte– Alamat sudah ditentukan antara 00 sampai 7FH

� 128 byte tersebut dibagi menjadi tiga kelompok yang berbeda sebagai berikut:

– Sebanyak 32 bytes dari lokasi 00 sampai 1F disisihkanuntuk register bank dan stack

– Sebanyak 16 byte dari lokasi 20H sampai 2FH disisihkanuntuk bit-alamat memori read/write

– Sebanyak 80 byte dari lokasi 30H sampau 7FH digunakanuntuk membaca dan menulis storage, disebut scratch pad

Page 30: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Alokasi Ruang Memori RAM

Page 31: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Register Bank

� 32 bytes dibagi menjadi 4 register bank di manamasing-masing bank memiliki 8 register, R0-R7

– Lokasi RAM 0-7 disisihkan untuk bank 0 dari R0-R7 manaR0 adalah RAM lokasi 0, R1 adalah RAM lokasi 1, R2 adalah RAM lokasi 2, dan seterusnya, sampai memorilokasi 7 yang menunjuk pada R7 bank 0

– Jauh lebih mudah untuk merujuk pada lokasi RAM dengannama-nama seperti R0, R1, dan seterusnya, daripadadengan lokasi memori

� Register bank 0 adalah default ketika 8051 dinyalakan

Page 32: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Register Bank

Page 33: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Register Bank

� Kita dapat beralih ke bank lain dengan menggunakan register PSW

� Bits D4 dan D3 dari PSW digunakan untukmemilih register bank yang dikehendaki

� Gunakan instruksi bit-addressable SETBdan CLR untuk mengakses PSW.4 dan PSW.3

Page 34: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Register Bank

� Contoh:SETB PSW.4 ;select bank 2MOV R0, #99H ;RAM location 10H has 99HMOV R1, #85H ;RAM location 11H has 85H

Page 35: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Stack

� Stack adalah bagian dari RAM yang digunakan oleh CPU untuk menyimpaninformasi sementara– Informasi ini dapat berupa data atau alamat

Page 36: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Stack

� Register yang digunakan untuk mengaksesstack disebut register SP (stack pointer)– Stack pointer di 8051 lebarnya hanya 8 bit, yang

berarti bahwa ia dapat mengambil nilai dari 00 sampai FFH

– Ketika 8051 diaktifkan, register SP mengandungnilai 07� lokasi RAM 08 adalah lokasi pertama yang mulai

digunakanuntuk stack oleh 8051

Page 37: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Stack

� Penyimpanan dari register CPU di stack disebut PUSH– SP menunjuk ke lokasi yang digunakan terakhir

stack– Ketika data di-push ke stack, nilai SP bertambah

satu� Berbeda dari kebanyakan mikroprosesor

Page 38: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Stack

� Untuk mengembalikan isi stack kembali kedalam sebuah register CPU disebut POP– Dengan setiap pop, byte bagian atas stack akan

disalin ke register yang ditetapkan oleh instruksidan stack pointerberkurang satu

Page 39: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Stack

� Contoh:MOV R6, #25HMOV R1, #12HMOV R4, #0F3HPUSH 6PUSH 1PUSH 4

Page 40: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Stack

Page 41: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Instruksi CALL

� CPU juga menggunakan stack untukmenyimpan alamat instruksi hanya di bawahinstruksi CALL– Ini adalah cara CPU dapat mengetahuo di mana

harus resume saat kembali dari subroutine yang dipanggil

Page 42: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Penambahan Nilai Stack Pointer

� Alasan SP bertambah nilainya setelah push adalah� Untuk memastikan bahwa stack tumbuh menuju

lokasi RAM 7FH, dari alamat terendah ke teratas� Memastikan bahwa stack tidak akan mencapai

bagian terbawah dari RAM dan berakibat habisnyaruang stack

� Jika stack pointer menurun setelah push– Kita akan menggunakan lokasi RAM 7, 6, 5, dll

milik R7 hingga R0 dari bank 0, bank register default

Page 43: Microcontroller-Bab03-Bahasa Pemrograman Assembly 8051.pdf

Konflik Antara Stack dan Bank 1

� Ketika 8051 diaktifkan, register bank 1 danstack menggunakan ruang memori yang sama– Kita dapat mengalokasikan kembali bagian lain

dari RAM ke stack