Anda di halaman 1dari 9

Microcontroller MCS-51 dan bahasa assembly

Microcontroller adalah pengontrol dalam ukuran micro, memiliki semua peralatan pokoknya
sebagai sebuah komputer dalam satu chip. Peralatan tersebut diantaranya pemroses (prosessor,
memori, input dan output). Kadangkala pada microcontroller ini beberapa chip digabungkan
dalam satu papan rangkaian. Perangkat ini sangat ideal untuk mengerjakan sesuatu yang bersifat
khusus, sehingga aplikasi yang diisikan ke dalam komputer ini adalah aplikasi yang bersifat

dedicated. Jika dilihat dari harga, microcontroller ini harga umumnya lebih murah dibandingkan
dengan komputer lainnya, karena perangkatnya relatif sederhana. Contoh alat ini diantaranya
adalah komputer yang digunakan pada mobil untuk mengatur kestabilan mesin, alat untuk
pengatur lampu lalu lintas.

Gambar 1 Diagram Mikrokontroller MCS51

Pada Microcontroller AT89C51 termasuk dalam keluarga MCS-51TM dari intel. Sebuah
microcontroller tidak dapat bekerja bila tidak diberi program kepadanya. Program tersebut
memberitahu microcontroller apa yang harus dilakukan. Salah satu keunggulan dari AT89C51
adalah dapat diisi ulang dengan program lain sebanyak 1000 kali pengisian. Intruksi-intruksi
perangkat lunak berbeda untu masing-masing jenis microcontroller. Intruksi-intruksi hanya
dapat dipahami oleh jenis microcontroller yang bersangkutan. Intruksi-intruksi tersebut dikenal
sebagai bahasa pemograman system microcontroller.Sebuah microcontroller tidak dapat
memahimi intruksi-intruksi yang berlaku pada mircrocontroller lain. Sebagai contoh,
microcontroller buatan intel dengan microcontroller buatan Motorola memiliki perangkat
intruksi yang berbeda.

A. Bahasa Assembly

Bahasa Assembly adalah bahasa komputer yang kedudukannya di antara bahasa mesin dan
bahasa level tinggi misalnya bahasa C atau Pascal. Bahasa C atau Pascal dikatakan sebagai
bahasa level tinggi karena memakai kata-kata dan pernyataan yang mudah dimengerti manusia,
meskipun masih jauh berbeda dengan bahasa manusia sesungguhnya. Bahasa mesin adalah
kumpulan kode biner yang merupakan instruksi yang bisa dijalankan oleh komputer. Sedangkan
bahasa Assembly memakai kode Mnemonic untuk menggantikan kode biner, agar lebih mudah
diingat sehingga lebih memudahkan penulisan program.

Program yang ditulis dengan bahasa Assembly terdiri dari label; kode mnemonic dan lain
sebagainya, pada umumnya dinamakan sebagai program sumber (Source Code) yang belum bisa
diterima oleh prosesor untuk dijalankan sebagai program, tapi harus diterjemahkan dulu menjadi
bahasa mesin dalam bentuk kode biner. Program sumber dibuat dengan program editor biasa,
misalnya Note Pad pada Windows atau SideKick pada DOS, selanjutnya program sumber
diterjemahkan ke bahasa mesin dengan menggunakan program Assembler.

B. Konstruksi Program Assembly

Program sumber dalam bahasa Assembly menganut prinsip 1 baris untuk satuperintah, setiap
baris perintah tersebut bisa terdiri atas beberapa bagian (field), yakni bagian Label, bagian
mnemonic, bagian operand yang bisa lebih dari satu dan terakhir bagian komentar.

Untuk membedakan masing-masing bagian tersebut dibuat ketentuan sebagian berikut:

1. Masing-masing bagian dipisahkan dengan spasi atau TAB, khusus untuk operand yang
lebih dari satu masing-masing operand dipisahkan dengan koma.
2. Bagian-bagian tersebut tidak harus semuanya ada dalam sebuah baris, jika ada satu
bagian yang tidak ada maka spasi atau TAB sebagai pemisah bagian tetap harus ditulis.
3. Bagian Label ditulis mulai huruf pertama dari baris, jika baris bersangkutan tidak
mengandung Label maka label tersebut digantikan dengan spasi atau TAB, yakni sebagai
tanda pemisah antara bagian Label dan bagian mnemonic.

