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.
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.
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.
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
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
Instruksi ini akan melakukan percabangan ke suatu alamat. Instruksi ini terdiri atas dua
bagian, yaitu percabangan dengan syarat dan percabangan tanpa syarat.
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.
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.
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.
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:
Daftar Instruksi