Anda di halaman 1dari 46

MAKALAH

MIKROKONTROLER

Oleh

SUHENDRI (K11109023)
TULUS PRANATA (K11109025)

PROGRAM STUDI SISTEM KOMPUTER


FAKULTAS MATEMATIKA DAN ILMU
PENGETAHUAN ALAM
UNIVERSITAS TANJUNGPURA
2012
BAB 1
PENDAHULUAN
1.1 Sejarah Mikrokontroler
Mikrokontroler adalah sebuah sistem komputer fungsional dalam sebuah chip.
Di dalamnya terkandung sebuah inti prosesor, memori (sejumlah kecil RAM,
memori program, atau keduanya), dan perlengkapan input output. Dengan kata
lain, mikrokontroler adalah suatu alat elektronika digital yang mempunyai masukan
dan keluaran serta kendali dengan program yang bisa ditulis dan dihapus dengan
cara khusus, cara kerja mikrokontroler sebenarnya membaca dan menulis data.
Sekedar contoh, bayangkan diri Anda saat mulai belajar membaca dan menulis,
ketika Anda sudah bisa melakukan hal itu Anda bisa membaca tulisan apapun baik
buku, cerpen, artikel dan sebagainya, dan Andapun bisa pula menulis hal-hal
sebaliknya. Begitu pula jika Anda sudah mahir membaca dan menulis data maka
Anda dapat membuat program untuk membuat suatu sistem pengaturan otomatik
menggunakan mikrokontroler sesuai keinginan Anda. Mikrokontroler merupakan
komputer didalam chip yang digunakan untuk mengontrol peralatan elektronik,
yang menekankan efisiensi dan efektifitas biaya. Secara harfiahnya bisa disebut
pengendali kecil dimana sebuah sistem elektronik yang sebelumnya banyak
memerlukan komponen-komponen pendukung seperti IC TTL dan CMOS dapat
direduksi/diperkecil dan akhirnya terpusat serta dikendalikan oleh mikrokontroler
ini.
Mikrokonktroler digunakan dalam produk dan alat yang dikendalikan secara
automatis, seperti sistem kontrol mesin, remote controls, mesin kantor, peralatan
rumah tangga, alat berat, dan mainan. Dengan mengurangi ukuran, biaya, dan
konsumsi tenaga dibandingkan dengan mendesain menggunakan mikroprosesor
memori, dan alat input output yang terpisah, kehadiran mikrokontroler membuat
kontrol elektrik untuk berbagai proses menjadi lebih ekonomis. Dengan
penggunaan mikrokontroler ini maka :
Sistem elektronik akan menjadi lebih ringkas
Rancang bangun sistem elektronik akan lebih cepat karena sebagian besar
dari sistem adalah perangkat lunak yang mudah dimodifikasi
Pencarian gangguan lebih mudah ditelusuri karena sistemnya yang kompak

Namun demikian tidak sepenuhnya mikrokontroler bisa mereduksi komponen


IC TTL dan CMOS yang seringkali masih diperlukan untuk aplikasi kecepatan tinggi
atau sekedar menambah jumlah saluran masukan dan keluaran (I/O). Dengan kata
lain, mikrokontroler adalah versi mini atau mikro dari sebuah komputer karena
mikrokontroler sudah mengandung beberapa periferal yang langsung bisa
dimanfaatkan, misalnya port paralel, port serial, komparator, konversi digital ke
analog (DAC), konversi analog ke digital dan sebagainya hanya menggunakan
sistem minimum yang tidak rumit atau kompleks.
Agar sebuah mikrokontroler dapat berfungsi, maka mikrokontroler tersebut
memerlukan komponen eksternal yang kemudian disebut dengan sistem minimum.
Untuk membuat sistem minimal paling tidak dibutuhkan sistem clock dan reset,
walaupun pada beberapa mikrokontroler sudah menyediakan sistem clock internal,
sehingga tanpa rangkaian eksternal pun mikrokontroler sudah beroperasi.
Untuk merancang sebuah sistem berbasis mikrokontroler, kita memerlukan
perangkat keras dan perangkat lunak, yaitu:
sistem minimal mikrokontroler
software pemrograman dan kompiler, serta downloader

Yang dimaksud dengan sistem minimal adalah sebuah rangkaian


mikrokontroler yang sudah dapat digunakan untuk menjalankan sebuah aplikasi.
Sebuah IC mikrokontroler tidakakan berarti bila hanya berdiri sendiri. Pada
dasarnya sebuah sistem minimal mikrokontroler AVR memiliki prinsip yang sama,
yang terdiri dari 4 bagian, yaitu :
1. prosesor, yaitu mikrokontroler itu sendiri
2. rangkaian reset agar mikrokontroler dapat menjalankan program mulai dari
awal
3. rangkaian clock, yang digunakan untuk memberi detak pada CPU
4. rangkaian catu daya, yang digunakan untuk memberi sumberdaya

Pada mikrokontroler jenis2 tertentu (AVR misalnya), poin2 pada no 2 ,3 sudah


tersedia didalam mikrokontroler tersebut dengan frekuensi yang sudah diseting
dari vendornya (biasanya 1MHz,2MHz,4MHz,8MHz), sehingga pengguna tidak perlu
memerlukan rangkaian tambahan, namun bila ingin merancang sistem dengan
spesifikasi tertentu (misal ingin komunikasi dengan PC atau handphone), maka
pengguna harus menggunakan rangkaian clock yang sesuai dengan karakteristik
PC atau HP tersebut, biasanya menggunakan kristal 11,0592 MHz, untuk
menghasilkan komunikasi yang sesuai dengan baud rate PC atau HP tersebut.
Mikrokontroler pertama kali dikenalkan oleh Texas Instrument dengan seri TMS
1000 pada tahun 1974 yang merupakan mikrokontroler 4 bit pertama.
Mikrokontroler ini mulai dibuat sejak 1971. Merupakan mikrokomputer dalam
sebuah chip, lengkap dengan RAM dan ROM. Kemudian, pada tahun 1976 Intel
mengeluarkan mikrokontroler yang kelak menjadi populer dengan nama 8748 yang
merupakan mikrokontroler 8 bit, yang merupakan mikrokontroler dari keluarga MCS
48. Sekarang di pasaran banyak sekali ditemui mikrokontroler mulai dari 8 bit
sampai dengan 64 bit, sehingga perbedaan antara mikrokontroler dan
mikroprosesor sangat tipis. Masing2 vendor mengeluarkan mikrokontroler dengan
dilengkapi fasilitas2 yang cenderung memudahkan user untuk merancang sebuah
sistem dengan komponen luar yang relatif lebih sedikit.
Saat ini mikrokontroler yang banyak beredar dipasaran adalah mikrokontroler
8 bit varian keluarga MCS51(CISC) yang dikeluarkan oleh Atmel dengan seri
AT89Sxx, dan mikrokontroler AVR yang merupakan mikrokontroler RISC dengan seri
ATMEGA8535 (walaupun varian dari mikrokontroler AVR sangatlah banyak, dengan
masing2 memiliki fitur yang berbeda2). Dengan mikrokontroler tersebut pengguna
(pemula) sudah bisa membuat sebuah sistem untuk keperluan sehari-hari, seperti
pengendali peralatan rumah tangga jarak jauh yang menggunakan remote control
televisi, radio frekuensi, maupun menggunakan ponsel, membuat jam digital,
termometer digital dan sebagainya.

1.2 Jenis-jenis Mikrokontroler


Secara teknis, hanya ada 2 macam mikrokontroller. Pembagian ini didasarkan pada
kompleksitas instruksi-instruksi yang dapat diterapkan pada mikrokontroler
tersebut. Pembagian itu yaitu RISC dan CISC.
RISC merupakan kependekan dari Reduced Instruction Set Computer.
Instruksi yang dimiliki terbatas, tetapi memiliki fasilitas yang lebih banyak.
Sebaliknya, CISC kependekan dari Complex Instruction Set Computer.
Instruksi bisa dikatakan lebih lengkap tapi dengan fasilitas secukupnya.

1. Keluarga MCS51
Mikrokontroler ini termasuk dalam keluarga mikrokontroler CISC. Sebagian
besar instruksinya dieksekusi dalam 12 siklus clock. Mikrokontroler ini
berdasarkan arsitektur Harvard dan meskipun awalnya dirancang untuk aplikasi
mikrokontroler chip tunggal, sebuah mode perluasan telah mengizinkan sebuah
ROM luar 64KB dan RAM luar 64KB diberikan alamat dengan cara jalur
pemilihan chip yang terpisah untuk akses program dan memori data. Salah satu
kemampuan dari mikrokontroler 8051 adalah pemasukan sebuah mesin
pemroses boolean yang mengijikan operasi logika boolean tingkatan-bit dapat
dilakukan secara langsung dan secara efisien dalam register internal dan RAM.
Karena itulah MCS51 digunakan dalam rancangan awal PLC (programmable
Logic Control).

2. AVR
Mikrokontroler Alv and Vegards Risc processor atau sering disingkat AVR
merupakan mikrokonktroler RISC 8 bit. Karena RISC inilah sebagian besar kode
instruksinya dikemas dalam satu siklus clock. AVR adalah jenis mikrokontroler
yang paling sering dipakai dalam bidang elektronika dan instrumentasi. Secara
umum, AVR dapat dikelompokkan dalam 4 kelas. Pada dasarnya yang
membedakan masing-masing kelas adalah memori, peripheral dan fungsinya.
Keempat kelas tersebut adalah keluarga ATTiny, keluarga AT90Sxx, keluarga
ATMega dan AT86RFxx.

3. PIC
Pada awalnya, PIC merupakan kependekan dari Programmable Interface
Controller. Tetapi pada perkembangannya berubah menjadi Programmable
Intelligent Computer. PIC termasuk keluarga mikrokonktroler berarsitektur
Harvard yang dibuat oleh Microchip Technology. Awalnya dikembangkan oleh
Divisi Mikroelektronik General Instruments dengan nama PIC1640. Sekarang
Microhip telah mengumumkan pembuatan PIC-nya yang keenam PIC cukup
popular digunakan oleh para developer dan para penghobi ngoprek karena
biayanya yang rendah, ktersediaan dan penggunaan yang luas, database
aplikasi yang besar, serta pemrograman (dan pemrograman ulang) melalui
hubungan serial pada komputer.

1.3 Mikrokontroler vs Mikroprosesor


Sebuah mikrokontroler berbeda dengan sebuah mikroprosesor dalam beberapa
hal. Pertama dan yang terpenting adalah fungsionalitasnya. Agar mikroprosesor
dapat bekerja, masih dibutuhkan komponen lain seperti memori. Walaupun
mikroprosesor dianggap sebagai piranti canggih untuk komputasi, titik
kelemahannya ada pada tidak dirancangnya kemampuan komunikasi (antarmuka)
dengan piranti-piranti periferal (memori, I/O da lain sebagainya) secara khusus.

Mikrokontroler dirancang sebagai satu kesatuan utuh gambar tersebut. Tidak


memerlukan komponen-komponen eksternal seperti ditunjukkan dalam gabar
untuk perancangan aplikasi, dengan demikian waktu dan biaya bisa dihemat.

Tidak seperti sistem komputer, yang mampu menangani berbagai macam


program aplikasi (misalnya pengolah kata, pengolah angka dan lain sebagainya),
mikrokontroler hanya bisa digunakan untuk suatu aplikasi tertentu saja (hanya satu
program saja yang bisa disimpan). Perbedaan lainnya terletak pada perbandingan
RAM dan ROM. Pada sistem komputer perbandingan RAM dan ROM-nya besar,
artinya program-program pengguna disimpan dalam ruang RAM yang relatif besar,
sedangkan rutin-rutin antarmuka perangkat keras disimpan dalam ruang ROM yang
kecil. Sedangkan pada mikrokontroler, perbandingan ROM dan RAM-nya yang
besar, artinya program kontrol disimpan dalam ROM (bisa Masked ROM atau Flash
PEROM) yang ukurannya relatif lebih besar, sedangkan RAM digunakan sebagai
tempat penyimpan sementara, termasuk register-register yang digunakan pada
mikrokontroler yang bersangkutan.

1.4 Tipe dan Aplikasi Mikrokontroler


1. Mikrokontroler ATMEL
Mikrokontroler keluaran ATMEL dapat dikatakan sebagai mikrokontroler
terlaris dan termurah saat ini. Chip mikrokontroler ini dapat diprogram
menggunakan port paralel atau serial. Selain itu, dapat beroperasi hanya
dengan satu chip dan beberapa komponen dasar seperti kristal, resistor, dan
kapasitor.

2. Mikrokontroler PIC
PIC merupakan keluarga mikrokontroler tipe RISC buatan Microchip
Technology yang bersumber dari PIC1650 yang dibuat oleh Divisi
Mikroelektronika General Instruments. Teknologi Microchip tidak menggunakan
PIC sebagai akronim, melainkan nama brandnya, yaitu PICmicro. Hal ini karena
PIC singkatan dari Peripheral Interface Controller sedangkan General
Instruments mempunyai akronim PIC1650 sebagai Programmable Intelligent
Computer.
PIC pada awalnya dibuat menggunakan teknologi General Instruments 16
bit CPU, yaitu CP1600. PIC dibuat pertama kali pada tahun 1975 untuk
meningkatkan perfoma sistem pada I/O. Saat ini PIC telah dilengkapi dengan
EPROM dan komunikasi serial, UAT, kernel, control motor, dan lain lain serta
memori program dari 512 word hingga 32 word. Satu word dalam hal ini sama
dengan satu instruksi bahasa assembly yang bervariasi dari 12 hingga 16 bit,
tergantung dari tipe PICmicro tersebut.
3. Mikrokontroler Maxim
Maxim merupakan salah satu produsen chip yang fokus pada komponen
digital dan komunikasi, seperti mikrokontroler, akuisisi data, dan komponen RF
(Radio Frekuensi). Maxim cukup inovatif dengan meluncurkan mikrokontroler
yang mendukung jaringan komputer antara lain, 80C400 dengan kecepatan
tinggi.