Label mewakili nomor memori-program dari instruksi pada baris bersangkutan, pada saat
menulis instruksi JUMP, Label ini ditulis dalam bagian operand untuk menyatakan
nomor memori-program yang dituju. Dengan demikian Label selalu mewakili nomor
memori-program dan harus ditulis dibagian awal baris instruksi. Disamping Label
dikenal pula Symbol, yakni satu nama untuk mewakili satu nilai tertentu dan nilai yang
diwakili bisa apa saja tidak harus nomor memori-program. Cara penulisan Symbol sama
dengan cara penulisan Label, harus dimulai di huruf pertama dari baris instruksi.
Mnemonic (arttinya sesuatu yang memudahkan diingat) merupakan singkatan perintah,
dikenal dua macam mnemonic, yakni manemonic yang dipakai sebagai instruksi
mengendalikan prosesor, misalnya ADD, MOV, DJNZ dan lain sebagainya.

Ada pula mnemonic yang dipakai untuk mengatur kerja dari program Assembler
misalnya ORG, EQU atau DB, mnemonis untuk mengatur kerja dari program Assembler
ini dinamakan sebagai ‘Assembler Directive’. Operand adalah bagian yang letaknya di
belakang bagian mnemonic, merupakan pelangkap bagi mnemonic. Kalau sebuah instrksi
di-ibaratkan sebagai kalimat perintah, maka mnemonic merupakan subjek (kata kerja)
dan operand merupakan objek (kata benda) dari kalimat perintah tersebut. Tergantung
pada jenis instruksinya, operand bisa berupa berbagai macam hal. Pada instruksi JUMP
operand berupa Label yang mewakili nomor memori-program yang dituju misalnya
LJMP Start, pada instruksi untuk pemindahan/pengolahan data, operand bisa berupa
Symbol yang mewakili data tersebut, misalnya ADD A,#Offset. Banyak instruksi yang
operandnya adalah register dari prosesor, misalnya MOV A,R1. Bahkan ada pula
instruksi yang tidak mempunyai operand, misalnya RET. Komentar merupakan bagian
yang sekedar sebagai catatan, tidak berpengaruh pada prosesor juga tidak berpengaruh
pada kerja program Assembler, tapi bagian ini sangat penting untuk keperluan
dokumentasi.

C. Tipe-tipe instruksi

Instruksi pada mikrokontroler AT89S51 dapat dikelompokan menjadi 3, yaitu:

1. Instruksi Transfer Data

Kelompok instruksi ini digunakan untuk memindahkan data antara:

a. Register ke register
b. Memori ke memori
c. Register ke memori
d. Antarmuka ke register
e. Antarmuka ke antarmuka
Contoh:
Mov A,R1 memindahkan isi register ke accumulator A

Jadi pengalamatan data atau pengambilan data dari suatu port hanya menggunakan instruksi
mov.

2. Instruksi Aritmatika
Instruksi Aritmatika meliputi penambahan (add), pengurangan (subb), perkalian (mul),
dan pembagian (div)
a. ADD Penambahan ini akan menjumlahkan suatu data dengan isi accumulator.
Penambahan hanya melibatkan register accumulator
ADD : (A) (A) + data
b. INC Proses increment merupakan proses penambahan satu pada isi suatu register atau
memori.
INC A : (A) (A) + 1

Selain increment ada juga decrement (DEC) yang merupakan kebalikannya.


3. Instruksi Percabangan

Instruksi ini akan melakukan percabangan ke suatu alamat. Instruksi ini terdiri atas dua
bagian, yaitu percabangan dengan syarat dan percabangan tanpa syarat.

a. Percabangan dengan syarat


 CJNE -> Instruksi CJNE (compare and jump if not equal) membandingkan dua
nilai yang disebut dan MCS akan melompat ke memori program yang dituju kalau
kedua nilai tersebut tidak sama.
 DJNZ -> Instruksi DJNZ (decrement and jump if not zero) merupakan instruksi yang
