BAB 2 DASAR TEORI
2.1 Mikrokontroler ATMega 8535 2.1.1 Deskripsi Mikrokontroler ATMega 8535 Mikrokontroler, sesuai namanya adalah suatu alat atau komponen pengontrol atau pengendali yang berukuran mikro atau kecil. Sebelum ada mikrokontroler, telah ada terlebih dahulu muncul mikroprosesor. Bila dibandingkan dengan mikroprosesor, mikrokontroler jauh lebih unggul karena terdapat berbagai alasan, diantaranya : 1. Tersedianya I/O I/O dalam mikrokontroler sudah tersedia sementara pada mikroprosesor dibutuhkan IC tambahan untuk menangani I/O tersebut. IC I/O yang dimaksud adalah PPI 8255. 2. Memori Internal Memori merupakan media untuk menyimpan program dan data sehingga mutlak harus ada. Mikroprosesor belum memiliki memori internal sehingga memerlukan IC memori eksternal. Dengan kelebihan-kelebihan di atas, ditambah dengan harganya yang relatif murah sehingga banyak penggemar elektronika yang kemudian beralih kemikrokontroler. Namun demikian, meski memiliki berbagai kelemahan, mikroprosesor tetap digunakan sebagai dasar dalam mempelajari mikrokontroler. Inti kerja dari keduanya adalah sama, yakni sebagai pengendali suatu sistem. 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.
Universitas Sumatera Utara
Dengan menggunakan mikrokontroler ini maka: 1. Sistem elektronik akan menjadi lebih ringkas. 2. Rancang bangun sistem elektronik akan lebih cepat karena sebagian besar dari sistem adalah perangkat lunak yang mudah dimodifikasi. 3. 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 input dan output (I/O). dengan kata lain, mikrokontroler adalah versi mini atau mikro dari sebuah komputer karena mikrokontroler sudah mengandung beberapa bagian yang langsung bisa dimanfaatkan, misalnya port paralel, port serial, komparator, konversi digital ke analog (DAC), konversi analog ke digital (ADC), dan sebagainya menggunakan Minimum Sistem yang tidak rumit atau kompleks. Mikrokontroler adalah otak dari suatu sistem elektronika seperti halnya mikroprosesor sebagai otak komputer. Namun mikrokontroler memiliki nilai tambah karena didalamnya sudah terdapat memori dan sistem input/output dalam suatu kemasan IC. Mikrokontroler AVR (Alf and Vegard’s RISC processor) standar memiliki arsitektur 8-bit, dimana semua instruksi dikemas dalam kode 16- bit dan sebagian besar instruksi dieksekusi dalam satu siklus clock. Berbeda dengan instruksi MCS-51 yang membutuhkan 12 siklus clock karena memiliki arsitektur CISC (seperti komputer).Secara umum, AVR dapat dikelompokkan menjadi 4 kelas, yaitu keluarga ATTiny, keluarga AT90Sxx, keluarga ATMega dan AT89RFxx. Pada dasarnya yang membedakan masing-masing kelas adalah memori, peripheral, dan fungsinya. Dari segi arsitektur dan instruksi yang digunakan, mereka bisa dikatakan hampir sama. Oleh karena itu, dipergunakan salah satu AVR produk Atmel, yaitu ATMega8535. Selain mudah didapatkan dan lebih murah ATMega 8535 juga memiliki fasilitas yang lengkap.
Universitas Sumatera Utara
Untuk tipe AVR ada 3 jenis yaitu: ATTiny, AVR klasik, dan ATMega. Perbedaannya hanya pada fasilitas dan I/O yang tersedia serta fasilitas lain seperti ADC, EEPROM, dan lain sebagainya. Salah satu contohnya adalah ATMega 8535. Memiliki teknologi RISC dengan kecepatan maksimal 16 MHz membuat ATMega 8535 lebih cepat bila dibandingkan dengan varian MCS51. Dengan fasilitas yang lengkap tersebut menjadikan ATMega 8535 sebagai mikrokontroler yang powerfull. Adapun blok diagramnya sebagai berikut :
Universitas Sumatera Utara
G Gambar 2.1 1 Blok Diaggram Fungssional ATm mega8535 Dari gambaar tersebut dapat d dilihat at ATMega 8535 8 memilliki bagian ssebagai berrikut: 1. Salurran I/O sebaanyak 32 bu uah, yaitu Poort A, Port B, Port C, Port P D.
Universitas Sumatera Utara
2. ADC 10 bit sebanyak 8 saluran. 3. Tiga buah Timer/Counter dengan kemampuan pembandingan. 4. CPU yang terdiri atas 32 buah register. 5. Watchdog Timer dengan osilator internal. 6. SRAM sebesar 512 byte. 7. Memori Flash sebesar 8 kb dengan kemampuan Read While Write. 8. Unit interupsi internal dan eksternal. 9. Port antarmuka SPI. 10. EEPROM sebesar 512 byte yang dapat diprogram saat operasi. 11. Antarmuka komparator analog. 12. Port USART untuk komunikasi serial. Kapabilitas detail dari ATMega8535 adalah sebagai berikut : 1. Sistem mikroprosesor 8 bit berbasis RISC dengan kecepatan maksimal 16 MHz. 2. Kapabiltas memori flash 8 Kb, SRAM sebesar 512 byte, dan EEPROM (Electrically Erasable Programmable Read Only Memory) sebesar 512 byte. 3. ADC internal dengan fidelitas 10 bit sebanyak 8 channel. 4. Portal komunikasi serial (USART) dengan kecepatan maksimal 2,5 Mbps. 5. Enam pilihan mode sleep menghemat penggunaan daya listrik.
2.1.2 Konfigurasi PIN ATMega 8535 Mikrokontroler ATMega8535 mempunyai jumlah pin sebanyak 40 buah, dimana 32 pin digunakan untuk keperluan port I/O yang dapat menjadi pin input/output sesuai konfigurasi. Pada 32 pin tersebut terbagi atas 4 bagian (port), yang masing-masingnya terdiri atas 8 pin. Pin-pin lainnya digunakan untuk keperluan rangkaian osilator, supply tegangan,
Universitas Sumatera Utara
reset, serta tegangan referensi untuk ADC. Untuk lebih jelasnya, konfigurasi pin ATMega8535 dapat dilihat pada gambar 2.2
Gambar 2.2 Konfigurasi IC Mikrokontroller ATmega 8535 Berikut ini adalah susunan pin-pin dari ATMega8535; a. VCC merupakan pin yang berfungsi sebagai pin masukkan catu daya. b. GND merupakan pin ground. c. Port A (PA0..PA7) merupakan pin I/O dua arah dan pin masukan ADC. d. Port B (PB0..PB7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu Timer/Counter, Komparator Analog, dan SPI. e. Port C (PC0..PC7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu TWI, Komparator Analog, dan Timer Oscilator. f. Port D (PD0..PD7) merupakan pin I/O dua arah dan pin fungsi khusus, yaitu Komparator Analog, Interupsi Iksternal dan komunikasi serial USART. g. Reset merupakan pin yang digunakan untuk mereset mikrokontroler h. XTAL1 dan XTAL2 merupakan pin masukkan clock eksternal (osilator menggunakan kristal, biasanya dengan frekuensi 11,0592 MHz).
Universitas Sumatera Utara
2.1.3 Peta Memori ATMega8535 ATMega8535 memiliki dua jenis memori yaitu Data Memory dan Program Memory ditambah satu fitur tambahan yaitu EEPROM Memory untuk penyimpan data.
2.1.4 Program Memory ATMEGA8535 memiliki On-Chip In-System Reprogrammable Flash Memory untuk menyimpan program. Untuk alasan keamanan, program memory dibagi menjadi dua bagian, yaitu Boot Flash Section dan Application Flash Section Boot Flash Section digunakan untuk menyimpan program Boot Loader, yaitu program yang harus dijalankan pada saat AVR reset atau pertama kali diaktifkan.
Gambar 2.3 Peta Memori Program Application Flash Section digunakan untuk menyimpan program aplikasi yang dibuat user. AVR tidak dapat menjalakan program aplikasi ini sebelum menjalankan program Boot Loader. Besarnya memori Boot Flash Section dapat deprogram dari 128 word sampai 1024 word tergantung setting pada konfigurasi bit di register BOOTSZ. Jika Boot Loader diproteksi, maka program pada Application Flash Section juga sudah aman.
Universitas Sumatera Utara
2.1.5 Data Memory Gambar berikut menunjukkan peta memori SRAM pada ATMEGA8535. Terdapat 608 lokasi address data memori. 96 lokasi address digunakan untuk Register File dan I/O Memory sementara 512 likasi address lainnya digunakan untuk internal data SRAM. Register file terdiri dari 32 general purpose working register, I/O register terdiri dari 64 register.
2.1.6 EPROM Data Memory ATMEGA8535 memiliki EEPROM 8 bit sebesar 512 byte untuk menyimpan data. Loaksinya terpisah dengan system address register, data register dan control register yang dibuat khusus untuk EEPROM. Alamat EEPROM dimulai dari $000 sampai $1FF. $000
EEPROM
$01F Gambar 2.4 EEPROM Data Memori
2.2 Sensor Jarak Ultrasonik HC-SR04 HC-SR04 adalah sebuah modul yang berfungsi untuk melakukan pengukuran jarak suatu benda/ halangan dengan memanfaatkan sinyal suara ultrasonic. Performa yang stabil dan akurasi yang tinggi dengan harga yang murah merupakan kelebihan dari HC-SR04. Karena kelebihannya, HC-SR04 banyak dipakai dalam berbagai aplikasi pengukuran jarak. Berikut adalah spesifikasi dari HC-SR04 :
Universitas Sumatera Utara
a. Supply tegangan 5V DC. b. Arus Quiescent < 2mA. c. Sudut efektif < 15 derajat. d. Jarak pengukuran 2 – 500 cm. e. Resolusi 0.3 cm. Berikut adalah pin dari HC-SR04 : 1. VCC : Input supply 5V 2. Trig : Input untuk memberikan pulsa trigger 3. Echo : Output untuk pulsa Echo 4. GND : Input supply Ground
Berikut galeri HC-SR04 :
Universitas Sumatera Utara
Gambar 2.5 Sensor Ultrasonik HC-SR04
2.2.1 Prinsip Kerja Sensor Ultrasonik Prinsip kerja dari sensor ultrasonik adalah sebagai berikut : 1. Sinyal dipancarkan oleh pemancar ultrasonik. Sinyal tersebut berfrekuensi diatas 20kHz, biasanya yang digunakan untuk mengukur jarak benda adalah 40kHz. Sinyal tersebut di bangkitkan oleh rangkaian pemancar ultrasonik. 2. Sinyal yang dipancarkan tersebut kemudian akan merambat sebagai sinyal / gelombang bunyi dengan kecepatan bunyi yang berkisar 340 m/s. Sinyal tersebut kemudian akan dipantulkan dan akan diterima kembali oleh bagian penerima Ultrasonik. Setelah sinyal tersebut sampai di penerima ultrasonik, kemudian sinyal tersebut akan diproses untuk menghitung jaraknya. Jarak dihitung berdasarkan rumus : S = 340.t/2 dimana S adalah jarak antara sensor ultrasonik dengan bidang pantul, dan t adalah selisih waktu antara pemancaran gelombang ultrasonik sampai diterima kembali oleh bagian penerima ultrasonik.
Universitas Sumatera Utara
2.3 RTC DS 1307 (Time Digital) RTC yang dimaksud disini adalah real time clock (bukan real time computing), biasanya berupa IC yg mempunyai clock sumber sendiri dan internal batery untuk menyimpan data waktu dan tanggal. Sehingga jika sistem komputer / mikrokontroler mati waktu dan tanggal didalam memori RTC tetap uptodate. Salah satu RTC yang sudah populer dan mudah penggunaanya adalah DS1307, apalagi pada Codevision sudah tersedia fungsifungsi untuk mengambil data waktu dan tanggal untuk RTCDS1307 ini.
Gambar 2.6 Pin- Pin RTC DS1307
2.3.1 Fitur-fitur DS1307: a. Real-time clock (RTC) menghitung detik, menit, jam,tanggal,bulan dan hari dan tahun valid sampai tahun 2100 b. Ram 56-byte, nonvolatile untuk menyimpan data. c. Dua jalur serial interface (I2C). d. Output gelombang kotak yg diprogram. f. Automatic power-fail detect and switch g. Konsumsi arus hanya 500nA pada batery internal. h. Mode dg oscillator running. i. Temperature range: -40°C sampai +85°C
Universitas Sumatera Utara
Untuk membaca data tanggal dan waktu yg tersimpan di memori RTC DS1307 dapat dilakukan melalui komunikasi serial I2C seperti pada gambar berikut:
Gambar 2.7 Komunikasi Serial I2C
2.3.2 Cara pembacaan DS1307 DS1307 beropersai sebagai slave pada bus I2C. Cara Access pertama mengirim sinyal START diikuti device address dan alamat sebuah register yg akan dibaca. Beberapa register dapat dibaca sampai STOP condition dikirim.
Gambar 2.8 DS1307 Address
Universitas Sumatera Utara
Data waktu dan tanggal tersimpan dalam memori masing masing 1 byte , mulai dari alamat 00H sampai 07H. Sisanya (08H ~ 3FHalamat RAM yg bisa digunakan).
2.3.3 Pemrograman RTC DS1307 dengan Codevision. Codevision sudah menyediakan fungsi-fungsi khusus untuk mengakses data DS1307 jadi kita tinggal menggunakanya. Apalagi dengan fasilitas codewizard pemrograman RTC menjadi mudah.
Gambar 2.9 CodevisionWizardAVR untuk RTC Setelah
kita
klik
ok
maka
akan
tersedia
template
Code
program
sbb:
// DS1307 Real Time Clock initialization // Square wave output on pin SQW/OUT: Off // SQW/OUT pin state: 0 rtc_init(0,0,0); //rtc_set_time(12,30,00); //rtc_set_date(27,27,05,14); Merupakan perintah untuk nisialisasi real time RTC DS 1307
Universitas Sumatera Utara
2.4 WTV -020SD (Modul Audio) Modul chip WTV-020SD membaca berkas audio/suara dalam format AD4 dengan memainkan suara yang sudah direkam sebelumnya (menggunakan komputer) dan disimpan pada media penyimpanan kartu mikro SD (file storage Micro-SD-Card) dengan sistem berkas FAT (File Allocation Table file system). Fitur dan Spesifikasi WTV-020-SD Audio Player Module 1. Mengurangi dan memainkan (decode & play) berkas audio Microsoft Wave Audio (*.WAV) dengan sampling rate 6 kHz hingga 16 kHz. Pastikan penyandian dalam format PCM 4-bit / 8bit, uncompressed. 2. Mengurai dan memainkan (decode & play) berkas audio dengan 4-bit ADPCM (*.AD4) dengan sampling rate antara 6 kHz hingga 32 kHz, juga mendukung sampling rate 36 kHz. 3. Membaca berkas audio yang tersimpan kartu SD berkecepatan tinggi (High-Speed SD-Card) berkapasitas hingga 2 GB via on-board SD-Card Reader (file system: FAT). 4. Dapat mengenali format dan sampling rate dari berkas audio yang tersimpan dan menguraikannya sesuai meta data yang tertera secara otomatis 5. Dapat dikendalikan langsung oleh pemakai dengan menyambungkan tombol (moda manual) ataupun secara terprogram lewat koneksi serial (sambungkan dengan pin digital I/O pada mikrokontroler / Arduino board Anda; membutuhkan hanya 2 pin untuk koneksi: DI / Data Input dan CLK / CLocK signal). 6. Memori internal untuk mengingat posisi terakhir pada berkas audio yang dimainkan Modul ini dengan modus MP3 , modus kunci (kontrol 3 kelompok suara dengan penyesuaian volume atau 5 kelompok suara ) , 2 -line modus serial dan modus lingkaran putar (diaktifkan setelah power on , dengan fungsi memori dalam mode ini ) . Mode MP3 : dengan bermain / stop , berikutnya, sebelumnya , vol + , vol - fungsi ; modus kunci ( 3 kelompok suara ) salah satu kunci memicu salah satu kelompok suara , dan dengan vol - , vol
Universitas Sumatera Utara
+ , dengan semua tombol mode memicu standarnya adalah tepi RETRIGGER ; modus kunci ( 5 kelompok suara ) : salah satu pemicu utama satu kelompok suara. 1. Semua tombol yang tepi RETRIGGER 2. Semua tombol yang on / off (suara tidak siklus ketika selesai ) 3. Semua kunci berada di / off ( siklus suara saat selesai , modus loop bermain : setelah dinyalakan , suara akan bermain secara otomatis dengan fungsi memori , tidak perlu untuk memicu I / O ( jika daya terputus saat bermain suara 2 , itu akan mulai dari suara 2 . atau suara 3 ketika tenaga listrik dihidupkan lagi ). Tiga hal ini dapat disesuaikan untuk fungsi tertentu, 2 -line modus serial: WTV020 SD dikendalikan oleh MCU mengirimkan data melalui CLK dan dI , yang bisa memainkan suara-suara di alamat apapun . Voices, termasuk bisu , dapat dikombinasikan untuk bermain dalam mode ini. Ketika mengubah suara dengan card reader SD dan PC , kartu SD harus format FAT , sampling rate didukung dari 6kHz ke 32KHz dan 32KHz untuk format suara ad4 , 6kHz ~ 16KHz untuk format suara WAV . Dukungan 1GB max kartu SD. atau SPI Flash 64MB max.; format file dukungan 4 bit ADCPM; sampling rate dari 6kHz ke 36kHz untuk format suara ad4; sampling rate dari 6kHz ke 16KHz untuk format suara WAV; 16 bit DAC / PWM output audio; modus kunci, modus MP3, 2-line modus serial adalah opsional; berkas pendukung copy ke SD card via PC; tegangan kerja: DC 2.7 ~ 3.5V; arus diam: 3uA. Aplikasi Modul ini dapat digunakan dalam mobil (bug mobil, radar parkir, sistem navigasi GPS), sistem cerdas rumah, bug perumahan, perangkat medis suara, alat rumah tangga (memasak induksi, memasak nasi, microwave oven), pemain game, mesin belajar (berbicara book), fasilitas lalu lintas cerdas (alat gerbang, tempat parkir), peralatan komunikasi, kontrol industri dan mainan.
2.5 Getar HP (Vibrator)
Universitas Sumatera Utara
Vibrator merupakan motor kecil listrik (dinamo) yang mempunyai bandul tidak seimbang. Disaat bandul tersebut berputar dengan cepat, maka akan menghasilkan getaran lembut yang akan terasa oleh manusia.
2.5.1 Sifat Dasar Getaran Getaran adalah gerakan bersosialisasi dan sistem mekanis serta kondisi-kondisi dinamisnya. Gerakan ini dapat berupa gerakan beraturan dan berulang secara kontinyu atau dapat juga berupa gerakan tidak beraturan atau acak. Umumnya getaran ditimbulkan akibat adanya gaya yang juga bervariasi dengan waktu. Meskipun pengertian getaran selalu dikaitkan dengan osilasi mekanis, pengertian yang sama juga terdapat pada bidang lain, seperti gelombang elektromagnetik, akustik dan arus listrik bolak-balik. Kadang-kadang suatu kondisi interaksi antara masalah yang berbeda terjadi, misalnya, getaran mekanis menyebabkan osilasi listrik atau sebaliknya. Supaya getaran mekanis terjadi, dibutuhkan minimal dua elemen pengumpul energi. 2.5.2 Sistem dan Gerakan Getaran Supaya getaran mekanis terjadi, dibutuhkan minimal dua elemen pengumpul energi. Yang pertama adalah massa yang menyimpan energi kinetik dan yang kedua adalah alat elastik seperti pegas yang menyimpan energi potensial. Satu gerakan penuh dari gerak berulang disebut satu siklus. Waktu yang dibutuhkan untuk satu siklus gerakan disebut perioda. Jumlah gerakan berulang yang terjadi salah satu unit waktu disebut frekuensi. Sistem getaran dapat juga mengalami hambatan atau resistansi oleh gesekan udara, peredaman kejutan (shockabsorber) serta dari elemen disipasi lainnya. Resistensi ini umumnya dikenal sebagai redaman. Sistem getaran yang mempunyai damping dikenal sebagai sistem teredam.
2.6 Buzzer
Universitas Sumatera Utara
Buzzer adalah sebuah komponen elektronika yang berfungsi untuk mengubah getaran listrik menjadi getaran suara. Buzzer terdiri dari kumparan yang terpasang pada diafragma dan kemudian kumparan tersebut dialiri arus sehingga menjadi elektromagnet, kumparan tadi akan tertarik ke dalam atau keluar, tergantung dari arah arus dan polaritas magnetnya, karena kumparan dipasang pada diafragma maka setiap gerakan kumparan akan menggerakkan diafragma secara bolak-balik sehingga membuat udara bergetar yang akan menghasilkan suara. Buzzer biasa digunakan sebagai indikator bahwa proses telah selesai atau terjadi suatu kesalahan pada sebuah alat (alarm). Simbol buzzer dan bentuk buzzer adalah sebagai berikut:
(a)
(b)
Gambar 2.10 (a) Simbol buzzer, (b) Bentuk Buzzer
2.7 Bahasa Pemrograman C Software atau perangkat lunak merupakan salah satu komponen utama dalam sistem mikrokontroler. Kerja mikrokontroler bergantung dari software yang telah ditanam di dalam memorinya. Software mikrokontroler berupa rangkaian instruksi yang deprogram sesuai keinginan programmer.
2.7.1 Deskripsi Bahasa C Bahasa C termasuk dalam bahasa tingkat tinggi yang instruksinya mudah untuk dipahami. Bahasa ini banyak digunakan dalam pemrograman komputer untuk membuat software perkantoran, database, antarmuka computer dengan perangkat tambahan, serta
Universitas Sumatera Utara
banyak
aplikasi
lainnya.
Mikrokontroler bukan hanya punya bahasa assembler.
Mikrokontroler juga bisa diprogram menggunakan bahasa C karena saat ini telah banyak mikrokontroler yang mempunyai compiler bahasa C. Compiler inilah yang menerjemahkan bahasa C menjadi Object Code untuk didownload ke ROM mikrokontroler.
Beberapa keuntungan pengguna bahasa C dibandingkan bahasa assembler yaitu: a. Lebih cepat dalam implementasi software karena operasi yang panjang dengan bahasa assembler bisa ditulis lebih pendek dan lebih mudah dengan bahasa C. b. Instruksi bahasa C tidak sebanyak assembler dan mudah diingat. c. Kita tidak disibukkan dengan pengalokasian variabel ke register-register mikrokontroler. d. Program yang sama bisa digunakan oleh banyak tipe mikrokontroler karena banyak vendor yang membuat compiler C. e. Alur program lebih mudah dipahami dan dimodifikasi bahkan oleh programmer lain. f. Banyak orang yang mengembangkan software dengan bahasa C sehingga banyak referensi program bila dibutuhkan. g. Bahasa C bisa dikombinasikan dengan bahasa assembler bila dibutuhkan. 2.7.2 Syntax Dalam C Perlu diingat bahwa syntax atau penulisan statement (pernyataan) dalam bahasa C menganut case sensitive artinya mengenal perbedaan huruf besar dan huruf kecil (a A) kecuali dalam penulisan angka heksadesimal. Penulisan dalam bahasa C bisa dibagi menjadi beberapa bagian yaitu: a. Konstanta dan Variabel,
e. Fungsi.
b. Komentar, c. Ekspresi, d. Pernyataan dan blok pernyataan,
Universitas Sumatera Utara
A. Konstanta dan Variabel Konstanta adalah nilai yang tidak pernah berubah, sebaliknya variabel dapat berubahubah nilainya saat program dieksekusi. Pada pernyataan berikut: Angka1 = 33. Angka1 adalah variabel sedangkan 33 adalah kostanta. Penulisan kostanta bisa dalam format desimal (basis 10), biner (basis 2), heksadesimal (basis 16), ataupun oktal (basis 8). Penulisan angka desimal seperti yang sudah biasa digunakan dalam pernyataan aritmetika yaitu langsung menuliskan angkanya tanpa awalan. Format biner yang hanya mengenal angka 0 dan 1, penulisannya pada beberapa compiler diawali dengan 0b, contoh: AngkaBiner = 0b01101001. Dengan format desimal AngkaBiner bernilai 105. Angka dalam format hexadesimal penulisannya diawali dengan 0x, bilangannya dari 0 sampai 15, yang mana untuk angka 10 sampai 15 diwakili dengan abjad A sampai F, contoh: AngkaHexa = 0x1C. Dalam format desimal AngkaHexa diatas bernilai 28. Format oktal penulisannya diawali dengan angka 0, bilangannya dari 0 sampai 7 AngkaOktal = 011 Dalam format desimal AngkaOktal di atas bernilai 9. Cara untuk mengubah format angka dalam basis biner, oktal, desimal, dan heksadesimal dijabarkan lebih jauh dalam lampiran A. Selain berupa angka, konstanta dapat ditulis dalam bentuk karakter yang kemudian oleh compiler akan diubah menjadi angka sesuai nilainya dalam tabel ASCII. Penulisan karakter sebagai konstanta diawali dan diakhiri dengan ‘ (aphostrop), contoh: Huruf_Awal = ‘A’. Menurut tabel ASCII, huruf A mempunyai nilai desimal 65 (0x41), jadi pernyataan diatas sama dengan Huruf_Awal = 65. Selain konstanta, variabel dapat juga diisi dengan variabel yang lain, contoh: Angka_Pertama = 1 Angka_Kedua = Angka_Pertama
Universitas Sumatera Utara
Variabel harus dideklarasikan dahulu sebelum kita gunakan. Deklarasi variabel meliputi nama dan tipe variabel. Berdasar tipe variabelnya compiler kemudian dapat mengalokasikan seberapa banyak memori yang diperlukan. Tabel 2.1 Macam - Macam Tipe Data Dasar dalam C Tipe Data
Range Nilai
Alokasi Memori
unsigned char
0 .. 255
char (signed char)
-128 .. 127
1 Byte
unsigned int
0 .. 65535
2 Byte
int (signed int)
-32768 .. +32767
2 Byte
Unsigned short
0 .. 65535
2 Byte
Short (signed short)
-32768 .. +32767
2 Byte
Unsigned long
0 .. 4294967295
4 Byte
1 Byte
Long (signed long)
147483648 .. +2147483647
4 Byte
Float
3.402E+38 .. +3.402E+38
4 Byte
double*
.797E+308 .. +1.797E+308
8 Byte
* pada beberapa compiler hanya mendukung sampai tipe float Pendeklarasian variabel mempunyai format sebagai berikut: tipe_data
Nama_Variabel;
atau untuk variabel yang punya tipe data sama, dapat ditulis: tipe_data
Nama_Variabel1,
Nama_Variabel2;
Nama_Variabel dapat kita tentukan sembarang asalkan tidak mengandung: a. ‘ ‘ (spasi), ‘.’ (titik), ‘ (aphostrop), *, @, #, ?, dan lain sebagainya kecuali _(garis bawah). b. Tidak diawali dengan angka.
Universitas Sumatera Utara
c. Operator – operator C. d. Keyword bahasa C. Jangan lupa menuliskan ‘;’ pada akhir deklarasi. Pilihlah nama variabel yang mencerminkan kegunaan dari variabel tersebut sehingga mudah diingat fungsinya. Dalam memilih tipe data kita harus perhatikan nilai maksimum dan minimum yang mungkin disimpan dalam variabel tersebut. Jika melibatkan operasi aritmetika dengan bilangan positif saja kita pilih tipe unsigned tetapi untuk menyimpan angka negatif kita pilih tipe signed. Tipe data signed biasanya tidak disertakan saat deklarasi jadi cukup char atau int saja. Jika variabel diisi angka yang lebih besar dari nilai maksimum tipe datanya maka hitungan angka di atas nilai maksimum akan dilanjutkan dari 0 lagi. Contoh: unsigned char Angka1 = 300; unsigned int Angka2 = 65536; Variabel Angka1 berisi 44 (300 – 256), sedang variabel Angka2 berisi 0 (65536 – 65536). Tipe data yang mengenal bilangan negatif (char dan int) menggunakan MSB (Most Significant Bit) sebagai tanda bilangan negatif. Tipe char terdiri atas 8 bit (bit 7 sampai bit 0) dengan bit ke 0 sebagai LSB, jika bit ke 7 bernilai 1 berarti bilangannya negative. Contoh: Char bilangan_bulat = -1; Jika bilangan_bulat ditulis dalam format biner nilainya adalah 0b11111111 atau 0xFF. Dalam hal ini tentu saja format desimal lebih mudah untuk kita mengerti. Untuk mengubah angka positif menjadi negatif dalam format biner langkah-langkahnya adalah: 1. Komplemenkan tiap bit dalam angka tersebut, missal untuk angka 1 (0b00000001) komplemennya adalah 0b11111110. 2. Tambah hasil komplemen tersebut dengan 1. Untuk angka 1 diatas setelah ditambah 1 hasil akhirnya adalah 0b11111111.
Universitas Sumatera Utara
Jika kita salah memilih tipe signed atau unsigned maka hasil operasi aritmetikanya bisa jadi salah arti. Contoh: char input = -5; unsigned char output; output = input + 2; Jika nilai output diuji apakah lebih besar atau kurang dari 0 maka jawabannya adalah output lebih besar dari 0. Penyebabnya adalah karena output bertipe unsigned char sehingga -3 (0xFD) diartikan 253, Bit ke-7 tidak berfungsi sebagai tanda bilangan negatif. Sebuah konstanta dapat juga dideklarasikan dengan nama tertentu. Deklarasi konstanta mirip deklarasi variabel berikut inisialisasinya ditambah keyword const di depannya. Dalam pemrograman nama konstanta digunakan untuk menggantikan nilai konstanta yang sebenarnya. Keuntungan dari pendeklarasian sebuah konstanta adalah saat ada koreksi nilai konstanta maka kita cukup memodifikasi di satu tempat yaitu deklarasinya saja.
B. Komentar Komentar berfungsi untuk memberikan catatan dalam program kita. Apa yang ditulis dalam komentar diabaikan oleh compiler. Dengan demikian, penambahan komentar tidak menambah besarnya kode hasil kompilasi. Komentar juga tidak mempengaruhi alur program yang telah dibuat. Penulisan komentar diawali ‘/*’ dan diakhiri ‘*/’. Komentar juga bisa diawali dengan “//’, bedanya tanda ini hanya berlaku untuk satu baris saja dan tak perlu ditutup dengan ‘//’ diakhiri komentar. ANSI C tidak memasukkan tanda ini sebagai standar dimulainya komentar. Oleh karena itu, ada kemungkinan format ini tidak didukung oleh beberapa compiler.
Universitas Sumatera Utara
C. Pernyataan dan Blok Pernyataan Pernyataan dalam C adalah sebuah instruksi lengkap yang sudah siap dieksekusi compiler untuk diubah menjadi bahasa mesin. Pernyataan dapat berupa deklarasi variabel, ekspresi, pemanggilan fungsi, dan juga penggunaan operator lain yang semuanya diakhiri dengan tanda ‘;’. Pernyataan paling pendek adalah sebuah pernyataan kosong yang cuma terdiri atas ‘;’. Deklarasi sebuah variabel atau konstanta yang telah kita lihat sebelumnya merupakan contoh sebuah pernyataan. Blok pernyataan adalah sekelompok pernyataan yang diawali ‘{‘ dan diakhiri ‘}’. Blok pernyataan adalah digunakan untuk mengumpulkan instruksi-instruksi yang merupakan satu kesatuan pernyataan.
2.7.3 Ekspresi Ekspresi adalah kombinasi antara variabel, konstanta, dan operator untuk membentuk sebuah operasi yang dikehendaki. Operator adalah suatu fungsi untuk melakukan operasi tertentu dan melibatkan satu atau lebih operand. Operand sendiri adalah masukan (dapat berupa variabel) atau (konstanta) yang diolah oleh operator. Berikut macam-macam operator dalam C beserta contoh penulisannya.
Operator Aritmetika Operator aritmetika berguna untuk mengerjakan fungsi-fungsi aritmetika dasar. Macam operator aritmetika bisa dilihat dalam tabel 2.2. Tabel 2.2 Operator Aritmetika Operator +
Fungsi Penjumlahan
Contoh Penulisan Op1 +Op2
Universitas Sumatera Utara
-
Pengurangan dan Fungsi
Op1 – Op2, -Op1
*
Perkalian
Op1 * Op2
/
Pembagian
Op1 / Op2
%
Modulus (sisa pembagian)
Op1 % Op2
++
Inkrimen (penambahan 1 pada nilai IpVar++, ++OpVar variabel)
--
Dikrimen (pengurangan 1 pada nilai OpVar--, --OpVar variabel)
Catatan: Op1, Op2 adalah operand berupa konstanta atau variabel OpVar adalah operand berupa variabel Notasi operator aritmetika dalam bahasa C sama dengan notasi yang sudah umum kita gunakan begitu pula fungsi dari operator-operator tersebut. unsigned char Angka1; unsigned char Angka2; unsigned char Hasil_Bagi, Hasil_Sisa; Angka1 = 9; Angka2 = 5; Hasil_Bagi = Angka1 / Angka2; Hasil_Sisa = Angka1 Angka2; Dari pernyataan diatas didapatkan Hasil_Bagi bernilai 1, Hasil_Sisa bernilai 4. Karena Angka1, Angka2, dan Hasil_Bagi bertipe unsigned char maka hasil operasi pembagiannya berupa bilangan bulat positif, jika semua tipe datanya diganti dengan float maka Hasil_Bagi akan bernilai 1.8 (dalam format float). Unsigned char AngkaAwal1 = 5, AngkaAwal2 = 5;
Universitas Sumatera Utara
Unsigned char Hasil, Hasil2; Hasil1 = ++AngkaAwal1; Hasil2 = AngkaAwal2++; Setelah eksekusi variabel Hasil1 bernilai 6 dan Hasil2 bernilai 5. Hal ini karena pernyataan ‘Hasil1 = ++AngkaAwal1;’ sama dengan: AngkaAwal1 = AngkaAwal1 + 1; Hasil1 = AngkaAwal1; Sedangkan ‘Hasil2 = AngkaAwal2++;’ sama dengan dua pernyataan berikut: Hasil2 = AngkaAwal2; AngkaAwal2 = AngkaAwal1 + 1; Peletakan operator ‘—‘ di depan atau di belakang variabel mempunyai urutan operasi yang sama dengan ‘++’ kecuali ‘—‘ adalah fungsi pengurangan.
Operator Relasi Operator relasi digunakan untuk mendapatkan hasil perbandingan dari dua nilai, hasil keluarannya berupa nilai logika. Tabel 2.3 Operator Relasi Operator
Fungsi
Contoh Penulisan
==
Persamaan
Op1 == Op2
>
Lebih besat
Op1 > Op2
<
Lebih kecil
Op1 < Op2
>=
Lebih besar sama dengan
Op1 >= Op2
<=
Kurang sama dengan
Op1 <= Op2
!=
Pertidaksamaan
Op1 != Op2
Op1, Op2 adalah operand berupa konstanta atau variabel
Universitas Sumatera Utara
Output dari operator ini berupa nilai logika benar atau salah. Representasi angka salah adalah 0 sedangkan benar adalah nilai selain 0 (lazimnya adalah angka 1). Jadi untuk pernyataan berikut: unsigned char Indikator1, Indikator2; unsigned char Input1 = 3; Indikator = (Input1 == 3); Indikator2 = (Input1 > 5); Nilai indikator1 setelah eksekusi adalah 1, sedangkan nilai Indikator2 adalah 0. Dalam pemrograman C operator relasi umumnya digunakan dalam seleksi kondisi Operator Manipulasi Bit Operator manipulasi bit berguna untuk mengolah data dengan orientasi per bit dari operand-nya. Tabel 2.4 Operator Manipulasi Bit Operator
Fungsi
Contoh Penulisan
|
Fungsi OR bit
Op1 | Op2
&
Fungsi AND bit
Op1 & Op2
~
Fungsi Komplemen bit
~Op1
^
Fungsi XOR bit
Op1 ^ Op2
>>
Geser bit ke kanan
Op1 >> Op2
<<
Geser bit ke kiri
Op1 << Op2
Hasil dari fungsi logika untuk operasi manipulasi bit dapat dilihat dalam tabel kebenaran berikut.
Universitas Sumatera Utara
Tabel 2.5 Operator Manipulasi Bit Input A
B
A&B
A|B
A^B
~A
0
0
0
0
0
1
0
1
0
1
1
1
1
0
0
1
1
0
1
1
1
1
0
0
Berikut contoh penulisan operator ini: unsigned char Angka1, Angka2, Angka3; unsigned char Isi5 << 1; Bila hasil eksekusi dijabarkan dalam format biner: Angka1 = 00000001b | 00000010b = 00000011b (3) Angka2 = 00000101b & 00000010b = 00000000b (0) Angka3 = 00000101b << 1 = 00001010b (10)
Operator Logika Operator ini digunakan untuk operasi logika dengan memperlakukan nilai operandnya sebagai nilai logika. Tabel 2.6 Operator Logika Operator || && !
Fungsi
Contoh penulisan
Fungsi Logika OR
Op1 | Op2
Fungsi Logika AND
Op1 && Op2
Fungsi Logika Negasi/inverter
!Op1
Op1 dan Op2 adalah operand berupa variabel, konstanta atau ekspresi relasi Contoh penulisan operator ini:
Universitas Sumatera Utara
Unsigned char LED1On, LED2On, LED3On; Unsigned char saklar1 = 1, Saklar2 = 0; LED1On = (Saklar1 == 1) && (Saklar2 == 1); /*LED1On = 0 */ LED2On = Saklar1 | | Saklar2; /* LED2On = 1 */ LED#On = !Saklar2; /* LED3On = 1 */ Setelah dieksekusi nilai LEDOn = 0 karena nilai (Saklar2 = 1) adalah 0 dan apapun kalau diand dengan 0 hasilnya juga 0, sebaliknya operasi or selalu menghasilkan nilai 1 bila inputnya ada yang bernilai 1, seperti pada LED2On.
Operator Penugasan Operator penugasan berfungsi untuk mengisi variabel di sebelah kiri operator dengan nilai di sebelah kanan operator. Operator penugasan seperti telah kita lihat dlam contohcontoh sebelumnya menggunakan simbol ‘=’. Dalam C operator ini bisa dikombinasi dengan operator aritmetika dan juga manipulasi bit untuk meringkas penulisan. Tabel 2.7 Operator Penugasan Operator
Fungsi
Contoh Penulisan
=
Op1 <-- Op2
Op1 = Op2
+=
Op1 <-- Op1 + Op2
Op1 += Op2
-=
Op1 <-- Op1 – Op2
Op1 -= Op2
*=
Op1 <-- Op1* Op2
Op1 *= Op2
/=
Op1 <-- Op1 / Op2
Op1 /= Op2
%=
Op1 <-- Op1 % Op2
Op1 %= Op2
&=
Op1 <-- Op1 & Op2
Op1 &= Op2
|=
Op1 <-- Op1 | Op2
Op1 |= Op2
^=
Op1 <-- Op1 ^ Op2
Op1 ^= Op2
Universitas Sumatera Utara
<<=
Geser bit Op1 ke kiri sebanyak Op1 <<= Op2 Op2
>>=
Geser
bit
Op1
ke
kanan Op1 >>= Op2
sebanyak Op2 Op1 adalah operand berupa variabel, Op2 adalah operand berupa variabel atau konstanta. Penggunaan beberapa operator dalam satu pernyataan secara bersamaan akan dikerjakan berdasar prioritasnya.
Universitas Sumatera Utara