Mikrokontroler dan prosesor sering digunakan sebagai penngendalli oven


microwave, kulkas, televise dan VCR, radio tape stereo, komputer dan
perlengkapan komputer, seperti laser printer, modem dan disk drive. Penerapan
lainnya, antara lain pada automobile, pengendali lingkungan, instrumentasi,
robotika, aerospace, dan climate control. Mikrokontroler pada umumnya digunakan
dimana kemampuan prosesnya tidak begitu penting (tidak dibutuhkan kecepatan
yang sangat tinggi) dibandingkan mikroprosesor yang mampu bekerja dengan
kecepatan tinggi.
BAB 2
Clock dan CPU Timing
2.1 Arsitektur Mikrokontroler
1. Arsitektur Von Neumann
Arsitektur Von Neumann adalah arsitektur komputer yang menempatkan
program (ROM=Read Only Memory) dan data (RAM=Random Access Memory)
dalam peta memori yang sama. Arsitektur ini memiliki address dan data bus
tunggal untuk mengalamati program (instruksi) dan data. Contoh dari
mikrokontroler yang memakai arsitektur Von Neumann adalah keluarga 68HC05
dan 68HC11 dari Motorola.

2. Arsitektur Harvard
Arsitektur Harvard memiliki dua memori yang terpisah satu untuk program
(ROM) dan satu untuk data (RAM). Intel 80C51, keluarga Microchip PIC16XX,
Philips P87CLXX dan Atmel AT89LSXX adalah contoh dari mikroprosesor yang
mengadopsi arsitektur Harvard.

2.2 Fungsi Pin-pin pada Mikrokontroler


A. Port 0
Merupakan dual-purpose port (port yang memiliki dua kegunaan). Pada desain
yang minimum (sederhana) digunakan sebagai port I/O (Input/Output).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 Port ini digunakan untuk mengirim byte alamat
bila pengaksesan dilakukan pada memori eksternal. 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.
E. PSEN (Program Store Enable)
PSEN atau Program Store Enable adalah sinyal baca pada saat menjalankan
program dari memori eksternal. Di dalam aplikasi, PSEN akan dihubungkan
dengan sinyal RD memori program eksternal (EEPROM).PSEN terdapat pada
pin 29.
F. ALE (Address Latch Enable)
ALE atau Addres Latch Enable adalah pulsa keluaran latch pada proses
pengaksesan memori eksternal (program maupun data). Di dalam aplikasi, ALE
biasanya dihubungkan dengan masukan latch enable dari IC latch, misalnya
74373.. ALE terdapat pada pin 30.
G. EA (External Access)
EA atau External Access Enable menentukan apakah alamat awal memori
program berada di memori eksternal atau internal. Bila dihubungkan dengan
GND, alamat awal program memori akan berada di memori eksternal,
sebaliknya bila dihubungkan dengan VCC, maka alamat awal memori program
AT89S52 akan berada di memori internal. 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. XTAL2 dan XTAL1
XTAL2 merupakan keluaran dari rangkaian penguat osilator internal.
Sedangkan XTAL1 merupakan masukan ke penguat osilator internal. Sebuah
kristal dan dua buah kapasitor yang dihubungkan ke pin ini sudah cukup untuk
menyediakan sinyal detak (clock) untuk mikrokontroler.
J. Koneksi Power
VCC dan GND merupakan pin untuk tegangan DC. Mikrokontroler AT89S52
membutuhkan tegangan DC sebesar 5 volt agar bisa bekerja dengan baik
(standar TTL). Pin Vcc terdapat pada pin 40 sedangkan ground terdapat pada
pin 20.

2.3 Clock
Peran clock bagi mikrokontroler ibarat jantung bagi manusia. Manusia tanpa
detak jantung tidak akan hidup. Mikrokontroler tanpa detak clock juga tidak akan
berfungsi. Pulsa clock mengambil peran penting dalam menentukan kecepatan
dan sikronisasi kerja Central Processing Unit (CPU) mikrokontroler.

2.4 Reset
Proses Reset merupakan proses untuk mengembalikan sistem ke kondisi
semula. Reset tidak mempengaruhi internal program memory. Reset terjadi jika pin
RST bernilai high selama minimal 2 machine cycle lalu kembali bernilai low.
Power-on reset merupakan proses reset yang berlangsung secara otomatis
pada saat sistem pertama kali diberi daya. Proses ini mempengaruhi semua
register dan internal data memory.
Rangkaian reset sama fungsinya dengan rangkaian reset pada komputer.
Fungsi reset di mikrokontroler yaitu untuk merestart program, sehingga kembali ke
program awal. Penggunaan reset pada mikrokontroler opsional, bisa di pake atau
nggak tergantung si pengguna.
BAB 3
ARSITEKTUR MIKROKONTROLER
3.1 Arsitektur
Arsitektur mikrokontroler MCS-51 diotaki oleh CPU 8 bit yang terhubung melalui
satu jalur bus dengan memori penyimpanan berupa RAM dan ROM serta jalur I/O
berupa port bit I/O dan port serial. Selain itu terdapat fasilitas timer/counter
internal dan jalur interface address dan data ke memori eksternal.

3.2 Blok Diagram

Gambar Blok Diagram MCS-51

3.3 Peta Memori


Memori program hanya bisa dibaca saja karena bersifat sebagai ROM. Memori
ini disimpan dalam Flash PEROM. Memori program yang bisa diakses langsung
hingga 64 Kbyte. Pada gambar memori program terdapat strobe (tanda) untuk
akses memori program eksternal melalui sinyal PSEN (Program Strobe Enable).
Memori data menempati ruang alamat terpisah. Memori eksternalnya dapat
diakses secara langsung hingga 64 Kbyte. CPU akan memberikan sinyal baca RD
dan tulis WR selama mengakses memori data eksternal.
BAB 4
INTERRUPT PADA MIKROKONTROLER

Interrupt adalah suatu kejadian atau peristiwa yang menyebabkan mikrokontroler


berhenti sejenak untuk melayani interrupt tersebut. Program yang dijalankan pada
saat melayani interrupt disebut Interrupt Service Routine. Analoginya adalah sebagai
berikut, seseorang sedang mengetik laporan, mendadak telephone berdering dan
menginterrupsi orang tersebut sehingga menghentikan pekerjaan mengetik dan
mengangkat telephone. Setelah pembicaraan telephone yang dalam hal ini adalah
merupakan analogi dari Interrupt Service Routine selesai maka orang tersebut kembali
meneruskan pekerjaanya mengetik.

MCS-51 mengenal lima sumber interrupt, yaitu :


External Interrupt 0
Timer/Counter 0
External Interrupt 1
Timer/Counter 1
Serial Port
User dapat mengaktifkan interrupt melalui SFR Interrupt Enable (IE)

Berikut ini adalah penjelasan masing-masing bit IE:


- EA
bernilai 0 untuk mematikan semua interrupt. Jika EA bernilai 1, aktivasi
interrupt akan diatur oleh bit masing-masing.
- ES
bernilai 1 untuk mengaktifkan interrupt dari komunikasi serial.
- ET1
bernilai 1 untuk mengaktifkan interrupt dari Timer/counter 1.
- EX1
bernilai 1 untuk mengaktifkan interrupt dari External Interrupt 1.
- ET0
bernilai 1 untuk mengaktifkan interrupt dari Timer/Counter 0
- EX0
bernilai 1 untuk mengaktifkan interrupt dari External Interrupt 0.
BAB 5
KENDALI PEWAKTUAN DAN PENCACAHAN
Pada dasarnya timer dan counter merupakan sistem yang sama-sama
menambahkan diri hingga overflow. Timer dapat digunakan untuk menghitung suatu
periode waktu antara kejadian, sebagai jarak waktu antara kejadian, dan
menghasilkan baud rate untuk komunikasi serial. Counter dapat digunakan untuk
menghitung jumlah munculnya suatu kejadian.
Misalkan terdapat sebuah ban berjalan yang memasukkan sejumlah permen ke
dalam masing-masing kantung plastik. Jika diinginkan sebuah kantung diisi dengan
permen sebanyak 100 buah, maka sistem tersebut dapat menggunakan counter untuk
menghitung banyaknya permen. Jika diinginkan sebuah kantung diisi dengan permen
selama dua detik tanpa mempedulikan jumlah permen yang diisikan ke dalam
kantung, maka sistem tersebut dapat menggunakan timer untuk menghitung waktu
pengisian kantung.
Register yang digunakan untuk mengatur timer/counter terdapat pada Timer Mode
(TMOD) dan Timer Control (TCON).

Berikut ini adalah penjelasan masing-masing bit TMOD:


- GATE
Jika GATE dan TRx (TR0 atau TR1 pada TCON) diberi nilai 1 oleh user, maka
Timer/Counter hanya beroperasi jika pin INTx bernilai high. Jika GATE bernilai 0,
maka Timer/Counter hanya beroperasi jika TRx bernilai 1
- C/T
C/T harus diberi nilai 1 oleh program user untuk menjalankan mode counter
dan diberi nilai 0 untuk menjalankan mode timer.
- M1 & M0
Ml dan MO merupakan dua bit pemilih mode operasi timer/counter,
Berikut ini adalah penjelasan masing-masing bit TCON yang berkaitan dengan
timer/counter:
- TF1
diberi nilai 1 secara hardware saat nilai Timer/Counter 1 (TH1 dan TLI)
mengalami overflow. TF1 akan diberi nilai 0 secara hardware saat
mikrokontroler melompat ke Interrupt Service Routine.
- TR1
harus diberi nilai 1 oleh program user untuk menjalankan Timer 1.
- TF0
diberi nilai 1 secara hardware saat nilai Timer/Counter 0 (TH0 dan TL0)
mengalami overflow. TF0 akan diberi nilai 0 secara hardware saat
mikrokontroler melompat ke Interrupt Service Routine.
- TR0
harus diberi nilai 1 oleh program user untuk menjalankan Timer 0.

Timer/Counter memiliki 4 mode operasi. Setiap mode memiliki karakteristik


tersendiri. User harus benar-benar memahami masing-masing mode agar dapat
memilih mode yang tepat dalam program yang dibuat.

- MODE 0.
Mode 0 adalah timer/counter 13 bit. Mode ini disediakan terutama untuk
menjaga kompatibilitas dengan prosesor 8048. Pada mode 0, register TLx (TL0
atau TL1) hanya digunakan 5 bit terendah saja sedangkan register THx (TH0
atau TH1) tetap selebar 8 bit. TLx akan bertambah hingga bernilai 1Fh. Saat ada
perubahan nilai TLx dari 1Fh ke 00h, THx akan bertambah 1. Nilai maksimal THx
dan TLx adalah FF1Fh (THx = FFh dan TLx = 1Fh). Overflow akan terjadi jika ada
perubahan dari FF1Fh ke 0000h. Nilai THx dan TLx dapat diubah oleh user
setiap saat dalam program.
Gambar Timer/Counter mode 0

- MODE 1
Mode 1 pada dasarnya serupa dengan mode 0. Namun pada mode 1 semua
bit TLx digunakan, sehingga mode 1 merupakan timer/counter 16 bit. TLx akan
bertambah hingga bernilai FFh. Saat ada perubahan nilai TLx dari FFh ke 00h,
THx akan bertambah 1. Nilai maksimal THx dan TLx adalah FFFFh (THx = FFh
dan TLx = FFh). Overflow akan terjadi jika ada perubahan dari FFFFh ke 0000h.
Nilai THx dan TLx dapat diubah oleh user setiap saat dalam program.

Gambar Timer/Counter mode 1

- MODE 2
Mode 2 adalah timer/counter 8 bit dengan fasilitas auto reload. TLx
bertindak sebagai timer/counter 8 bit. Sedangkan THx berisi suatu nilai tertentu.
Auto reload adalah fasilitas dimana nilai TLx setelah overflow tidak kembali ke
00h namun nilai TLx akan diambil dari nilai THx.
Misalkan THx berisi 47h dan TLx berisi FFh. Jika ada overflow pada TLx, nilai TLx
akan berubah dari FFh ke 47h, sesuai dengan nilai THx. Proses tersebut
dikerjakan secara otomatis secara hardware sehingga user tidak perlu
memeriksa apakah nilai TLx sudah overflow dan tidak perlu mengisi ulang
dengan nilai yang baru. Mode 2 ini juga digunakan untuk menghasilkan baud
rate.
Gambar Timer/Counter mode 2

- MODE 3
Pada mode 3, Timer/Counter 0 akan menjadi dua timer/counter 8 bit,
sedangkan Timer/Counter 1 akan berhenti. TL0 akan menjadi timer/counter 8 bit
yang dikendalikan oleh bit kontrol Timer/Counter 0 (meliputi GATE, C/T , TR0,
INT0, dan TF0). TH0 akan menjadi timer 8 bit (bukan counter) yang dikendalikan
oleh bit kontrol Timer/Counter 1 (meliputi TR1 dan TF1). Jadi TR1 mengendalikan
TH0 dan Timer/Counter 1 secara bersamaan.