akan mengurangi 1 nilai register serba guna (R0 sampai R7)atau memori data dan akan
melompat ke memori program yang dituju jika setelah pengurangan belum dihasilkan 0
 JB/ JNB/ JNC Instruksi JB (jump on bit set), JNB (jump on bit nol set), JNC (jump on
bit set then clear) merupakan instruksi bersyarat yang memerlukan kondisi tertentu.
b. Percabangan tanpa syarat
 SJMP ->Instruksi ini akan menuju ke alamat kode yang telah dituju
 CALL -> Instruksi ini akan memanggil subrutin pada alamat yang telah ditentukan
atau yang sudah terwakili.

D. PENJELASAN FUNGSI PIN MIKROKONTROLER MCS-51

IC mikrokontroler dikemas (packaging) dalam bentuk yang berbeda. Namun pada dasarnya
fungsi kaki yang ada pada IC memiliki persamaan. Gambar salah satu bentuk IC seri
mikrokontroler MCS-51 dapat dilihat berikut.
Gambar 2 Susunan PIN salah satu mikrokontroler keluarga MCS51

Berikut adalah penjelasan fungsi tiap kaki yang biasa ada pada seri mikrokontroler MCS-51.

A. Port 0

Merupakan dual-purpose port (port yang memiliki dua kegunaan). Pada desain yang minimum
(sederhana) digunakan sebagai port I/O (Input/Output). Pada desain lebih lanjut pada
perancangan dengan memori eksternal digunakan sebagai data dan address yang di-multiplex.
Port 0 terdapat pada pin 32-39.

B. Port 1

Merupakan port yang hanya berfungsi sebagai port I/O, kecuali pada IC 89S52 yang
menggunakan P1.0 dan P1.1 sebagai input eksternal untuk timer ketiga (T3). Port 1 terdapat pada
pin 1-8.

C. Port 2

Merupakan dual-purpose port. Pada desain minimum digunakan sebagai port I/O. Pada desain
lebih lanjut digunakan sebagai high byte dari address. Port 2 terdapat pada pin 21-28.

D. Port 3

Merupakan dual-purpose port. Selain sebagai port I/O juga mempunyai fungsi khusus yang
ditunjukkan pada tabel berikut.

PIN ( FUNGSI KHUSUS )


a. P3.0 RXD ( serial input port )
b. P3.1 TXD ( serial output port )
c. P3.2 _INT0 ( external interrupt 0 )
d. P3.3 _INT1 ( external interrupt 1 )
e. P3.4 T0 ( timer 0 external input )
f. P3.5 T1 ( timer 1 external input )
g. P3.6 _WR ( external data memory write strobe )
h. P3.7 _RD ( external data memory read strobe )

E. PSEN (Program Store Enable)

PSEN adalah kontrol sinyal yang mengijinkan untuk mengakses program (code) memori
eksternal. Pin ini dihubungkan ke pin OE (Output Enable) dari EPROM. Sinyal PSEN akan 0
pada tahap fetch (penjemputan) instruksi. PSEN akan selalu bernilai 0 pada pembacaan program
memori internal. PSEN terdapat pada pin 29.

F. ALE (Address Latch Enable)

ALE digunakan untuk men-demultiplex address dan data bus. Ketika menggunakan program
memori eksternal port 0 akan berfungsi sebagai address dan data bus. Pada setengah paruh
pertama memory cycle ALE akan bernilai 1 sehingga mengijinkan penulisan alamat pada register
eksternal dan pada setengah paruh berikutnya akan bernilai satu sehingga port 0 dapat digunakan
sebagai data bus. ALE terdapat pada pin 30.

G. EA (External Access)

Jika EA diberi masukan 1 maka mikrokontroler menjalankan program memori internal saja. Jika
EA diberi masukan 0 (ground) maka mikrokontroler hanya akan menjalankan program memori
eksternal (PSEN akan bernilai 0). EA terdapat pada pin 31.

H. RST (Reset)

RST pada pin 9 merupakan pin reset. Jika pada pin ini diberi masukan 1 selama minimal 2
machine cycle maka system akan di-reset dan register-register internal akan berisi nilai default
tertentu dan program kembali mengeksekusi dari alamat paling awal.

I. On-Chip Oscillator

Mikrokontroler MCS-51 telah memiliki on-chip oscillator yang dapat bekerja jika di-drive
menggunakan kristal. Tambahan kapasitor diperlukan untuk menstabilkan sistem. Nilai kristal
yang biasa digunakan pada 89S51/89S52 adalah sekitar 12 MHz, dan maksimum sampai 24
MHz. On-chip oscillator tidak hanya dapat di-drive dengan menggunakan kristal, tapi juga dapat
digunakan TTL oscillator.

