Top Banner
MAKALAH MIKROKONTROLER Oleh SUHENDRI (K11109023) TULUS PRANATA (K11109025) PROGRAM STUDI SISTEM KOMPUTER
57

Makalah Mikrokontroler

Jul 26, 2015

Download

Documents

Tulus Pranata
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Makalah Mikrokontroler

MAKALAHMIKROKONTROLER

Oleh

SUHENDRI (K11109023)TULUS PRANATA (K11109025)

PROGRAM STUDI SISTEM KOMPUTERFAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS TANJUNGPURA2012

Page 2: Makalah Mikrokontroler

BAB 1PENDAHULUAN

1.1 Sejarah MikrokontrolerMikrokontroler 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 sendiri2. rangkaian reset agar mikrokontroler dapat menjalankan program mulai dari awal3. rangkaian clock, yang digunakan untuk memberi detak pada CPU4. rangkaian catu daya, yang digunakan untuk memberi sumberdaya

Page 3: Makalah Mikrokontroler

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 MikrokontrolerSecara 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 MCS51Mikrokontroler 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. AVRMikrokontroler Alv and Vegard’s 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.

Page 4: Makalah Mikrokontroler

3. PICPada 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 MikroprosesorSebuah 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 Mikrokontroler1. 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.

Page 5: Makalah Mikrokontroler

2. Mikrokontroler PICPIC 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 MaximMaxim 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.

Page 6: Makalah Mikrokontroler

BAB 2Clock dan CPU Timing

2.1 Arsitektur Mikrokontroler1. 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 HarvardArsitektur 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 MikrokontrolerA. 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 2Merupakan 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 3Merupakan dual-purpose port. Selain sebagai port I/O juga mempunyai fungsi khusus yang ditunjukkan pada tabel berikut.

Page 7: Makalah Mikrokontroler

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 XTAL1XTAL2 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 ClockPeran 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 ResetProses 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.

Page 8: Makalah Mikrokontroler

BAB 3ARSITEKTUR MIKROKONTROLER

3.1 ArsitekturArsitektur 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 MemoriMemori 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.

Page 9: Makalah Mikrokontroler

BAB 4INTERRUPT 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.

- ESbernilai ‘1’ untuk mengaktifkan interrupt dari komunikasi serial.

- ET1bernilai ‘1’ untuk mengaktifkan interrupt dari Timer/counter 1.

- EX1bernilai ‘1’ untuk mengaktifkan interrupt dari External Interrupt 1.

- ET0bernilai ‘1’ untuk mengaktifkan interrupt dari Timer/Counter 0

- EX0bernilai ‘1’ untuk mengaktifkan interrupt dari External Interrupt 0.

Page 10: Makalah Mikrokontroler

BAB 5KENDALI 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/TC/T harus diberi nilai ‘1’ oleh program user untuk menjalankan mode counter dan diberi nilai ‘0’ untuk menjalankan mode timer.

- M1 & M0Ml dan MO merupakan dua bit pemilih mode operasi timer/counter,

Page 11: Makalah Mikrokontroler

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.

- TR1harus diberi nilai ‘1’ oleh program user untuk menjalankan Timer 1.

- TF0diberi 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.

- TR0harus 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.

Page 12: Makalah Mikrokontroler

Gambar Timer/Counter mode 0

- MODE 1Mode 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 2Mode 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

Page 13: Makalah Mikrokontroler

- MODE 3Pada 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 TCONLangkah 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, #01011010batauMOV TMOD, #5Ah

Sedangkan untuk menjalankan kedua timer, instruksinya adalah sebagai beikut :MOV TCON, #01010000batauMOV TCON, #50hatauSETB TR0SETB TR1

Page 14: Makalah Mikrokontroler

2. THx dan/atau TLxJika 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, #81hMOV TL0, #4AhMOV TH1, #0CFhMOV TL1, #32h