Gambar Timer/Counter mode 3

Timer/Counter 1 masih dapat dioperasikan dalam mode selain mode 3.


Umumnya Timer/counter 1 dioperasikan dalam mode 2 dan berfungsi sebagai
penghasil baud rate. Jika user ingin menghentikan Timer/Counter 1 tanpa
menghentikan TH0, user dapat memindahkan Timer/Counter 1 ke dalam mode
3.

Proses inisialisasi adalah proses menentukan nilai semua register yang berkaitan
dengan Timer/Counter yang akan digunakan agar Timer/Counter dapat berfungsi
sebagaimana yang dikehendaki. Register yang harus diatur terlebih dahulu meliputi :

1. TMOD dan TCON


Langkah pertama adalah menentukan mode yang akan digunakan (mode 0,
1, 2, atau 3) fungsi yang dipilih (sebagai timer atau counter), dan jenis kontrol
(external control melalui pin INTx atau internal control melalui TRx). Pengaturan
TCON dilakukan untuk menjalankan timer. Misalnya Timer/Counter 0 digunakan
sebagai timer dalam mode 2 dengan external control dan Timer/Counter 1
digunakan sebagai counter dalam mode 1 dengan internal control, maka
instruksinya adalah sebagai berikut :
MOV TMOD, #01011010b
atau
MOV TMOD, #5Ah

Sedangkan untuk menjalankan kedua timer, instruksinya adalah sebagai


beikut :
MOV TCON, #01010000b
atau
MOV TCON, #50h
atau
SETB TR0
SETB TR1

2. THx dan/atau TLx


Jika diperlukan, inisialisasi atau perubahan terhadap nilai THx dan/ atau TLx
dapat dilakukan denga cara mengisikan nilai tertentu ke dalam register
tersebut. Misalnya register Timer/Counter 0 diisi dengan nilai 814Ah dan
register Timer/Counter 1 diisi dengan nilai 0CF32h, maka instruksinya adalah
sebagai berikut :
MOV TH0, #81h
MOV TL0, #4Ah
MOV TH1, #0CFh
MOV TL1, #32h

3. IE dan/atau IP
Jika Timer/Counter yang diprogram akan digunakan sebagai sumber
interrupt, maka IE dan/atau IP juga harus diatur. Misalnya kedua Timer/Counter
digunakan sebagai sumber interrupt dengan prioritas Timer/Counter 1, maka
instruksinya adalah sebagai berikut :
MOV IP, #00001000b
MOV IE, #10002020b
atau
MOV IP, #08h
MOV IE, #8Ah
atau
SETB PT1
SETB ET1
SETB ET0
SETB EA

Pembacaan nilai Timer/Counter dapat dilakukan dengan dua cara, pembacaan


register Timer/Counter (THx dan/atau TLx) secara langsung dan mendeteksi overflow.
Cara ini dilakukan dengan membaca register THx dan/atau TLx secara langsung.
Jika Timer/Counter dioperasikan dalam mode 2 atau mode 3, cara ini cukup mudah
karena register yang dibaca hanya TLx dan/atau THx yang masing-masing selebar 8
bit. Karena register MCS-51 secaraumum juga selebar 8 bit, maka proses pembacaan
satu nilai dapat dilakukan dalam satu instruksi.
Masalah mulai muncul jika Timer/Counter dioperasikan dalam mode 0 atau mode
1. Dalam kedua mode tersebut THx dan TLx bersama-sama membentuk satu nilai
selebar 13 bit atau 16 bit dan keduanya tidak dapat dibaca sekaligus.
Jika TLx dibaca pada saat TLx bernilai 255 atau FFh lalu THx yang dibaca pada
instruksi selanjutnya bernilai 8, maka user akan mendapat nilai THx dan TLx sebesar
08FFh. Padahal yang terjadi sesungguhnya adalah pada pembacaan pertama
(pembacaan TLx), nilai THx dan TLx adalah 07FFh dan pada pembacaan kedua
(pembacaan THx), nilai THx dan TLx adalah 0800h (jika diasumsikan jarak antara
kedua instruksi adalah 1
machine cycle dan Timer/Counter difungsikan sebagai timer). Pada kasus yang
sama, jika dilakukan pembacaan terhadap THx terlebih dahulu sebelum pembacaan
TLx, maka user akan mendapat nilai akhir 0700h (sebelum TLx overflow, THx bernilai
07h dan setelah TLx overflow, TLx bernilai 00h).
Hal ini dapat diatasi dengan cara melakukan pembacaan THx sebanyak dua kali,
yaitu sebelum dan sesudah pembacaan TLx. Dengan cara ini user dapat mengetahui
apakah pembacaan register THx dan TLx dilakukan pada saat TLx overflow atau tidak.
Jika pembacaan pertama THx bernilai 07h, pembacaan TLx bernilai 00h, dan
pembacaan kedua THx bernilai 08h, maka user akan mengetahui bahwa kondisi yang
dibaca adalah pada saat THx dan TLx bernilai 07FFh, 0800h, dan 0801h (jika
diasumsikan jarak antara instruksi pembacaan adalah 1 machine cycle dan
Timer/Counter difungsikan sebagai timer).
Cara yang lebih sering digunakan adalah dengan mendeteksi overflow. Cara ini
digunakan jika user tidak perlu mengetahui nilai sebenarnya dari THx dan TLx namun
lebih membutuhkan saat terjadinya overflow. Adanya overflow ditandai oleh nilai 1
pada TFx (TCON.7 dan/atau TCON.5). Cara ini digunakan jika user ingin menggunakan
timer sebagai sebuah delay yang berdurasi tetap. Misalnya delay yang dibutuhkan
adalah 0,05 detik atau 50 milidetik dan diasumsikan 1 machine cycle membutuhkan
waktu 1 mikrodetik (dengan menggunakan frekuensi kristal 12 MHz). Hal ini berarti
timer harus bertambah dari 0 hingga 50000 untuk satu durasi delay. Karena overflow
tidak terjadi pada nilai 50000 melainkan pada saat nilai THx dan TLx kembali ke 0000h
atau 65536 machine cycle dari nilai 0000h sebelumnya (dalam mode 1,16 bit), maka
nilai awal THx dan TLx yang harus dimasukkan adalah 65536 - 50000 - 15536 atau
3CB0h.
Timer/Counter yang dioperasikan sebagai timer dapat digunakan untuk
menghitung waktu dari sebuah kejadian. Nilai timer bertambah tiap machine cycle (12
pulsa clock) sehingga kecepatan bertambahnya adalah 1/12 dari frekuensi osilator.
Untuk mengukur durasi sebuah kejadian, user hanya pcrlu mengaktifkan timer
pada saat kejadian tersebut dimulai. Jika kejadian tersebut berakhir, user dapat
menghentikan timer. Dengan cara ini user mendapatkan sebuah nilai timer yang dapat
digunakan sebagai dasar untuk menghitung lama waktu yang sesungguhnya.
Timer/Counter yang dioperasikan sebagai counter dapat digunakan untuk
menghitung jumlah kejadian yang muncul. Karena counter membutuhkan transisi dari
1 ke 0 sebagai trigger, maka counter membutuhkan waktu 2 machine cycle (24
pulsa clock) sebelum nilainya bertambah. Jadi counter mampu membaca trigger
dengan frekuensi 1/24 dari frekuensi osilator.
Counter sebenarnya dapat diaplikasikan dengan menggunakan general purpose
I/O seperti port 1, namun program harus terus-menerus memeriksa kondisi port 1. Jika
kondisi port 1 tidak diperiksa terus-menerus, pasti ada kejadian yang terlewat.
Dengan menggunakan Timer/Counter sebagai counter, maka MCS-51 akan selalu
menghitung munculnya kejadian yang ditandai dengan adanya trigger. User hanya
perlu memeriksa nilai counter pada saat yang ditentukan.
BAB 6
PEMROGRAMAN PADA MIKROKONTROLER
6.1 Dasar Pemrograman MCS51 (AT89C51, AT89S51, AT89C2051)
Program pengendali mikrokontroler disusun dari kumpulan instruksi, instruksi
tersebut setara dengan kalimat perintah bahasa manusia yang hanya terdiri atas
predikat dan objek. Dengan demikian tahap pertama pembuatan program
pengendali mikrokontroler dimulai dengan pengenalan dan pemahaman predikat
(kata kerja) dan objek apa saja yang dimiliki mikrokontroler.

Objek dalam pemrograman mikrokontroler adalah data yang tersimpan di


dalam memori, register dan input/output. Sedangkan kata kerja yang dikenal pun
secara umum dikelompokkan menjadi perintah untuk perpindahan data,
arithmetik, operasi logika, pengaturan alur program dan beberapa hal khusus.
Kombinasi dari kata kerja dan objek itulah yang membentuk perintah pengatur
kerja mikrokontroler.

Intruksi MOV A,$7F merupakan contoh sebuah intruksi dasar yang sangat
spesifik, MOV merupakan kata kerja yang memerintahkan peng-copy-an data,
merupakan predikat dalam kalimat perintah ini. Sedangkan objeknya adalah data
yang di-copy-kan, dalam hal ini adalah data yang ada di dalam memori nomor $7F
di-copy-kan ke Akumulator A.

Penyebutan data dalam MCS51


Data bisa berada diberbagai tempat yang berlainan, dengan demikian dikenal
beberapa cara untuk menyebut data (dalam bahasa Inggris sering disebut sebagai
Addressing Mode), antara lain sebagai berikut:

Penyebutan data konstan (immediate addressing mode): MOV A,#$20. Data