J. Koneksi Power

Mikrokontroler biasanya beroperasi pada tegangan 3.3 volt atau 5 volt (tergantung serinya). Pin
Vcc terdapat pada pin 40 sedangkan Vss (ground) terdapat pada pin 20.

Contoh Perhitungan delay dibawah ini:

LOOP1:
MOV R0,#20
LOOP2:
MOV R1,#255
LOOP3:
MOV R2,#255
DJNZ R2,LOOP3
DJNZ R1,LOOP2
DJNZ R0,LOOP1
RET
END
Berdasarkan instruksi yang dipakai dapat diketahui nilai dari MOV R0,#20 adalah sebesar 20,
MOV R1,#255 bernilai 255 dan MOV R2,#255 sebesar 255. Maka dapat diberikan perhitungan:

DJNZ R2,$ 2 ( 255 x 255 x 20 ) = 1300500


x 2
DJNZ R1,DELAY 2 2 ( 255 x 20 ) = 5100 x ( 2+1)
DJNZ R0,DELAY 1 2 ( 20 x ( 2+1 ) = 20 x 3
RET
END
Penjabaran ( 2+1 ) baik pada DJNZ R1 dan DJNZ R0 diperoleh dari penambahan cycle yang
dipunyai oleh DJNZ dengan cycle yang dimiliki oleh instruksi MOV baik pada R1 maupun R0.

Hasil dari perhitungan yang dilakukan adalah :

( 256 x 255 x 4 ) = 261120 x 2 = 2601000


( 255 x 20 ) = 5100 x ( 3) = 15300
( 20 x 3 ) = 360
Hasil yang telah diperoleh ditambah kemudian dikalikan oleh 1 mikro second, sehingga :

2601000 + 15300 + 360 = 2616660 x 10-6 = 2.61666 s

Maka DELAY yang digunakan adalah selama 2.61666 s.


Daftar Assembly Directive

Assembly Directive Keterangan


EQU Pendefinisian konstanta
DB Pendefinisian data dengan ukuran satuan 1 byte
DW Pendefinisian data dengan ukuran satuan 1 word
DBIT Pendefinisian data dengan ukuran satuan 1 bit
DS Pemesanan tempat penyimpanan data di RAM
ORG Inisialisasi alamat mulai program
END Penanda akhir program
CSEG Penanda penempatan di code segment
XSEG Penanda penempatan di external data segment
DSEG Penanda penempatan di internal direct data segment
ISEG Penanda penempatan di internal indirect data segment
BSEG Penanda penempatan di bit data segment
CODE Penanda mulai pendefinisian program
XDATA Pendefinisian external data
DATA Pendefinisian internal direct data
IDATA Pendefinisian internal indirect data
BIT Pendefinisian data bit
#INCLUDE Mengikutsertakan file program lain

Daftar Instruksi

Instruksi Keterangan Singkatan


ACALL Absolute Call
ADD Add
ADDC Add with Carry
AJMP Absolute Jump
ANL AND Logic
CJNE Compare and Jump if Not Equal
CLR Clear
CPL Complement
DA Decimal Adjust
DEC Decrement
DIV Divide
DJNZ Decrement and Jump if Not Zero
INC Increment
JB Jump if Bit Set
JBC Jump if Bit Set and Clear Bit
JC Jump if Carry Set
JMP Jump to Address
JNB Jump if Not Bit Set
JNC Jump if Carry Not Set
JNZ Jump if Accumulator Not Zero
JZ Jump if Accumulator Zero
LCALL Long Call
LJMP Long Jump
MOV Move from Memory
MOVC Move from Code Memory
MOVX Move from Extended Memory
MUL Multiply
NOP No Operation
ORL OR Logic
POP Pop Value From Stack
PUSH Push Value Onto Stack
RET Return From Subroutine
RETI Return From Interrupt
RL Rotate Left
RLC Rotate Left through Carry
RR Rotate Right
RRC Rotate Right through Carry
SETB Set Bit
SJMP Short Jump
SUBB Subtract With Borrow
SWAP Swap Nibbles
XCH Exchange Bytes
XCHD Exchange Digits
XRL Exclusive OR Logic

Anda mungkin juga menyukai