Post on 20-Oct-2015
Microcontroller:Bahasa Pemrograman Assembly 8051
Oleh:
Ali Sofyan KholimiUniversitas Muhammadiyah MalangE-Mail / IM: kholimi@gmail.comBlog: http://kholimi-id.blogspot.com
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
Tujuan Belajar
� Menjelaskan kegunaan dari register PSW (Program Status Word)
� Mendiskusikan alokasi ruang memori RAM di8051
� Menjelaskan diagram penggunaan stack di8051
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
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
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)
Instruksi MOV
MOV tujuan, sumber� menyalin data sumber
ke register tujuan.� instruksi memberitahu
CPU untukmemindahkan (padakenyataannya,MENYALIN) operand sumber ke operand tujuan.
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
Instruksi MOV
� Memindahkan sebuah nilai yang terlalu besar ke register akan menyebabkan errorMOV A, #7F2H– ILLEGAL: 7F2H>8 bits (FFH)
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
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
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
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
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
Struktur Bahasa Assembly
� Instruksi Bahasa Assembly language terdiri dari empat fields[label:] Mnemonic [operands] [;comment]
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
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
ROM Memory
� Tidak ada anggota keluarga 8051 yang dapat mengakses opcode lebih dari 64Kbytes – Program counter adalah register 16-bit
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
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
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
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
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
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
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
Program Status Word
Program Status Word
Instruksi Yang Berpengaruh PadaFlag PSW
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
Alokasi Ruang Memori RAM
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
Register Bank
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
Register Bank
� Contoh:SETB PSW.4 ;select bank 2MOV R0, #99H ;RAM location 10H has 99HMOV R1, #85H ;RAM location 11H has 85H
Stack
� Stack adalah bagian dari RAM yang digunakan oleh CPU untuk menyimpaninformasi sementara– Informasi ini dapat berupa data atau alamat
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
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
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
Stack
� Contoh:MOV R6, #25HMOV R1, #12HMOV R4, #0F3HPUSH 6PUSH 1PUSH 4
Stack
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
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
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