konstan merupakan data yang berada di dalam instruksi. Contoh instruksi ini
mempunyai makna data konstan $20 (sebagai data konstan ditandai dengan #)
di-copy-kan ke Akumulator A. Yang perlu benar-benar diperhatikan dalam perintah
ini adalah bilangan $20 merupakan bagian dari instruksi.

Penyebutan data secara langsung (direct addressing mode), cara ini dipakai
untuk menunjuk data yang berada di dalam memori dengan cara menyebut nomor
memori tempat data tersebut berada : MOV A,$30. Contoh instruksi ini
mempunyai makna data yang berada di dalam memori nomor $30 di-copy-kan ke
Akumulator. Sekilas intruksi ini sama dengan instruksi data konstan di atas,
perbedaannya instruksi di atas memakai tanda # yang menandai $20 adalah
data konstan, sedangkan dalam instruksi ini karena tidak ada tanda # maka $30
adalah nomor dari memori.

Penyebutan data secara tidak langsung (indirect addressing mode), cara ini
dipakai untuk menunjuk data yang berada di dalam memori, kalau memori
penyimpan data ini letaknya berubah-rubah sehingga nomor memori tidak disebut
secara langsung tapi di-titip-kan ke register lain : MOV A,@R0. Dalam instruksi ini
register serba guna R0 dipakai untuk mencatat nomor memori, sehingga instruksi
ini mempunyai makna memori yang nomornya tercatat dalam R0 isinya di-copy-
kan ke Akumulator A. Tanda @ dipakai untuk menandai nomor memori disimpan
di dalam R0. Bandingkan dengan instruksi penyebutan nomor memori secara
langsung di atas, dalam instruksi ini nomor memori terlebih dulu disimpan di R0
dan R0 berperan menunjuk memori mana yang dipakai, sehingga kalau nilai R0
berubah memori yang ditunjuk juga akan berubah pula. Dalam instruksi ini register
serba guna R0 berfungsi dengan register penampung alamat (indirect address
register), selain R0 register serba guna R1 juga bisa dipakai sebagai register
penampung alamat.

Penyebutan data dalam register (register addressing mode): MOV A,R5.


Instruksi ini mempunyai makna data dalam register serba guna R5 di-copy-kan ke
Akumulator A. Instruksi ini membuat register serba guna R0 sampai R7 sebagai
tempat penyimpan data yang sangat praktis yang kerjanya sangat cepat.

Data yang dimaksud dalam bahasan di atas semuanya berada di dalam


memori data (termasuk register serba guna letaknya juga di dalam memori data).
Dalam penulisan program, sering-sering diperlukan tabel baku yang disimpan
bersama dengan program tersebut. Tabel semacam ini sesungguhnya merupakan
data yang berada di dalam memori program! Untuk keperluan ini, MCS51
mempunyai cara penyebutan data dalam memori program yang dilakukan secara
indirect (code indirect addressing mode) : MOVC A,@A+DPTR. Perhatikan dalam
instruksi ini MOV digantikan dengan MOVC, tambahan huruf C tersebut dimaksud
untuk membedakan bahwa instruksi ini dipakai di memori program. (MOV tanpa
huruf C artinya instruksi dipakai di memori data). Tanda @ dipakai untuk
menandai A+DPTR dipakai untuk menyatakan nomor memori yang isinya di-copy-
kan ke Akumulator A, dalam hal ini nilai yang tersimpan dalam DPTR (Data Pointer
Register - 2 byte) ditambah dengan nilai yang tersimpan dalam Akumulator A (1
byte) dipakai untuk menunjuk nomor memori program.

Kata kerja (instruksi) dalam MCS51


Secara keseluruhan AT89Cx051 mempunyai sebanyak 255 macam instruksi,
yang dibentuk dengan mengkombinasikan kata kerja dan objek. Kata kerja
tersebut secara kelompok dibahas sebagai berikut :

1. KELOMPOK PENG-COPY-AN DATA


Kode dasar untuk kelompok ini adalah MOV, singkatan dari MOVE yang
artinya memindahkan, meskipun demikian lebih tepat dikatakan perintah ini
mempunyai makna peng-copy-an data. Hal ini bisa dijelaskan berikut : setelah
instruksi MOV A,R7 dikerjakan, Akumulator A dan register serba guna R7
berisikan data yang sama, yang asalnya tersimpan di dalam R7.
Perintah MOV dibedakan sesuai dengan jenis memori AT89Cx051. Perintah
ini pada memori data dituliskan menjadi MOV, misalkan :
MOV A,$20
MOV A,@R1
MOV A,P1
MOV P3,A

Untuk pemakaian pada memori program, perintah ini dituliskan menjadi


MOVC, hanya ada 2 jenis instruksi yang memakai MOVC, yakni:

MOVC A,@A+DPTR ; DPTR sebagai register indirect


MOVC A,@A+PC ; PC sebagai register indirect

Selain itu, masih dikenal pula perintah MOVX, yakni perintah yang dipakai
untuk memori data eksternal (X singkatakan dari External). Perintah ini hanya
dimiliki oleh anggota keluarga MCS51 yang mempunyai memori data eksternal,
misalnya AT89C51 dan lain sebagainya, dan jelas tidak dikenal oleh kelompok
AT89Cx051 yang tidam punya memori data eksternal. Hanya ada 6 macam
instruksi yang memakai MOVX, instruksi-instruksi tersebut adalah:

MOVX A,@DPTR
MOVX A,@R0
MOVX A,@R1
MOVX @DPTR,A
MOVX @R0,A
MOVX @R1,A

2. KELOMPOK ARIMATIK (ADD, ADDC, SUBB, DA, MUL dan DIV)


Perintah ADD dan ADDC
Isi Akumulator A ditambah dengan bilangan 1 byte, hasil penjumlahan
akan ditampung kembali dalam Akumulator. Dalam operasi ini bit Carry (C flag
dalam PSW Program Status Word) berfungsi sebagai penampung limpahan
hasil penjumlahan. Jika hasil penjumlahan tersebut melimpah (nilainya lebih
besar dari 255) bit Carry akan bernilai 1, kalau tidak bit Carry bernilai 0.
ADDC sama dengan ADD, hanya saja dalam ADDC nilai bit Carry dalam proses
sebelumnya ikut dijumlahkan bersama.
Bilangan 1 byte yang ditambahkan ke Akumulator, bisa berasal dari
bilangan konstan, dari register serba guna, dari memori data yang nomor
memorinya disebut secara langsung maupun tidak langsung, seperti terlihat
dalam contoh berikut :

ADD A,R0 ; register serba guna


ADD A,#$23 ; bilangan konstan
ADD A,@R0 ; no memori tak langsung
ADD A,P1 ; no memori langsung (port 1)

Perintah SUBB
Isi Akumulator A dikurangi dengan bilangan 1 byte berikut dengan nilai bit
Carry, hasil pengurangan akan ditampung kembali dalam Akumulator. Dalam
operasi ini bit Carry juga berfungsi sebagai penampung limpahan hasil
pengurangan. Jika hasil pengurangan tersebut melimpah (nilainya kurang dari
0) bit Carry akan bernilai 1, kalau tidak bit Carry bernilai 0.

SUBB A,R0 ; A = A - R0 - C
SUBB A,#$23 ; A = A - $23
SUBB A,@R1
SUBB A,P0

Perintah DA
Perintah DA (Decimal Adjust) dipakai setelah perintah ADD; ADDC atau
SUBB, dipakai untuk merubah nilai biner 8 bit yang tersimpan dalam
Akumulator menjadi 2 buah bilangan desimal yang masing-masing terdiri dari
nilai biner 4 bit.

Perintah MUL AB
Bilangan biner 8 bit dalam Akumulator A dikalikan dengan bilangan biner 8
bit dalam register B. Hasil perkalian berupa bilangan biner 16 bit, 8 bit
bilangan biner yang bobotnya lebih besar ditampung di register B, sedangkan
8 bit lainnya yang bobotnya lebih kecil ditampung di Akumulator A.
Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai
hasil perkalian yang ada dalam register B. Bit OV akan bernilai 0 jika register
B bernilai $00, kalau tidak bit OV bernilai 1.

MOV A,#10
MOV B,#20
MUL AB
Perintah DIV AB
Bilangan biner 8 bit dalam Akumulator A dibagi dengan bilangan biner 8 bit
dalam register B. Hasil pembagian berupa bilangan biner 8 bit ditampung di
Akumulator, sedangkan sisa pembagian berupa bilangan biner 8 bit ditampung
di register B.
Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai
sebelum pembagian yang ada dalam register B. Bit OV akan bernilai 1 jika
register B asalnya bernilai $00.

3. KELOMPOK LOGIKA (ANL, ORL dan XRL)


Kelompok perintah ini dipakai untuk melakukan operasi logika
mikrokontroler MCS51, operasi logika yang bisa dilakukan adalah operasi AND
(kode operasi ANL), operasi OR (kode operasi ORL) dan operasi Exclusive-OR
(kode operasi XRL). Data yang dipakai dalam operasi ini bisa berupa data yang
berada dalam Akumulator atau data yang berada dalam memori-data, hal ini
sedikit berlainan dengan operasi aritmatik yang harus melihatkan Akumulator
secara aktip. Hasil operasi ditampung di sumber data yang pertama.

Operasi logika AND banyak dipakai untuk me-0-kan beberapa bit


tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk
sebuah bilangan biner 8 bit sebagai data konstan yang di-ANL-kan
bilangan asal. Bit yang ingin di-0-kan diwakili dengan 0 pada data
konstan, sedangkan bit lainnya diberi nilai 1, misalnya Instruksi ANL
P1,#%01111110 akan mengakibatkan bit 0 dan bit 7 dari Port 1 (P1)
bernilai 0 sedangkan bit-bit lainnya tetap tidak berubah nilai.
Operasi logika OR banyak dipakai untuk me-1-kan beberapa bit tertentu
dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah
bilangan biner 8 bit sebagai data konstan yang di-ORL-kan bilangan asal.
Bit yang ingin di-1-kan diwakili dengan 1 pada data konstan,
sedangkan bit lainnya diberi nilai 0, misalnya Instruksi ORL A,#
%01111110 akan mengakibatkan bit 1 sampai dengan bit 6 dari
Akumulator bernilai 1 sedangkan bit-bit lainnya tetap tidak berubah
nilai.
Operasi logika Exclusive-OR banyak dipakai untuk membalik nilai
(complement) beberapa bit tertentu dari sebuah bilangan biner 8 bit,
caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data
konstan yang di-XRL-kan bilangan asal. Bit yang ingin dibalik-nilai
diwakili dengan 1 pada data konstan, sedangkan bit lainnya diberi nilai
0, misalnya Instruksi XRL A,#%01111110 akan mengakibatkan bit 1
sampai dengan bit 6 dari Akumulator berbalik nilai, sedangkan bit-bit
lainnya tetap tidak berubah nilai.

Pada dasarnya program dijalankan intruksi demi instruksi, artinya selesai


menjalankan satu instruksi mikrokontroler langsung menjalankan instruksi
berikutnya, untuk keperluan ini mikrokontroler dilengkapi dengan Program
Counter yang mengatur pengambilan intruksi secara berurutan. Meskipun
demikian, program yang kerjanya hanya berurutan saja tidaklah banyak
artinya, untuk keperluan ini mikrokontroler dilengkapi dengan instruksi-instruksi
untuk mengatur alur program.
Secara umum kelompok instruksi yang dipakai untuk mengatur alur
program terdiri atas instruksi-instruksi JUMP (setara dengan statemen GOTO
dalam Pascal), instruksi-instruksi untuk membuat dan memakai sub-rutin/modul
(setara dengan PROCEDURE dalam Pascal), instruksi-instruksi JUMP bersyarat
(conditional Jump, setara dengan statemen IF .. THEN dalam Pascal). Di
samping itu ada pula instruksi PUSH dan POP yang bisa memengaruhi alur
program.
Karena Program Counter adalah satu-satunya register dalam
mikrokontroler yang mengatur alur program, maka kelompok instruksi pengatur
program yang dibicarakan di atas, semuanya merubah nilai Program Counter,
sehingga pada saat kelompok instruksi ini dijalankan, nilai Program Counter
akan tidak akan runtun dari nilai instruksi sebelumnya.
Selain karena instruksi-instruksi di atas, nilai Program Counter bisa pula
berubah karena pengaruh perangkat keras, yaitu saat mikrokontroler di-reset
atau menerima sinyal interupsi dari perangkat input/output. Hal ini akan
dibicarakan secara detail dibagian lagi.

4. Kelompok Instruksi JUMP


Mikrokontroler menjalankan intruksi demi instruksi, selesai menjalankan
satu instruksi mikrokontroler langsung menjalankan instruksi berikutnya, hal ini
dilakukan dengan cara nilai Program Counter bertambah sebanyak jumlah byte
yang membentuk instruksi yang sedang dijalankan, dengan demikian pada saat
instruksi bersangkutan dijalankan Program Counter selalu menyimpan nomor
memori-program yang menyimpan instruksi berikutnya.
Pada saat mikrokontroler menjalankan kelompok instruksi JUMP, nilai
Program Counter yang runtun sesuai dengan alur program diganti dengan
nomor memori-program baru yang dikehendaki programer.
Mikrokontroler MCS51 mempunyai 3 macam intruksi JUMP, yakni instruksi
LJMP (Long Jump), instruksi AJMP (Absolute Jump) dan instruksi SJMP (Short
Jump). Kerja dari ketiga instruksi ini persis sama, yakni memberi nilai baru pada
Program Counter, kecepatan melaksanakan ketiga instruksi ini juga persis
sama, yakni memerlukan waktu 2 periode instruksi (jika MCS51 bekerja pada
frekuensi 12 MHz, maka instruksi ini dijalankan dalam waktu 2 mikro-detik),
yang berbeda dalam jumlah byte pembentuk instruksinya, instruksi LJMP
dibentuk dengan 3 byte, sedangkan instuksi AJMP dan SJMP cukup 2 byte.

5. Instruksi LJMP
Kode untuk instruksi LJMP adalah $02, nomor memori-program baru yang
dituju dinyatakan dengan bilangan biner 16 bit, dengan demikian instruksi ini
bisa menjangkau semua memori-program MCS51 yang jumlahnya 64 KiloByte.
Instruksi LJMP terdiri atas 3 byte, yang bisa dinyatakan dengan bentuk umum
02 aa aa, aa yang pertama adalah nomor memori-program bit 8 sampai
dengan bit 15, sedangkan aa yang kedua adalah nomor memori-program bit 0
sampai dengan bit 7.
Pemakaian instruksi LJMP bisa dipelajari dari potongan program berikut :

LJMP TugasBaru

ORG $2000
TugasBaru:
MOV A,P3.1

Dalam potongan program di atas, ORG adalah perintah pada assembler


agar berikutnya assembler bekerja pada memori-program nomor yang disebut
di belakang ORG (dalam hal ini minta assembler berikutnya bekerja pada
memori-program nomor $2000). TugasBaru disebut sebagai LABEL, yakni
sarana assembler untuk menandai/ menamai nomor memori-program. Dengan
demikian, dalam potongan program di atas, memori-program nomor $2000
diberi nama TugasBaru, atau bisa juga dikatakan bahwa TugasBaru bernilai
$2000. (Catatan : LABEL ditulis minimal satu huruf lebih kiri dari instruksi,
artinya LABEL ditulis setelah menekan tombol Enter, tapi instruksi ditulis
setelah menekan tombol Enter, kemudian diikuti dengan 1 tombol spasi atau
tombol TAB). Dengan demikian intruksi LJMP TugasBaru di atas, sama artinya
dengan LJMP $2000 yang oleh assembler akan diterjemahkan menjadi 02 20 00
(heksadesimal).

6. Instruksi AJMP
Nomor memori-program baru yang dituju dinyatakan dengan bilangan
biner 11 bit, dengan demikian instruksi ini hanya bisa menjangkau satu daerah
memori-program MCS51 sejauh 2 KiloByte. Instruksi AJMP terdiri atas 2 byte,
byte pertama merupakan kode untuk instruksi AJMP (00001b) yang digabung
dengan nomor memori-program bit nomor 8 sampai dengan bit nomor 10, byte
kedua dipakai untuk menyatakan nomor memori-program bit nomor 0 sampai
dengan bit nomor 7. Berikut ini adalah potongan program untuk menjelaskan
pemakaian instruksi AJMP:

ORG $800
AJMP DaerahIni
AJMP DaerahLain
ORG $900
DaerahIni:
...
ORG $1000
DaerahLain:
...

Potongan program di atas dimulai di memori-program nomor $800, dengan


demikian instruksi AJMP DaerahIni bisa dipakai, karena nomor-memori $800
(tempat instruksi AJMP DaerahIni) dan LABEL DaerahIni yang terletak di dalam
satu daerah memori-progam 2 KiloByte yang sama dengan. (Dikatakan terletak
di dalam satu daerah memori-program 2 KiloByte yang sama, karena bit nomor
11 sampai dengan bit nomor 15 dari nomor memorinya sama).
Tapi AJMP DaerahLain akan di-salah-kan oleh Assembler, karena
DaerahLain yang terletak di memori-program nomor $1000 terletak di daerah
memori-program 2 KiloByte yang lain.
Karena instruksi AJMP hanya terdiri dari 2 byte, sedangkan instruksi LJMP 3
byte, maka memakai instruksi AJMP lebih hemat memori-program dibanding
dengan LJMP. Hanya saja karena jangkauan instrusksi AJMP hanya 2 KiloByte,
pemakaiannya harus hati-hati.
Memori-program IC mikrokontroler AT89C1051 dan AT89C2051 masing-
masing hanya 1 KiloByte dan 2 KiloByte, dengan demikian program untuk
kedua mikrokontroler di atas tidak perlu memakai instruksi LJMP, karena
program yang ditulis tidak mungkin menjangkau lebih dari 2 KiloByte memori-
program.

7. Instruksi SJMP
Nomor memori-program dalam instruksi ini tidak dinyatakan dengan
nomor memori-program yang sesungguhnya, tapi dinyatakan dengan
pergeseran relatip terhadap nilai Program Counter saat instruksi ini
dilaksanakan.
Pergeseran relatip tersebut dinyatakan dengan 1 byte bilangan 2s
complement, yang bisa dipakai untuk menyakatakan nilai antara 128 sampai
dengan +127. Nilai minus dipakai untuk menyatakan bergeser ke instruksi-
instruksi sebelumnya, sedangkan nilai positip untuk menyatakan bergeser ke
instruksi-instruksi sesudahnya.
Meskipun jangkauan instruksi SJMP hanya 128 sampai +127, tapi instruksi
ini tidak dibatasi dengan pengertian daerah memori-program 2 KiloByte yang
membatasi instruksi AJMP.

ORG $0F80
SJMP DaerahLain
...
ORG $1000
DaerahLain:

Dalam potongan program di atas, memori-program $0F80 tidak terletak


dalam daerah memori-program 2 KiloByte yang sama dengan $1000, tapi
instruksi SJMP DaerahLain tetap bisa dipakai, asalkan jarak antara instruksi itu
dengan LABEL DaerahLain tidak lebih dari 127 byte.
Kelompok Instruksi untuk sub-rutin
Instruksi-instruksi untuk membuat dan memakai sub-rutin/modul program,
selain melibatkan Program Counter, melibatkan pula Stack yang diatur oleh
Register Stack Pointer.
Sub-rutin merupakan suatu potong program yang karena berbagai
pertimbangan dipisahkan dari program utama. Bagian-bagian di program
utama akan memanggil (CALL) sub-rutin, artinya mikrokontroler sementara
meninggalkan alur program utama untuk mengerjakan instruksi-instruksi dalam
sub-rutin, selesai mengerjakan sub-rutin mikrokontroler kembali ke alur
program utama.
Satu-satunya cara membentuk sub-rutin adalah memberi instruksi RET
pada akhir potongan program sub-rutin. Program sub-rutin di-panggil dengan
instruksi ACALL atau LCALL.
Agar nantinya mikrokontroler bisa meneruskan alur program utama, pada
saat menerima instruksi ACALL atau LCALL, sebelum mikrokontroler pergi
mengerjakan sub-rutin, nilai Program Counter saat itu disimpan dulu ke dalam
Stack (Stack adalah sebagian kecil dari memori-data yang dipakai untuk
menyimpan nilai Program Counter secara otomatis, kerja dari Stack
dikendalikan oleh Register Stack Poiner).
Selanjutnya mikrokontroler mengerjakan instruksi-instruksi di dalam sub-
rutin sampai menjumpai instruksi RET yang berfungsi sebagai penutup dari sub-
rutin. Saat menerima instruksi RET, nilai asal Program Counter sebelum
mengerjakan sub-rutin yang disimpan di dalam Stack, dikembalikan ke Program
Counter sehingga mikrokontroler bisa meneruskan pekerjaan di alur program
utama.
Instruksi ACALL dipakai untuk me-manggil program sub-rutin dalam
daerah memori-program 2 KiloByte yang sama, setara dengan instruksi AJMP
yang sudah dibahas di atas. Sedangkan instruksi LCALL setara dengan instruksi
LCALL, yang bisa menjangkau seluruh memori-program mikrokontroler MCS51
sebanyak 64 KiloByte. (Tapi tidak ada instrusk SCALL yang setara dengan
instruksi SJMP).
Program untuk AT89C1051 dan AT89C2051 tidak perlu memakai instruksi
LCALL.
Instruksi RET dipakai untuk mengakhiri program sub-rutin, di samping itu
masih ada pula instruksi RETI, yakni instruksi yang dipakai untuk mengakhiri
Program Layanan Interupsi (Interrupt Service Routine), yaitu semacam program
sub-rutin yang dijalankan mikrokontroler pada saat mikrokontroler menerima
sinyal permintaan interupsi.
Catatan : Saat mikrokontroler menerima sinyal permintaaan interupsi,
mikrokontroler akan melakukan satu hal yang setara dengan intruksi LCALL
untuk menjalankan Program Layanan Interupsi dari sinyal interupsi
bersangkutan. Di samping itu, mikrokontroler juga me-mati-kan sementara
mekanisme layanan interupsi, sehingga permintaan interupsi berikutnya tidak
dilayani. Saat menerima instruksi RETI, makanisme layanan interusi kembali
diaktipkan dan mikrokontroler melaksanakan hal yang setara dengan instruksi
RET.

8. Kelompok Instruksi Jump Bersyarat


Instruksi Jump bersyarat merupakan instruksi inti bagi mikrokontroler,
tanpa kelompok instruksi ini program yang ditulis tidak banyak berarti.
Instruksi-instruksi ini selain melibatkan Program Counter, melibatkan pula
kondisi-kondisi tertentu yang biasanya dicatat dalam bit-bit tertentu yang
dihimpun dalam Register tertentu.
Khusus untuk keluarga mikrokontroler MCS51 yang mempunyai
kemampuan menangani operasi dalam level bit, instruksi jump bersyarat dalam
MCS51 dikaitkan pula dengan kemampuan operasi bit MCS51.
Nomor memori-program baru yang harus dituju tidak dinyatakan dengan
nomor memori-program yang sesungguhnya, tapi dinyatakan dengan
pergeseran relatip terhadap nilai Program Counter saat instruksi ini dilaksana-
kan. Cara ini dipakai pula untuk instruksi SJMP.
Instruksi JZ / JNZ
Instruksi JZ (Jump if Zero) dan instruksi JNZ (Jump if not Zero) adalah
instruksi JUMP bersyarat yang memantau nilai Akumulator A.

MOV A,#0
JNZ BukanNol
JZ Nol
...
BukanNol:
...
Nol :
...

Dalam contoh program di atas, MOV A,#0 membuat A bernilai nol, hal ini
mengakibatkan instruksi JNZ BukanNol tidak akan pernah dikerjakan (JNZ
artinya Jump kalau nilai A<>0, syarat ini tidak pernah dipenuhi karena saat
instruksi ini dijalankan nilai A=0), sedangankan instruksi JZ Nol selalu
dikerjakan karena syaratnya selalu dipenuhi.
Instruksi JC / JNC
Instruksi JC (Jump on Carry) dan instruksi JNC (Jump on no Carry) adalah
instruksi jump bersyarat yang memantau nilai bit Carry di dalam Program
Status Word (PSW).
Instruksi JB / JNB / JBC
Instruksi JB (Jump on Bit Set), instruksi JNB (Jump on not Bit Set) dan
instruksi JBC (Jump on Bit Set Then Clear Bit) merupakan instruksi Jump
bersyarat yang memantau nilai-nilai bit tertentu. Bit-bit tertentu bisa
merupakan bit-bit dalam register status maupun kaki input mikrokontroler
MCS51.
Kelompok Instruksi proses dan test
Instruksi-instruksi Jump bersyarat yang dibahas di atas, memantau kondisi
yang sudah terjadi yang dicatat MCS51. Ada dua instruksi yang melakukan dulu
suatu proses baru kemudian memantau hasil proses untuk menentukan apakah
harus Jump. Kedua instruksi yang dimaksud adalah instruksi DJNZ dan instruksi
CJNE.
Instruksi DJNZ
Instruksi DJNZ (Decrement and Jump if not Zero), merupakan instruksi yang
akan mengurangi 1 nilai register serbaguna (R0..R7) atau memori-data, dan
Jump jika ternyata setelah pengurangan 1 tersebut hasilnya tidak nol.
Contoh berikut merupakan potongan program untuk membentuk waktu
tunda secara sederhana :

MOV R0,#$23
DJNZ R0,$

Instruksi MOV R0,#$23 memberi nilai $23 pada R0, selanjutnya setiap kali
instruksi DJNZ R0,$ dikerjakan, MCS51 akan mengurangi nilai R0 dengan 1,
jika R0 belum menjadi nol maka MCS51 akan mengulang instruksi tersebut
(tanda $ dalam instruksi ini maksudnya adalah kerjakan kembali instruksi ini).
Selama mengerjakan 2 instruksi di atas, semua pekerjaan lain akan tertunda,
waktu tundanya ditentukan oleh besarnya nilai yang diisikan ke R0.

Instruksi CJNE
Instruksi CJNE (Compare and Jump if Not Equal) membandingkan dua nilai
yang disebut dan MCS akan Jump kalau kedua nilai tersebut tidak sama!

MOV A,P1
CJNE A,#$0A,TidakSama
...
SJMP EXIT
;
TidakSama:
...

Instruksi MOV A,P1 membaca nilai input dari Port 1, instruksi CJNE
A,#$0A,Tidaksama memeriksa apakah nilai Port 1 yang sudah disimpan di A
sama dengan $0A, jika tidak maka Jump ke Tidak Sama.

Operasi Bit dengan MCS51


Pada umumnya mikrokontroler mengolah data 8 bit sekali gus, misalnya
mengisi akumulator dengan data 8 bit sekali gus, isi akumulator yang 8 bit
dijumlahkan dengan isi memori yang 8 bit dan lain sebagainya. MCS51 dilengkapi
kemampuan mengolah data per bit, untuk keperluan ini bit Carry dalam PSW
diperlakukan sebagai akumulator bit, dan dilengkapi dengan beberapa instruksi
khusus untuk operasi Boolean.

Objek operasi Bit


Seperti sudah dibahas dibagian depan, memori-data nomor $20 sampai $2F
bisa dipakai menampung informasi dalam level bit. Setiap byte memori di daerah
ini bisa menampung 8 bit informasi yang masing-masing dinomori tersendiri,
misalkan bit 0 dari memori-data nomor $20 bisa disebut sebagai bit nomor 0, bit 1
memori-data nomor $20 disebut sebagai bit nomor 1 seterusnya bit 0 dari
memori-data nomor $21 disebut sebagai bit nomor 8, bit 7 memori-data nomor
$21 disebut sebagai bit nomor 15 dan seterusnyanya.
Dengan demikian memori-data nomor $20 sampai dengan nomor $2F
sebanyak 16 byte memori bisa dipakai untuk menyimpan 128 bit (16 x 8 bit) data
Boolean yang dinomori dengan bit nomor $00 sampai $7F.
Di samping itu, operasi bit bisa pula belaku di memori-data nomor $80
sampai dengan $FF yang biasa disebut sebagai Special Function Register (SFR).
Hanya SFR dengan nomor memori-data yang diakhiri dengan angka heksa-desimal
0 atau 8 yang bisa dipakai untuk operasi bit, bit pada memori-data daerah ini
sebanyak 128 bit, mendapat nomor dari $80 sampai dengan $FF.

6.2 Program Flow


Secara default, MCS-51 akan selalu memulai dari alamat 0000h dan kemudian
Pogram Counter (PC) akan bertambah sesuai dengan instruksi yang diproses.
Program-program sederhana umumnya hanya memiliki satu alur dimana program
akan dimulai dari alamat terendah ke alamat berikutnya yang lebih besar secara
berurutan, hingga program diakhiri pada alamat tertentu. Program yang lebih
secara kompleks akan memiliki alur dimana PC tidak selalu berurutan. Di dalam
program akan terdapat
instruksi untuk melompat ke alamat-alamat tertentu.

1. DIRECT JUMP
Merupakan proses dimana program akan melompat ke alamat tertentu. Alamat
ini dapat berlokasi sebelum ataupun sesudah alamat saat ini. Direct Jump ini
umumnya digunakan untuk melompat
daerah Interrupt Vector Address atau melompat ke awal rutin loop.
Contoh :
AJMP Start
Start: MOV ,#.....
MOV ,# ......h
MOV ,#.....h

2. CONDITIONAL BRANCHING
Merupakan proses dimana sebuah program memiliki dua pilihan alur dimana
alur yang melewati tergantung dari persyaratan yang diperiksa. Jika
persyaratan terpenuhi, program akan melompat ke
suatu alamat tertentu. Jika persyaratan tidak terpenuhi, program akan
berlanjut ke baris berikutnya atau melompat ke suatu alamat lain.
Contoh:
CJNE R7, #60H, NOT_EQ
; ;R7=60H
NOT_EQ: JC REG_LOW
; ;R7>60H
REG_LOW: ;R7<60H

3. DIRECT CALL
Adalah proses memanggil sebuah subrutin pada alamat tertentu. Saat MCS-51
mengeksekusi Direct Call, PC akan disimpan ke dalam stack dan program
melompat ke subrutin yang di panggil untuk di proses subrutin tersebut.
Contoh:
ACALL Delay
Delay: .h
PUSH 06h
PUSH 05h
MOV .,#........h

4. RETURN FROM SUBROUTINE


Merupakan pasangan dari Direct Call. Proses ini merupakan proses dimana
program akan keluar dari subrutin untuk melanjutkan proses selanjutnya yang
tertunda oleh Direct Call. Instruksi untuk proses ini adalah RET. Saat MCS-51
mengeksekusi RET, PC akan diambil dari stack dan program kembali ke baris
setelah baris yang mengeksekusi Direct Call.
Contoh:
ACALL Delay
ACALL
Delay: h
PUSH 06h
PUSH 05h
RET

5. INTERRUPT
Adanya Interrupt membuat program utama terhenti sebentar untuk
menjalankan Interrupt Service Rountine. Pada dasarnya proses mengeksekusi
interrupt sama dengan melakukan Direct Call ke
Interrupt Vector Addres dan Return From Subroutine pada akhirnya Interrupt
Service Routine. Perbedaannya adalah pada penggunaan RETI dan bukan RET.
Contoh:
INTER0: MOV P1,#0H
SETB P1.0
LCALL LDELAY
CLR P1.0
RETI

6.3 Perulangan
1. IF THEN
Dengan pernyataan ini kita dapat menguji sebuah kondisi tertentu dan
kemudian menentukan tindakan yang sesuai dengan kondisi yang diinginkan.
Sintak penulisannya adalah sebagai berikut:

IF <Syarat Kondisi> THEN <Pernyataan>

Sintak diatas digunakan jika hanya ada satu kondisi yang diuji dan hanya
melakukan satu tindakan. Jika melakukan lebih dari satu tindakan maka
sintaknya harus ditulis sebagai berikut:

IF <Syarat kondisi> THEN

<Pernyataan ke-1>

<Pernyataan ke-2>

<Pernyataan ke-n>

END IF

2. SELECT CASE

Perintah ini akan mengeksekusi beberapa blok pernyataan tergantung dari


nilai variabelnya. Perintah ini mirip dengan perintah IF... THEN, namun perintah
ini memiliki kelebihan yaitu kemudahan pada penulisannya. Sintaknya adalah
sebagai berikut:

SELECT CASE Variabel


CASE test1 : statement

CASE test2 : statement

CASE ELSE : statement

END SELECT

3. WHILE WEND

Perintah ini mengeksekusi sebuah pernyataan secara berulang ketika


masih menemukan kondisi yang sama. Perintah ini akan berhenti jika ada
perubahan kondisi dan melakukan perintah selanjutnya. Sintaknya sebagai
berikut:

WHILE <Syarat kondisi>

<Pernyataan>

WEND

4. DO LOOP

Perintah Do... Loop digunakan untuk mengulangi sebuah blok pernyataan


terus menerus. Untuk membatasi pengulangannya dapat ditambahkan sebuah
syarat kondisi agar perulangan berhenti dan perintahnya menjadi Do... loop
Until. Sintak penggunaan perintah ini adalah sebagai berikut:

Do

<Blok pernyataan>

Loop

Yang menggunakan perintah Do Loop Until

Do

<Blok pernyataan>

Loop Until <syarat kondisi>

5. FOR NEXT

Perintah ini digunakan untuk mengeksekusi sebuah blok pernyataan secara


berulang. Perintah ini hampir sama dengan perintah Do... Loop, namun pada
perintah For... Next ini nilai awal dan akhir perulangan serta tingkat kenaikan
atau turunnya bisa ditentukan.

Penggunaannya sebagai berikut:

For var = start To/Downto end [Step value]


<Blok pernyataan>

Next

Untuk menaikan nilai perulangan gunakan To dan untuk menurunkan gunakan


Downto. Tingkat kenaikan merupakan pilihan, jadi bisa digunakan ataupun
tidak. Jika nilai kenaikan tidak ditentukan maka secara otomatis BASCOM akan
menentukan nilainya yaitu 1.

6. EXIT
Perintah ini digunakan untuk keluar secara langsung dari blok program
For... Next, Do... Loop, Sub... Endsub, While... Wend. Sintak penulisannya adalah
sebagai berikut:

Exit [Do] [For] [While] [Sub]

Sintak selanjutnya setelah EXIT bisa bermacam-macam tergantung


perintah exit itu berada dalam perintah apa. Jika dalam perintah Do... Loop
maka sintaknya menjadi Exit Do.

7. GOSUB
Dengan perintah GOSUB program akan melompat ke sebuah label dan
akan menjalan-kan program yang ada dalam rutin tersebut sampai menemui
perintah Return. Perintah Return akan mengembalikan program ke titik setelah
perintah Gosub.

8. GOTO
Perintah GOTO digunakan untuk melakukan percabangan, perbedaannya
dengan GOSUB ialah Perintah GOTO tidak memerlukan perintah Return
sehingga programnya tidak akan kembali lagi ke titik dimana perintah GOTO itu
berada. Berikut ini adalah sintak perintah GOTO:

GOTO label

Label:

Panjang label maksimal ialah 32 karakter.


BAB 7
ADDRESSING MODE DAN INSTRUKSI PADA
MIKROKONTROLER
7.1 Addressing Mode
Addressing adalah proses mengakses sebuah lokasi memori, baik untuk
pembacaan ataupun penulisan. Cara untuk mengakses lokasi memori dapat
digolongkan ke dalam beberapa kelompok, antara lain : direct, indirect, dan
immediate.

1. Register Addressing
Register Addressing adalah proses mengakses memori dengan label antara R0
hingga R7
Contoh : MOV A, R1
Jika register bank yang digunakan adalah register bank 0, maka nilai pada
alamat 01h (R1) akan diisika ke Accumulator.

2. Direct Addressing
Sesuai dengan namanya, Direct Addressing adalah mengakses sebuah lokasi
memori secara langsung dengan menggunakan alamatnya.
Contoh : MOV A, 47h
Isi dari alamat 47h akan langsung dipindah ke Accumulator.

3. Indirect Addressing
Indirect Addressing adalah proses mengakses alamat secara tak langsung.
Contoh: MOV A, @R0
Misalkan R0 berisi 35h dan alamat 35h berisi 60h. Pada saat instruksi tersebut
diproses. CPU akan memeriksa isi R0. Karena R0 berisi 35h, maka CPU akan
mengambil isi dari alamat 35h tersebut kemudian diisikan ke Accumulator. Di
akhir proses Accumulator akan menyimpan nilai 60h.

4. Immediate Addressing
Immediate Addressing adalah proses mengisi suatu alamat memori dengan
suatu nilai tertentu.
Contoh : MOV A, #30h
Nilai 30h akan langsung diisikan ke dalam Accumulator.

5. Relative Addressing
Relative Addressing digunakan pada instruksi untuk melompat ke alamat
tertentu. Pada Relative Addressing. sebuah Relative Address atau Offset selebar
8 bit akan dijumlahkan dengan Program Counter sehingga menjadi alamat yang
dituju. Karena Relative Address hanya selebar 8 bit, maka Relative-Addressing
hanya dapat dipakai untuk melompat dalam jangkauan 128 byte ke belakang
hingga 127 byte ke depan (-l28 s/d+ 127).
Contoh : SJMP SINI
sedangkan alamat label SINI adalah 1120h. Setelah instruksi tersebut diproses,
PC meniadi bernilai 1102h. Berarti Relative Address-nya bernilai Fh (1102h +
000Fh = 1120h). Jika alamat label SINI 10F2h, maka Relative Address-nya
bernilai -16 atau F0h. Dalam perhitungannya F0h akan diubah dalam 16 bit
hingga menjadi FFF0h (1102h + FFF0h = 10F2h).
Relative Addressing lebih fleksibel dipakai karena tidak terpengaruh oleh lokasi
memori, namun jangkauannya terbatas.

6. Absolute Addressing
Absolute Addressing adalah melompat atau memanggil alamat yang dituju
dengan menyatakan lokasi alamatnya secara langsung (tidak menggunakan
offset). Absolute Addresing hanya digunakan dalam AJMP dan ACALL. Kapasitas
internal program memory sebesar 64 KB dibagi menjadi 32 pages dengan
kapasitas masing-masing page sebesar 2 KB (0000h - 07FFh, 0800h - 0FFFh,
dst.). Alamat yang dituju langsung dinyatakan dalam 16 bit dimana 5bit teratas
menunjukkan 2 KB page dan 11 bit terbawah menunjukkan alamat dalam 2 KB
page tersebut. Saat Absolute Addressing digunakan, bagian yang berubah
hanyalah 11 bit terbawah, sedangkan 5 bit teratas tetap.
Contoh : AJMP SINI
Misalkan alamat instruksi tersebut berada pada 1810h (0001100000010000b)
dan 1811h (0001100000010001b) sedangkan alamat label SINI adalah 1F1Fh
(0001111100011111b). Semua alamat memiliki 5 bit teratas yang sama
(00011) sedangkan l1 bit sisanya bernilai sesuai alamat yang dituju, yaitu
11100011111. Jangkauan Absolute Addressing lebih jauh dari pada Relative
Addressing, namun jangkauannya hanya dalam 2 KB page yang sama. Oleh
karena itu Absolute Addressing tidak dapat digunakan untuk melompat dari
alamat 07F0h (0000011111110000b) ke alamat 0810h (0000100000010000b)
meskipun jarak keduanya hanya sebesar 20h.

7. Long Addressing
Long Addressing adalah melompat atau memanggil alamat yang dituju
dengan menyatakan lokasi alamatnya secara langsung (tidak menggunakan
offset). Long Addressing hanya digunakan dalam LJMP dan LCALL. Alamat yang
dituju dinyatakan dalam 16 bit yang dapat dipakai semuanya sehingga dapat
melompat sejauh mungkin dalam jangkauan 64 KB.
Contoh : LJMP SINI

Jangkauan Long Addressing paling jauh daripada Relative atau Absolute


Addressing, namun instruksi Long Addressing memiliki lebar 3 byte sedangkan
Relative dan Absolute Addressing masing-masing hanya selebar 2 byte.Untuk
program-program yang memiliki ruang program memori terbatas, akan lebih
baik jika Long Addressing hanya digunakan untuk melompat ke lokasi yang
berada di luar jangkauan Relative dan Absolute Addressing.

8. Indexed Addressing
Indexed Addressing adalah proses mengakses suatu alamat dengan
menggunakan indeks dan register basis (berupa DPTR atau PC). Instruksi yang
menggunakan Indexed Addressing adalah : MOVC A, @A+<register basis> dan
JMP @A+DPTR.
Contoh : MOVC A, @A+DPTR

Misalkan DPTR berniat 1000h, Accumulator bemilai 2h, dan alamat 1002h
menyimpan nilai FFh. Saat instruksi tersebut diproses, CPU akan mengambil
data pada alamat 1002h (1000h + 2h) dan mengisikannya ke Accumulator.
Diakhir proses, Accumulator akan menyimpan nilai FFh.
Indexed Addressing ini umumnya digunakan untuk mengakses lookup table.
Dengan menetapkan nilai register basis terlebih dahulu, user hanya perlu
mengubah nilai Accumulator untuk mendapatkan nilai-nilai dalam tabel.

7.2 Instruksi Pada Mikrokontroler


1. MOV
Perintah ini digunakan untuk operasi pertambahan
contoh :

Mov a, p3 : menyalin isi data pada port 3 ke dalam akumulator


Mov p3, r5 :menyalin isi data yang nilainya yang terdapat pada register5 ke
dalam port 3
MOV CX, 0Ah :mengisikan jumlah loop yang ingin dilakukan denganperincian
0-9 terdiri dari 10 angka
MOV DL,30h : bilangan ASCII yang sama dengan 30 hexa adalah 0 yang
akan dicetak dahulu dan dimasukkan ke dalam DLsesuai dengan Int 21 hexa
service 02 hexa
MOV AH,02 h :AH diisi dengan service number dari interrupt

2. INC
Perintah yang digunakan untuk melakukan penambahan 1
Contoh :

INC A : Meningkatkan Akumulator sebesar 1 bit


INC Rn : Meningkatkan Register
INC DL : Menambahkan DL dengan 1
INC @R1 : Data pada alamat R1 ditambah 1
INC @Ri : Meningkatkan RAM tidak langsung

3. JMP (JUMP)
Perintah yang digunakan untuk melompat ke suatu label yang dituju
Contoh :

Sjmp anda : lompat atau jalankan langsung program pada label anda
Sjmp proses : lompat atau jalankan langsung program pada label proses
Ljmp 500h : lompat atau jalankan langsung program pada alamat
memori 100h
JMP 0203 : lompat ke arah lokasi memori offset:0203
CMP BX,0230 : membandingjan BX dengan 0230

4. ADD
Perintah yang digunakan untuk operasi penambahan
Contoh :

ADD A,Rn : menambahkan register ke akumulator


ADD A,@Ri : menambahkan RAM tidak langsung ke akumulator
ADD A, #DATA : menambahkan data segera ke akumulator
ADDC A, Rn : menambahkan register ke akumulator dengan carry
ADDC A, @Ri : menambahkan RAM tidak langsung ke akumulator dengan
carry

5. SUB
Perintah yang digunakan untuk pengurangan
Contoh :

SUBB A, Rn : mengurangi register dari akumulator dengan borrow


SUBB A, @Ri : mengurangi RAM tidak langsung dari akumulator dengan
borrow
SUBB A, #DATA : mengurangi data segera dari akumulator dengan
borrow
SUBB A, langsung : mengurangi byte langsung dari akumulator dengan
borrow
SUB A, 00H : mengurangi data pada alamat memori 00H dengan borrow

6. DEC
Perintah yang digunakan untuk melakukan pengurangan 1
Contoh :

DEC A : Menurunkan akumulator


DEC Rn : Menurunkan Register
DEC LANGSUNG : Menurunkan RAM langsung
DEC @Ri : Menurunkan RAM tidak langsung
DEC 06H : 06H 1 = 05H

7. MUL
Perintah yang digunakan untuk melakukan operasi perkalian
Contoh :

MUL AB : Mengalikan A & B


MUL BL : mengalikan nilai register BL dengan nilai register AL
dandisimpan di register AX
MUL BX : Mengalikan nilai register BX dengan nilai register AX
dandisimpan di register DX
MUL BC : Mengalikan nilai register BC dengan nilai register AC
dandisimpan di register DC
MUL BZ : Mengalikan nilai register BZ dengan nilai register AZ
dandisimpan di register DZ
MUL BD : Mengalikan nilai register BD dengan nilai register AD
dandisimpan di register DD

8. DIV
Perintah yang digunakan untuk melakukan operasi pembagian
Contoh :

DIV A,B : membagi nilai A dengan B


DIV B,C : membagi nilai B dengan C
DIV C,D : membagi nilai C dengan D
DIV D,E : membagi nilai D dengan E
DIV E,F : membagi nilai E dengan F

9. ANL
Perintah yang digunakan untuk operasi logika AND
COntoh :

ANL A,05H : Proses AND terhadap A ke 05H


ANL A,@R0 : Proses AND terhadap A ke RAM
ANL A,#50H : Proses AND terhadap A ke data pada alamat memori 50H
ANL 07H, A : Proses AND terhadap 07H ke Akumulator
ANL 07H, #02H : Proses AND terhadap 07H ke 02H

10.ORL
Perintah yang digunakan untuk operasi logika OR
Contoh:
ORL A, 07H : proses OR terhadap Akumulator ke 07H
ORL A, @R0 : Proses OR terhadap A ke RAM
ORL A,#60H : Proses OR terhadap A ke data pada alamat memori 60H
ORL 08H, A : Proses OR terhadap 08H ke Akumulator
ORL 09H, #03H : Proses OR terhadap 09H ke 03H

11.XRL
Perintah yang digunakan untuk operasi logika XOR
Contoh:

XRL A, 07H : proses XOR terhadap Akumulator ke 07H


XRL A, @R0 : Proses XOR terhadap A ke RAM
XRL A,#60H : Proses XOR terhadap A ke data pada alamat memori 60H
XRL 08H, A : Proses XOR terhadap 08H ke Akumulator
XRL 09H, #03H : Proses XOR terhadap 09H ke 03H

12.CLR
Perintah yang digunakan untuk mereset data
Contoh:

CLR A : Proses untuk menghapus data A


CLR B : Proses untuk menghapus data B
CLR C : Proses untuk menghapus data C
CLR D : Proses untuk menghapus data D
CLR E : Proses untuk menghapus data E

13.CPL
Perintah yang digunakan untuk mengkomplemenkan data
Contoh:

CPL A : Menentukan komplemen A


CPL B : Menentukan komplemen B
CPL C : Menentukan komplemen C
CPL D : Menentukan komplemen D
CPL E : Menentukan komplemen E

14.RR/RL
Perintah yang digunakan untuk menggeser posisi sebanyak 1 bit
Contoh:

RR A : geser ke kanan 1 bit pada akumulator


RL A : geser ke kiri 1 bit pada akumulator
RR rx : geser ke kanan 1 bit pada isi register x
RL rx : geser ke kanan 1 bit pada isi register x

15.SETB
Perintah yang digunakan untuk memberikan logika 1 pada suatu port
Contoh:

SETB P1.0 : memberikan logika 1 pada port 1.0


SETB P1.3 : memberikan logika 1 pada port 1.3
SETB P2.3 : memberikan logika 1 pada port 2.3
SETB P1.8 : memberikan logika 1 pada port 1.8
SETB P1.1 : memberikan logika 1 pada port 1.1

16.JB/ JNB
Perintah yang digunakan untuk lompat ke label subprogram bila nilai port x.y
berlogika LOWatau mempunyai nilai nol
Contoh :

Jnb p1.0, go : ke label subprogram bila nilai port 1.0 berlogika LOW
Jnb p2.0, go : ke label subprogram bila nilai port 2.0 berlogika LOW
Jnb p3.0, go : ke label subprogram bila nilai port 3.0 berlogika LOW
Jnb p4.0, go : ke label subprogram bila nilai port 4.0 berlogika LOW
Jnb p5.0, go : ke label subprogram bila nilai port 5.0 berlogika LOW

17.JZ/JNZ
Perintah yang digunakan untuk mengurangi nilai isi data pada register x dan
bila nilainya belumtercapai maka akan dilakukan lompatan ke label
subprogram
Contoh:

Mov B,#00H : Jika Nilai akumulator A adalah 00H Jump Ke alamat untuk
eksekusi Mov B,#00H
JNZ R7, gaul : kurangi nilai isi data pada register R7 dan bila nilainya
belumtercapai 0 maka dilakukan lompatan subprogram dengan label
GAUL
JNZ R10, coba : kurangi nilai isi data pada register R10 dan bila
nilainyabelum tercapai 0 maka dilakukan lompatan subprogram dengan
label COBA
JNZ R12, klik : kurangi nilai isi data pada register R12 dan bila nilainya
belumtercapai 0 maka dilakukan lompatan subprogram dengan label
KLIK
JNZ R3, pilih : kurangi nilai isi data pada register R3 dan bila nilainya
belumtercapai 0 maka dilakukan lompatan subprogram dengan label
PILIH

18.CJNE
perintah yang digunakan untuk membandingkan apakah nilai data sama
dengan nilai xyz , bilanilainya tidak sama maka lompat ke label subprogram
Contoh:

CJNE RV, XYZ, YUK : perintah yang digunakan untuk membandingkan


apakahnilai register v sama dengan nilai xyz , bila nilainya tidak sama
maka lompat ke labelsubprogram YUK
CJNE RX, XYZ, MARI : perintah yang digunakan untuk membandingkan
apakahnilai register v sama dengan nilai xyz , bila nilainya tidak sama
maka lompat ke labelsubprogram MARI
CJNE RZ, XYZ, COBA : perintah yang digunakan untuk membandingkan
apakahnilai register v sama dengan nilai xyz , bila nilainya tidak sama
maka lompat ke labelsubprogram COBA
CJNE R2, XYZ, RUN : perintah yang digunakan untuk membandingkan
apakah nilairegister v sama dengan nilai xyz , bila nilainya tidak sama
maka lompat ke labelsubprogram RUN
CJNE R5, XYZ, OUT : perintah yang digunakan untuk membandingkan
apakah nilairegister v sama dengan nilai xyz , bila nilainya tidak sama
maka lompat ke labelsubprogram OUT
19.NOP
Perintah yang digunakan untuk Melakukan Penundaan pada program sebesar 1
cycle (1 microdetik).
CONTOH
Ajmp Lompatan1Mov A,#05HLompatan1 :NOPNOPMov R0,#00H
BAB 8
KOMUNIKASI SERIAL PADA MIKROKONTROLER
8.1 Komunikasi Serial
MCS-51 memiliki kemampuan untuk berkomunikasi secara serial melalui pin RXD
dan TXD. Satu hal yang perlu diingat adalah tingkat tegangan komunikasi kedua
pin serial menggunakan tingkat tegangan TTL. Pada prinsipnya, komunikasi serial
adalah komunikasi dimana transmisi data dilakukan per bit. Interface serial hanya
membutuhkan jalur yang sedikit (umumnya hanya 2 jalur), sehingga lebih
menghemat pin jika dibandingkan dengan interface paralel.
Komunikasi serial ada dua macam, asynchronous serial dan synchronous serial.

1. Synchronous serial adalah komunikasi dimana hanya ada satu pihak


pengirim atau penerima) yang menghasilkan clock dan mengirimkan clock
tersebut bersama-sama dengan data. Contoh pengunaan synchronous serial
terdapat pada transmisi data keyboard.
2. Asynchronous serial adalah komunikasi dimana kedua pihak (pengirim dan
penerima) masing-masing menghasilkan clock namun hanya data yang
ditransmisikan, tanpa clock. Agar data yang dikirim sama dengan data yang
diterima, maka kedua frekuensi clock harus sama dan harus terdapat
sinkronisasi. Setelah adanya sinkronisasi, pengirim akan mengirimkan datanya
sesuai dengan frekuensi clock pengirim dan penerima akan membaca data
sesuai dengan frekuensi clock penerima. Contoh penggunaan asynchronous
serial adalah pada Universal Asynchronous Receiver Transmitter (UART) yang
digunakan pada serial port (COM) komputer. MCS-51 mendukung komunikasi
secara asinkron, bahkan tiga dari empat serial mode yang dimiliki MCS-51
kompatibel dengan UART.