3. IE dan/atau IPJika 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, #00001000bMOV IE, #10002020batauMOV IP, #08hMOV IE, #8AhatauSETB PT1SETB ET1SETB ET0SETB 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

Page 15: Makalah Mikrokontroler

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.

Page 16: Makalah Mikrokontroler

BAB 6PEMROGRAMAN 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 MCS51Data 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.

Page 17: Makalah Mikrokontroler

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 MCS51Secara 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 DATAKode 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,$20MOV A,@R1MOV A,P1MOV 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 indirectMOVC 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,@DPTRMOVX A,@R0MOVX A,@R1MOVX @DPTR,AMOVX @R0,AMOVX @R1,A

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

Page 18: Makalah Mikrokontroler

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 SUBBIsi 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 DAPerintah 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 ABBilangan 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.

Page 19: Makalah Mikrokontroler

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 JUMPMikrokontroler 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

Page 20: Makalah Mikrokontroler

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 LJMPKode 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 $2000TugasBaru: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 AJMPNomor 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 $800AJMP DaerahIniAJMP DaerahLainORG $900DaerahIni: . . .ORG $1000

Page 21: Makalah Mikrokontroler

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 SJMPNomor 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 2’s 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 $0F80SJMP DaerahLain. . .ORG $1000DaerahLain:

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-rutinInstruksi-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).

Page 22: Makalah Mikrokontroler

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 BersyaratInstruksi 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 dilaksanakan. Cara ini dipakai pula untuk instruksi SJMP.

Instruksi JZ / JNZInstruksi JZ (Jump if Zero) dan instruksi JNZ (Jump if not Zero) adalah instruksi JUMP

bersyarat yang memantau nilai Akumulator A.

MOV A,#0JNZ BukanNolJZ 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 / JNCInstruksi 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).

Page 23: Makalah Mikrokontroler

Instruksi JB / JNB / JBCInstruksi 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 testInstruksi-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 DJNZInstruksi 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,#$23DJNZ 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 CJNEInstruksi CJNE (Compare and Jump if Not Equal) membandingkan dua nilai yang disebut dan

MCS akan Jump kalau kedua nilai tersebut tidak sama!

MOV A,P1CJNE 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 MCS51Pada 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

Page 24: Makalah Mikrokontroler

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 FlowSecara 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 terdapatinstruksi untuk melompat ke alamat-alamat tertentu.

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

2. CONDITIONAL BRANCHINGMerupakan proses dimana sebuah program memiliki dua pilihan alur dimana alur yang melewati tergantung dari persyaratan yang diperiksa. Jika persyaratan terpenuhi, program akan melompat kesuatu 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=60HNOT_EQ: JC REG_LOW; …… ;R7>60HREG_LOW: …… ;R7<60H

3. DIRECT CALLAdalah 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 DelayDelay: ………….hPUSH 06hPUSH 05hMOV ….,#........h

4. RETURN FROM SUBROUTINE

Page 25: Makalah Mikrokontroler

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 DelayACALL …………Delay: ………… hPUSH 06hPUSH 05hRET

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

6.3 Perulangan1. 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:

Page 26: Makalah Mikrokontroler

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:

Page 27: Makalah Mikrokontroler

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. EXITPerintah 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. GOSUBDengan 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. GOTOPerintah 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.

Page 28: Makalah Mikrokontroler

BAB 7ADDRESSING MODE DAN INSTRUKSI PADA MIKROKONTROLER

7.1 Addressing ModeAddressing 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 AddressingRegister Addressing adalah proses mengakses memori dengan label antara R0 hingga R7Contoh : MOV A, R1Jika register bank yang digunakan adalah register bank 0, maka nilai pada alamat 01h (R1) akan diisika ke Accumulator.

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

3. Indirect AddressingIndirect Addressing adalah proses mengakses alamat secara tak langsung.Contoh: MOV A, @R0Misalkan 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 AddressingImmediate Addressing adalah proses mengisi suatu alamat memori dengan suatu nilai tertentu.Contoh : MOV A, #30hNilai 30h akan langsung diisikan ke dalam Accumulator.