MCS-51 memiliki 4 mode komunikasi serial. Mode 0 berupa synchronous serial


(shift register), sedangkan tiga mode yang lain berupa asynchronous serial (UART).
Pada semua mode, pengiriman dilakukan jika ada instruksi yang mengisi nilai
register SBUF. Sedangkan pada saat penerimaan, data yang diterima akan
disimpan pada register SBUF.

1. MODE 0
Mode 0 adalah 8 bit shift register dimana data dikirimkan dan diterima melalui
pin RXD sedangkan clock dikirimkan dan diterima melalui pin TXD. Pengiriman
data 8 bit dilakukan dengan
mengirimkan Least Significant Bit (LSB) terlebih dahulu. Pada mode 0, baud
rate yang gunakan adalah sebesar 1/12 dari frekuensi osilator.
2. MODE 1
Pada mode 1, jumlah data yang dikirimkan sebanyak 10 bit yang terdiri dari
start bit, 8 bit data (LSB terlebih dahulu), dan stop bit. Ada proses penerimaan,
nilai stop bit akan dimasukkan ke RB8 secara otomatis. Pada proses
pengiriman, stop bit akan diberi nilai 1 secara otomatis. Pada mode 1, baud
rate yang digunakan dapat diatur melalui Timer 1.

3. MODE 2
Pada mode 2, jumlah data yang dikirimkan sebanyak 11 bit yang terdiri dari
start bit, 8 bit data (LSB terlebih dahulu), bit ke-9, dan stop bit. Pada proses
pengiriman, nilai bit ke 9 dapat diatur dengan mengisi nilai TB8. Pada proses
penerimaan, bit ke 9 akan dimasukkan ke RB8 secara otomatis.
Pada mode 2, baud rate yang dapat digunakan adalah sebesar 1/64 frekuensi
osilator atau 1/32 frekuensi osilator jika SMOD bernilai 1.

4. MODE 3
Mode 3 hampir sama dengan mode 2. Perbedaannya terdapat pada baud rate
yang digunakan. Jika mode 2 menggunakan baud rate yang pasti, mode 3
menggunakan baud rate yang dihasilkan oleh Timer 1.

8.2 Aplikasi Komunikasi Serial


Komunikasi serial merupakan komunikasi data dengan pengiriman data secara
satu per satu dengan menggunakan satu jalur kabel data. Sehingga komunikasi
serial hanya menggunakan 2 kabel data yaitu kabel data untuk pengiriman yang
disebut transmit dan kabel data untuk penerimaan yang disebut receive.
Kelebihan dari komunikasi serial adalah jarak pengiriman dan penerimaan
dapat dilakukan dalam jarak yang cukup jauh dibandingkan dengan komunikasi
secara parallel. Tetapi kekurangannya adalah kecepatan yang lebih lambat bila
dibandingkan komunikasi parallel.
Untuk saat ini sedang dikembangkan teknologi serial baru yang dinamakan
USB atau Universal Serial Bus. USB ini memiliki kecepatan pengiriman dan
penerimaan data lebih cepat disbanding serial biasa. Contoh jenis komunikasi
serial yang terkenal adalah RS-232 dan RS-489.
BAB 9
INTERFACING MIKROKONTROLER