5. Relative AddressingRelative 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 SINIsedangkan 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 bithingga menjadi FFF0h (1102h + FFF0h = 10F2h).Relative Addressing lebih fleksibel dipakai karena tidak terpengaruh oleh lokasi memori, namun jangkauannya terbatas.

6. Absolute AddressingAbsolute 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

Page 29: Makalah Mikrokontroler

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 SINIMisalkan 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 AddressingLong 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 AddressingIndexed 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 Mikrokontroler1. 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

Page 30: Makalah Mikrokontroler

2. INCPerintah yang digunakan untuk melakukan penambahan 1Contoh :

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 ditujuContoh :

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 penambahanContoh :

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. SUBPerintah yang digunakan untuk penguranganContoh :

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. DECPerintah yang digunakan untuk melakukan pengurangan 1Contoh :

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. MULPerintah yang digunakan untuk melakukan operasi perkalianContoh :

Page 31: Makalah Mikrokontroler

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. DIVPerintah yang digunakan untuk melakukan operasi pembagianContoh :

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. ANLPerintah yang digunakan untuk operasi logika ANDCOntoh :

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. ORLPerintah yang digunakan untuk operasi logika ORContoh:

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. XRLPerintah yang digunakan untuk operasi logika XORContoh:

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. CLRPerintah yang digunakan untuk mereset dataContoh:

CLR A : Proses untuk menghapus data A CLR B : Proses untuk menghapus data B

Page 32: Makalah Mikrokontroler

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

13. CPLPerintah yang digunakan untuk mengkomplemenkan dataContoh:

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/RLPerintah yang digunakan untuk menggeser posisi sebanyak 1 bitContoh:

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 portContoh:

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/ JNBPerintah yang digunakan untuk lompat ke label subprogram bila nilai port x.y berlogika LOWatau mempunyai nilai nolContoh :

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/JNZPerintah yang digunakan untuk mengurangi nilai isi data pada register x dan bila nilainya belumtercapai maka akan dilakukan lompatan ke label subprogramContoh:

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

Page 33: Makalah Mikrokontroler

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 subprogramContoh:

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. NOPPerintah yang digunakan untuk Melakukan Penundaan pada program sebesar 1 cycle (1 microdetik).CONTOH

Ajmp Lompatan1Mov A,#05HLompatan1 :NOPNOPMov R0,#00H

Page 34: Makalah Mikrokontroler

BAB 8KOMUNIKASI SERIAL PADA MIKROKONTROLER

8.1 Komunikasi SerialMCS-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 0Mode 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 denganmengirimkan Least Significant Bit (LSB) terlebih dahulu. Pada mode 0, baud rate yang gunakan adalah sebesar 1/12 dari frekuensi osilator.

2. MODE 1Pada 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 2Pada 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 3Mode 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.

Page 35: Makalah Mikrokontroler

8.2 Aplikasi Komunikasi SerialKomunikasi 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.

Page 36: Makalah Mikrokontroler

BAB 9INTERFACING MIKROKONTROLER

9.1 ADC, DAC, Dan Analog Comparator1. 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. DACFungsi DAC adalah merubah besaran digital (biasanya tegangan) ke bilangan analog.

Kebalikan dari ADC seperti diatas

3. Analog ComparatorKomparator 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 SistemProses 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.

Page 37: Makalah Mikrokontroler

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.

Page 38: Makalah Mikrokontroler

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.

Page 39: Makalah Mikrokontroler

BAB 10CONTOH APLIKASI DAN PROGRAM MIKROKONTROLER

10.1 Led / Jam Digital / Seven SegmenSeven 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 AnodaSemua 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 KatodaMerupakan 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----------------------------

Page 40: Makalah Mikrokontroler

#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(;;) {

Page 41: Makalah Mikrokontroler

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();

Page 42: Makalah Mikrokontroler

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 DasarSinyal 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%)

Page 43: Makalah Mikrokontroler

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