9.1 ADC, DAC, Dan Analog Comparator


1. ADC
Fungsi ADC adalah merubah besaran analog (biasanya tegangan) ke
bilangan digital. Mikrokontroler dengan fasilitas ini dapat digunakan untuk
aplikasi-aplikasi yang memerlukan informasi analog (misalnya voltmeter,
pengukur suhu dll).
Terdapat beberapa tipe dari ADC sbb:

Succesive Approximation A/D converters.


Single Slope A/D converters.
Delta-Sigma A/Ds converters.
Flash A/D.

2. DAC
Fungsi DAC adalah merubah besaran digital (biasanya tegangan) ke
bilangan analog. Kebalikan dari ADC seperti diatas

3. Analog Comparator
Komparator analog atau komparator tegangan adalah suatu devais yang
dapat membandingkan dua tegangan input. Komparator analog dapat
digunakan sebagai alarm angin puting beliung/tornado jika salah satu inputnya
dihubungkan dengan anemometer. Komparator analog juga dapat digunakan
sebagai pengukur waktu pengisian muatan pada kapasitor jika dihubungkan
dengan sebuah mikrokontroler.
Komparator analog pada dasarnya adalah suatu Op-Amp (Operational
Amplifier). Sepertihalnya Op-Amp, komparator analog memiliki pin input tak
membalik (non-inverting input), input membalik (inverting input), output,
voltase sumber positif (V+) dan sumber negatif (V-). Input tak membalik (+)
berfungsi sebagai voltase referensi (Vref), sedangkan voltase input (Vin)
dihubungkan dengan pin input membalik (-). Jika (+) > (-), voltase output (Vo)
akan mendekati V+. Dan sebaliknya jika (+) < (-), Vo bernilai di sekitar V.
Eksperimen ini menggunakan LF353P (Texas Instrument) yang merupakan
dua buah unit Op-Am yang dikemas dalam sebuah chip. Menurut datasheet,
voltase sumber positif (V+) yang dibutuhkan adalah 3.5V-18V. Sedangkan V-
dihubungkan dengan 0 V (ground). Eksperimen inibertujuan untuk mengetahui
karakteristik komparator analog LF353P pada tegangan kerja, yaitu V+.

9.2 Minimum Sistem


Proses perancangan minimum system merupakan tahap yang harus dikuasai agar
sistem yang dirancang dapat berfungsi sebagaimana mestinya.
Langkah pertama dalam merancang sistem adalah menentukan mikrokontroler
yang akan digunakan. Varian yang sering digunakan dalam minimum system
adalah 89C51. IC 89C51 memiliki kemampuan dan fasilitas yang cukup lengkap
untuk aplikasi sederhana dan umum. Namun tidak menutup kemungkinan 89C51
digunakan untuk aplikasi yang jauh lebih rumit asalkan sistem yang digunakan
memiliki komponen pendukung yang lengkap.
Setelah menentukan mikrokontroler yang akan digunakan, IC tersebut harus
dilengkapi dengan komponen dasar seperti sumber clock dan rangkaian reset.
Minimum system yang sering digunakan untuk berkomunikasi secara serial
dangan protokol UART umumnya menggunakan crystal oscillator dengan frekunesi
11,0592 MHz. Rangkaian reset pada pembahasan tentang reset dapat
diaplikasikan. Namun rangkaian tersebut dapat digantikan dengan sebuah IC
reset. IC reset yang sering digunakan adalah DS1812.

Jumper pada.rangkaian gambar diatas digunakan untuk memilih sumber reset. Jika
jumper menghubungkan pin 1 dan 2, maka minimum system berada pada mode
download dimana sumber reset bukan dari DS 1812 melainkan dari sumber di luar
minimum system. Jika jumper menghubungkan pin 2 dan 3, maka minimum
system berada dalam mode stand alone dimana proses reset akan dilakukan oleh
DS 1812 dan minimum system akan langsung mengeksekusi program yang telah
di-download.
Minimum system yang baik memiliki kemampuan untuk mengakses external
memory. Untuk menghubungkan antara mikrokontroler dan memori dibutuhkan
sebuah IC latch. Komponen yang sering digunakan sebagai latch adalah 74L5573.
Selain itu, minimum system juga memiliki rangkaian overlap. Hal ini bertujuan
untuk mempermudah proses pengembangan program dan menghemat waktu
karena program lebih mudah dituliskan ke external memory daripada dituliskan ke
dalam 89C51. Untuk menuliskan program ke dalam 89C51 user masih harus
melepas IC tersebut. Sedangkan untuk menuliskan program ke external memory,
user tidak perlu melepas IC apapun. Komponen yang sering digunakan sebagai
overlap adalah 74LS08.

Address decoding menentukan berapa pembagian ruang external memory dan


berapa kapasitas masing-masing ruang. Sistem address decoding yang sering
digunakan adalah membagi 64 KB external memory menjadi 8 ruang yang masing-
masing berkapasitas 8 KB. Komponen yang sering digunakan untuk membagi
external memory menjadi 8 bagian adalah 74LS138.
Address decoding berkaitan erat dengan memory mapping. Memory Mapping
adalah pemetaan semua external memory yang digunakan dalam minimum
system. Hal ini penting karena berkaitan dengan proses pemrograman, alokasi
program memori dan data memori, serta penambahan peripheral. Peripheral dasar
yang dibutuhkan minimum system adalah memori sebagai penyimpan program
dan data, serta Programmable Peripheral Interface. (PPI). Memori yang sering
digunakan adalah EEPROM 28C64B. Sedangkan PPI 82C55 dibutuhkan sebagai
jalur input/output untuk menggantikan port 0 dan port 2 89C51 yang digunakan
sebagai address dan data bus.
BAB 10
CONTOH APLIKASI DAN PROGRAM MIKROKONTROLER
10.1 Led / Jam Digital / Seven Segmen
Seven Segment adalah tujuh segmen-segmen yang digunakan menampilkan
angka. Seven segment merupakan display visual yang umum digunakan dalam
dunia digital. Seven segment sering dijumpai pada jam digital, penujuk antrian,
diplay angka digital dan termometer digital. Penggunaan secara umum adalah
untuk menampilkan informasi secara visual mengenai data-data yang sedang
diolah oleh suatu rangkaian digital.
Seven segmen ini tersusun atas 7 bbuah LED yang disusun membentuk angka
8 yang penyusunnya menggunakan diberikan lebel dari a sampai g dan satu lagi
untuk dot point (DP). Setiap segmen ini terdiri dari 1 atau 2 Light Emitting Diode
( LED ). salah satu terminal LED dihubungkan menjadi satu sebagai kaki common.

Jenis-jenis Seven Segment :


1. Common Anoda
Semua anoda dari LED dalam seven segmen disatukan secara parallel dan semua
itu dihubungkan ke VCC, dan kemudian LED dihubungkan melalui tahanan
pembatas arus keluar dari penggerak LED. Karena dihubungkan ke VCC, maka
COMMON ANODA ini berada pada kondisi AKTIF LOW (led akan menyala/aktif bila
diberi logika 0).

2. Common Katoda
Merupakan kebalikan dari Common Anoda. Disini semua katoda disatukan secara
parallel dan dihubungkan ke GROUND. Karena seluruh katoda dihubungkan ke
GROUND, maka COMMON KATODA ini berada pada kondisi AKTIF HIGH (led akan
menyala/aktif bila diberi logika 1).

Prinsip Kerja :
Prinsip kerja seven segmen ialah input biner pada switch dikonversikan masuk ke
dalam decoder, baru kemudian decoder mengkonversi bilangan biner tersebut
menjadi decimal, yang nantinya akan ditampilkan pada seven segment.
Seven segment dapat menampilkan angka-angka desimal dan beberapa karakter
tertentu melalui kombinasi aktif atau tidaknya LED penyusunan dalam seven
segment. Untuk memudahkan penggunaan seven segment, umumnya digunakan
sebuah decoder( mengubah/ mengkoversi input bilangan biner menjadi decimal)
atau seven segment driver yang akan mengatur aktif tidaknya led-led dalam
seven segment sesuai dengan nilai biner yang diberikan.
Dekoder BCD ke seven segment digunakan untuk menerima masukan BCD 4-bit
dan memberikan keluaran yang melewatkan arus melalui segmen untuk
menampilkan angka desimal. Jenis dekoder BCD ke seven segment ada dua
macam yaitu dekoder yang berfungsi untuk menyalakan seven segment mode
common anoda dan dekoder yang berfungsi untuk menyalakan seven segment
mode common katoda. Contoh IC converter BCD to Seven Segment untuk 7-
segment Common Anoda pake decoder IC TTL 7447 untuk Common Katoda pakai
IC TTL 7448.

Program Jam Sederhana dengan Seven Segmen


#include <mega8.h>
#include <delay.h>
//-------------------7seg-------------------------------
#define set PORTD
//-------------------enable-----------------------------
#define enable1 PORTC.2
#define enable2 PORTC.3
#define enable3 PORTC.4
#define enable4 PORTC.5
//-------------------tombol----------------------------
#define tombol1 PINB.1
#define tombol2 PINB.3
//-------------------kondisi---------------------------
#define mati 1
#define nyala 0

unsigned char x=5,a


,y,detik,sat_mnt,pul_mnt,sat_jam,pul_jam,hit[10]={0b01111111, 0b00011100,
0b10111011, 0b10111110, 0b11011100, 0b11101110, 0b11100111, 0b00111100,
0b11111111, 0b11111110}; //common katoda

void rolling()
{
enable4=1;enable1=0;
set=hit[sat_mnt];
delay_ms(x);
if(sat_mnt>9){sat_mnt=0;pul_mnt++;}
enable1=1;enable2=0;
set=hit[pul_mnt];
delay_ms(x);
if(pul_mnt>5){pul_mnt=0;sat_jam++;}
enable2=1;enable3=0;
set=hit[sat_jam];
delay_ms(x);
if(sat_jam>9){sat_jam=0;pul_jam++;}
enable3=1; enable4=0;
set=hit[pul_jam];
delay_ms(x);
if(pul_jam>=4&&sat_jam==2){sat_jam=0;pul_jam=0;}

void setting()
{
while(1)
{
if (tombol1==0)
{
delay_ms(200);
while(tombol1==0);
a++;

if(a==1)
{ for(;;)
{
enable4=1;enable1=0;;set=hit[sat_mnt];
if(tombol2==0){ delay_ms(200); while(tombol2==0);sat_mnt+
+;if(sat_mnt>9)sat_mnt=0;}
else if(tombol1==0){break;};
};
}
else if(a==2)
{ for(;;)
{
enable1=1;enable2=0;;set=hit[pul_mnt];
if(tombol2==0){ delay_ms(200); while(tombol2==0);pul_mnt+
+;if(pul_mnt>5)pul_mnt=0;}
else if(tombol1==0){break;};
};
}
else if(a==3)
{ for(;;)
{
enable2=1;enable3=0;;set=hit[sat_jam];
if(tombol2==0){ delay_ms(200); while(tombol2==0);sat_jam+
+;if(sat_jam>9)sat_jam=0;}
else if(tombol1==0){break;};
};
}
else if(a==4)
{ for(;;)
{
enable3=1; enable4=0;;set=hit[pul_jam];
if(tombol2==0){delay_ms(200); while(tombol2==0);pul_jam+
+;if(pul_jam>2)pul_jam=0;}
else if(tombol1==0){break;};
};
}
else if(a>4){a=0;goto lanjut;};
}

else if(a==0)break;

lanjut:

void jalan()
{
for (detik=1;detik<60;detik++)
{
DDRB.4=DDRB.5=1;
PORTB.5=1;
PORTB.4=1;
for (y=0;y<=24;y++)
{
rolling();
setting();

};
PORTB.4=0;
PORTB.5=0;
for (y=0;y<=24;y++)
{
rolling();
setting();
};

};
sat_mnt++;

void main(void)
{

PORTB=0xFF;
DDRB=0x00;

PORTC=0xFF;
DDRC=0xFF;

PORTD=0x00;
DDRD=0xFF;

set=hit[0];
delay_ms(10);

while(1)
{ jalan(); }

10.2 PWM (Pulse Width Modulation)


PWM adalah singkatan dari Pulse Width Modulation, merupakan suatu metode
yang digunakan untuk mengontrol daya yang berkaitan dengan power supply,
contohnya pada power supply PC. Selain fungsi PWM yang digunakan untuk
mengontrol daya power supply, PWM juga dapat difungsikan sebagai pengatur
gerak perangkat elektronika, misalnya pada motor servo.

Sesuai dengan namanya Pulse Width Modulation, maka dalam penerapannya


sinyal tegangan-lah yang di rubah lebarnya. Sistem pengontrolan dengan PWM ini
merupakan sistem digital, yang jauh lebih efisien jika dibandingkan dengan sistem
konfensional.

Komponen yang biasa digunakan untuk membangkitkan sinyal PWM adalah


sejenis IC digital yaitu IC 555 atau mikrokontroler.

Aplikasi PWM berbasis mikrokontroler biasanya berupa, pengendalian


kecepatan motor DC, Pengendalian Motor Servo, Pengaturan nyala terang LED.
Oleh karena itu diperlukan pemahaman terhadap konsep PWM itu sendiri.

Konsep Dasar
Sinyal PWM pada umumnya memiliki amplitudo dan frekuensi dasar yang
tetap, namun memiliki lebar pulsa yang bervariasi. Lebar Pulsa PWM berbanding
lurus dengan amplitudo sinyal asli yang belum termodulasi. Artinya, Sinyal PWM
memiliki frekuensi gelombang yang tetap namun duty cycle bervariasi (antara 0%
hingga 100%)
Pulse Width Modulation (PWM) merupakan salah satu teknik untuk
mendapatkan signal analog dari sebuah piranti digital. Sebenarnya Sinyal PWM
dapat dibangkitkan dengan banyak cara, dapat menggunakan metode analog
dengan menggunakan rankaian op-amp atau dengan menggunakan metode
digital.
Dengan metode analog setiap perubahan PWM-nya sangat halus, sedangkan
menggunakan metode digital setiap perubahan PWM dipengaruhi oleh resolusi dari
PWM itu sendiri. Resolusi adalah jumlah variasi perubahan nilai dalam PWM
tersebut. Misalkan suatu PWM memiliki resolusi 8 bit berarti PWM ini memiliki
variasi perubahan nilai sebanyak 2 pangkat 8 = 256 variasi mulai dari 0 255
perubahan nilai yang mewakili duty cycle 0 100% dari keluaran PWM tersebut

Anda mungkin juga menyukai