Anda di halaman 1dari 13

BAB III

Pemrograman Mikrokontroler

Penemuan mikrokontroler menjadi suatu revolusi tersendiri bagi industri


elektronika. Mikrokontroler merupakan sebuah komponen elektronika yang dapat
diprogram / programmable device. Dengan satu rangkaian mikrokontroler saja, kita bisa
menciptakan alat dengan berbagai macam tujuan yang berbeda hanya dengan mengubah
programnya, bukan hardwarenya. Karena kepraktisan inilah yang membuat
mikrokontroler menjadi sebuah komponen yang bisa digunakan untuk berbagai macam
keperluan.

1. Jenis-Jenis Bahasa Pemrograman Mikrokontroler


Ada banyak bahasa pemrograman yang dapat digunakan untuk memrogram sebuah
mikrokontroler. Jika dilihat dari tingkatan bahasanya, dalam pemrograman suatu
mikrokontroler terdapat tiga tingkatan bahasa pemrograman, yaitu :
o Bahasa Mesin
o Assembly
o Bahasa Tingkat Tinggi
Bahasa mesin (machine language/machine code) adalah bahasa yang dipahami oleh
komputer. Kode yang terdapat pada bahasa ini berupa kode bilangan biner yang dapat
diproses oleh mikroprosesor sehingga sulit dipahami oleh manusia. Bahasa mesin
umumnya bersifat spesifik, yaitu tidak lintas jenis mikroprosesor sehingga suatu jenis
mikroprosesor memiliki bahasa pemrograman yang berbeda dengan jenis mikroprosesor
lainnya. File bahasa mesin memiliki ekstensi .hex, karena untuk kepentingan manusia
yang memprogram kode biner dikonversikan menjadi kode bilangan heksadesimal.
Bahasa Assembly terdiri dari instruksi berupa representasi mnemonic dari instruksi
berupa kode bilangan biner dari bahasa mesin. Umumnya mnemonic berupa singkatan
tiga atau empat huruf dari kata yang mewakili suatu instruksi. Contohnya instruksi Assembly
adalah sebagai berikut :
o SUB adalah kode Assembly untuk instruksi substract, yaitu mengurangkan suatu
angka dari angka lain.
o CBI adalah kode Assembly untuk instruksi Clear Bit I/O, yaitu memberi logika
nol pada suatu pin I/O digital.
Instruksi pada Bahasa Assembly diterjemahkan menjadi bahasa mesin oleh perangkat
lunak Assembler. Seperti juga bahasa mesin bahasa Assembly juga spesifik untuk suatu
jenis mikroprosesor tertentu. Namun bahasa Assembly masih terlalu berorientasi mesin,
sehingga susah dipahami oleh manusia.
Bahasa yang lebih mudah dipahami disebut bahasa pemrograman tingkat tinggi (high

1
level programming language). Bahasa ini memiliki sintaks yang lebih mendekati bahasa
manusia. Hal ini menyebabkan bahasa tingkat tinggi lebih mudah untuk dipelajari. Meski
demikian bahasa tingkat tinggi umumnya menghasilkan ukuran kode yang lebih besar
dibandingkan bahasa Assembly. Bahasa tingkat tinggi memerlukan perangkat lunak
kompiler (compiler) untuk menerjemahkan kode menjadi bahasa mesin. Contoh bahasa
pemrograman tingkat tinggi adalah Bahasa C dan Basic.
Bahasa C ini memerlukan software compiler untuk diterjemahkan ke bahasa
asembly, file ASM kemudian decompile lagi menggunakan Assembler untuk
mendapatkan file *.HEX. File HEX inilah yang dimasukkan ke mikrokontroler
menggunakan perangkat lunak pemrogram (programmer) melalui perantaraan kabel
paralel ataupun serial.

Gambar 3.1. Langkah-langkah penulisan program ke mikrokontroler


Saat ini telah banyak dikembangkan compiler untuk beberapa bahasa pemrograman
tingkat tinggi yang dapat digunakan pada pemrograman mikrokontroler. Untuk
mikrokontroler keluarga AVR perangkat lunak pemrograman yang dapat digunakan
antara lain AVR Studio dari Atmel (http://www.atmel.com/tools/), SDCC (Small Device
C Compiler) dari Sandepp Duta (http://sdcc.sourceforge.net), Bascom-AVR (Basic
Compiler) dari MCS Electronics (www.mcse.com), CodeVision AVR dari HP InfoTech
(http://www.hpinfotech.com), dan WinAVR (winavr.sourceforge.net) serta yang terbaru
ada Arduino (www.arduino.cc).

2. Bahasa C
Bahasa C termasuk ke dalam bahasa pemrograman tingkat tinggi. Bahasa C adalah
bahasa yang banyak digunakan dalam pemrograman mikrokontroler. Oleh karena itu
sebelum kita melakukan pemrograman ada baiknya kita pelajari dahulu bahasa C.
Berikut ini penjelasan bahasa C dan aturan penulisan program dalam bahasa C.
Untuk seterusnya pada modul ini hanya akan dibahas pemrograman mikrokontroler AVR
menggunakan bahasa C, dengan software kompilernya menggunakan AVR Studio 4.

2
Struktur Penulisan Program menggunakan Bahasa C

Struktur Dasar
Pada pemrograman mikrokontroler bahasa C, tersedia format penulisan / struktur
dasarnya. Untuk struktur dasar penulisan bahasa C di AVR studio adalah sebagai berikut :
//program menyalakan lampu Preprocessor (#) : digunakan untuk
#include <avr/io.h> memasukkan (include) text dari file
lain dan mendefinisikan macro

//ini adalah var lampu


int a; Komentar ditulis dalam format :
/*
Komentar beberapa baris
void main (void){ */
//variabel lokal

DDRA=0x00; Inisialisasi Atau jika satu baris cukup tulis karakter


Port Induk // komentar
PORTA=0xFF; Program

while (1){
//program utama Sub Rutin
Program akan berjalan terus karena syarat while(1)
....... akan selalu menghasilkan nilai benar (true)

Pada contoh program diatas, adalah struktur dasar pemrograman mikrokontroler.


Program harus diawali dengan preprosesor untuk mendefinisikan / memasukan file
tambahan dari luar, misalnya library I/O, library delay, dan sebagainya.
Induk Program berada diantara sintaks main(). Perlu diketahui bahwa setiap sintaks
yang diawali tanda kurung kurawal buka ( { ) harus juga diakhiri atau ditutup dengan
tanda kurung kurawal tutup ( } ).
Komentar adalah sintaks / kode yang tidak akan diterjemahkan ke dalam program.
Fungsi komentar hanya sebagai tanda / petunjuk bagi si penulis program itu sendiri. Kita
bisa menulis komentar dengan dua metode yaitu satu baris dan banyak baris. Untuk
banyak baris, tulis komentar diantara tanda /* dan */. Kemudian untuk komentar satu
baris cukup ditulis setelah dua tanda garis miring ( // ).

3
Contoh pemrograman yang lebih lengkap (dengan fungsi tunda)

#include <avr/io.h> //pemanggilan header I/O


#include <util/delay.h> //pemanggilan header delay

int a; //variable a dengan type data int

void tunda (void){


for (a=0; a<1000; a++){ // pengulangan 1000x
_delay_ms(1); // pemanggilan delay 1ms
}
}

void main (void){


DDRA=0b11111110; // inisialisasi PORTA dijadikan output

while (1){
PORTA=0b00000000; //Led PORTA mati semua
tunda(); // pemanggilan fungsi tunda 1 detik
PORTA=0b11111111; //Led PORTA hidup semua
tunda(); // pemanggilan fungsi tunda 1 detik

}
}

Penjelasan lebih lanjut mengenai bahasa C kami jelaskan di bawah.

Variabel

Variabel adalah suatu simbol dalam program yang berfungsi untuk mewakili suatu
nilai/menyimpan nilai tertentu yang sifatnya dinamis, dapat berubah-ubah selama program
dijalankan. Dalam pemrograman bahasa C, untuk menggunakan variabel harus
mendeklarasikannya terlebih dahulu agar compiler mengenalinya. Bentuk umum untuk
mendeklarasikan variabel dalam bahasa c adalah :

tipe_data nama_variabel;

contoh :
int a; /*Mendeklarasikan variabel a yang bertipe integer*/
int b, c; /*Mendeklarasikan variabel b dan c yang bertipe integer*/
char u; /*Mendeklarasikan variabel u yang bertipe char*/

4
Aturan Penamaan Variabel
Ada beberapa aturan penamaan variabel pada bahasa c, yaitu sebagai berikut :
o Case sensitive, penulisan dengan menggunakan huruf kecil dan besar memiliki arti
yang berbeda (merupakan variabel yang berbeda) Contoh :
int a;
int A;
Variabel a dan A merupakan dua variabel yang berbeda.

o Nama variabel tidak boleh menggunakan spasi.


int bilangan bulat; /*Salah karena menggunakan spasi*/
int bilangan_bulat; /*Benar, karena tidak menggunakan spasi*/

o Nama variabel hanya boleh diawali dengan huruf atau garis bawah (tidak boleh
diawali dengan angka dan simbol lain) dan selanjutnya boleh diikuti oleh huruf atau
garis bawah atau angka (tetapi tidak boleh menggunakan simbol lain dibagian
manapun, seperti : @, #, $ dan lain-lain).
int @ngka; /*Salah, karena menggunakan simbol*/
int angk@; /*Salah, karena menggunakan simbol, meskipun berada di
belakang*/
int a5gk4; /*Benar, karena diawali dengan huruf dan diikuti angka*/
int _angka; /*Benar, karena diawali dengan garis bawah*/
int 4ngka; /*Salah, karena diawali dengan angka*/

o Panjang variabel max 32 karakter.


int abcdefghijklmnopqrstuvwxyzabcdef;

o Tidak boleh menggunakan keyword yang ada pada library


int for;
int void;

Klasifikasi Variabel
1. Variabel Menurut Lingkupnya
Lingkup variabel ditentukan oleh tempat dimana variabel tersebut dideklarasikan.
Menurut lingkupnya, variabel dibedakan menjadi dua,, yaitu variabel global dan variabel
lokal.
a) Variabel global, variabel yang dideklarasikan di luar blok fungsi main dan
fungsi pendukung lainnya. Variabel global dapat dikenali dan diakses oleh setiap
fungsi yang terdapat dalam program. Lihat contoh penggunaan variabel global.
b) Variabel lokal, variabel yang dideklarasikan di dalam suatu fungsi. Variabel lokal
hanya dapat diakses oleh fungsi dimana variabel tersebut dideklarasikan (tidak
dapat diakses dan dikenali oleh fungsi lain). Lihat contoh penggunaan variabel lokal.
2. Variabel Menurut Jenisnya
Ada beberapa jenis variabel yang tersedia dalam bahasa C yang akan dibahas satu
per satu agar mempermudah implementasi suatu variabel ke dalam sebuah program.

5
Menurut jenisnya, variabel dibedakan menjadi empat, yaitu variabel otomatis, variabel
statis, variabel external, dan variabel register.

Konstanta

Konstanta Integer dan long integer ditulis dalam bentuk desimal (1234), dalam bentuk
biner (0b10101010), hexa desimal mempunyai awalan 0x (0xff) dan oktal dengan awalan
07 (0777).
Unsigned integer mempunyai akhiran U (10000U)
Long integer mempunyai akhiran L (99L)
Unsigned long integer mempunyai akhiran UL (12000000UL)
Folating point mempunyai akhiran F (3.145F)
Konstanta karakter harus berada di dalam tanda kutip (‘teks‘)

Tipe Data

Dalam pemrograman bahasa C dikenal beberapa tipe data antara lain Bit, Char, Int,
Long Int dan Float. Tipe data ini biasanya terkait dengan sebuah konstanta atau variabel
yang berguna pada proses pemrograman. masing-masing tipe data tersebut mempunyai
ukuran dan jangkauan yang berbeda-beda seperti tipe data Char memiliki ukuran 8 bit
dengan jangkauan 256 sedangkan tipe data Int memiliki ukuran 16 bit dengan jangkauan
65536.
Dalam pemrograman mikrokontroler, pemilihan tipe data yang benar sangat penting
terutama untuk menghemat pemakaian memori dari mikrokontroler tersebut. Pemilihan
data yang tepat juga mempercepat proses kerja mikrokontroler karena jumlah bit yang
harus diproses lebih sedikit. Sebagai contoh misalnya kita membutuhkan sebuah variabel
dengan kemungkinan nilai yang tidak lebih dari 255 seperti data display 7 segmen, maka
sebaiknya kita menggunakan tipe data Char. Berikut ini tabel tipe data yang ada dalam
bahasa C beserta ukuran dan jangkauannya :
Tabel 3.1. Tipe data pada bahasa C
Ukuran
Tipe Jangkauan (Range)
(Bit)
0, 1 (tipe data bit hanya dapat digunakan untuk variabel
Bit 1
global)
Char 8 -128 sampai 127
Unsigned Char 8 0 sampai 255
Signed Char 8 -128 sampai 127
Int 16 -32768 sampai 32767
Short int 16 -32768 sampai 32767
Unsigned Int 16 0 sampai 65535
Signed Int 16 -32768 sampai 32767
Long Int 32 -2147483648 sampai 2147483647

6
Unsigned Long
32 0 sampai 4294967295
Int
Signed Long Int 32 -2147483648 sampai 2147483647
Float 32 + 1.175e-38 sampai + 3.402e38
Double 32 + 1.175e-38 sampai + 3.402e38

Perbedaan Tipe data Signed dan Unsigned


Khusus untuk tipe data Char, Int dan Long Int dikenal istilah Signed dan Unsigned
atau dalam bahasa Indonesia berarti bertanda dan tak bertanda. Yang dimaksud dengan
bertanda disini adalah penggunaan tanda minus (-). Tipe data yang termasuk "Signed"
boleh disebut dengan tipe datanya saja, misalnya tipe data Signed Char bisa ditulis
dengan Char saja. Sedangkan untuk tipe "Unsigned" harus ditulis secara lengkap
misalnya Unsigned Char.
Dengan menetapkan tipe Unsigned pada sebuah tipe data maka kita akan
memperoleh tambahan jangkauan bilangan positif. Sebagai contoh, sebuah tipe data Char
memiliki jangkauan sebesar 256 artinya pada tipe yang Signed maka jangkauan tipe data
Char adalah -128 sampai -127. Jika kita menetapkan tipe data Unsigned Char maka
jangkauannya menjadi 0 sampai 255. Hal ini karena tanda minus dihilangkan maka hitungan
dimulai dari nol.

Operator
Operator adalah simbol atau karakter yang digunakan oleh program untuk melakukan
sebuah operasi dalam sebuah proses program seperti operasi bilangan dan operasi string.
Bahasa C mengenal penggunaan beberapa operator dengan fungsi yang berbeda-beda.
Setiap operator memiliki kedudukan atau hirarki saat penanganan program. Operator dengan
hirarki lebih tinggi akan dikerjakan lebih dahulu dibandingkan operator dengan hirarki lebih
rendah.
Pada pemrograman bahasa C khususnya untuk pemrograman pada mikrokontroler
AVR, kita memerlukan operator untuk memanipulasi data yang berupa angka saat proses
pemrograman. Operator yang lazim digunakan adalah operator aritmatika, operator
kondisi/perbandingan, operator logika, operator bitwise dan operator penugasan.
Berikut ini beberapa operator pada bahasa C dan penjelasannya yang sering
digunakan pada pemrograman mikrokontroler AVR :
1. Operator aritmetika
Adalah operator yang digunakan untuk operasi bilangan seperti penjumlahan,
pengurangan, perkalian, pembagian, modulus, increment dan decrement. Operator
aritmatika bisa digunakan pada semua tipe bilangan seperti char, int, long int dan float.
Operator aritmatika juga bisa menangani tipe signed dan unsigned.
Increment adalah operasi bilangan dimana bilangan hasil merupakan bilangan asal
ditambah satu, sedangkan decrement adalah operasi bilangan dimana bilangan hasil
merupakan bilangan asal dikurang satu.

7
Tabel 3.2. Operator Aritmetika
Operator Nama Contoh Hasil
+ Penjumlahan z=x+y Penjumlahan dari x dan y
- Pengurangan z=x-y Selisih dari x dan y
* Perkalian z=x*y Perkalian dari x dan y
/ Pembagian z=x/y Pembagian x oleh y
% Modulus z=x%y Sisa dari x dibagi y
++ Increment x++ Sama dengan x = x+1
-- Decrement x-- Sama dengan x = x-1

2. Operator bitwise
Adalah operator yang menangani operasi bilangan biner seperti and, or, not dan
sebagainya. Operator bitwise ini akan menangani data sesuai dengan tipenya. Misalnya
sebuah data bertipe char atau byte maka bilangan yang dihasilkan adalah sebesar 8 bit.
Tabel 3.3. Operator bitwise
Dalam biner Hasil Hasil
Operator Nama Contoh
(4bit) Biner Decimal
& AND x=5&1 0101 & 0001 0001 1
| OR x=5|1 0101 | 0001 0101 5
~ NOT x=~5 ~0101 1010 10
^ XOR x=5^1 0101 ^ 0001 0100 4
<< Left shift x = 5 << 1 0101 << 1 1010 10
>> Right shift x = 5 >> 1 0101 >> 1 0010 2

3. Operator penugasan
Adalah operator yang digunakan untuk memberi nilai pada sebuah variabel.
Operator penugasan yang paling dasar adalah sama dengan (=). Dari operator ini dapat
dikembangkan beberapa operator penugasan lain seperti +=, -= dan sebagainya.
Tabel 3.4. Operator Penugasan
Operator Penugasan Sama dengan Deskripsi
= x=y x=y variabel x memperoleh nilai dari variabel y
+= x += y x=x+y variabel x memperoleh nilai dari x + y
-= x -= y x=x-y variabel x memperoleh nilai dari x - y

8
*= x *= y x=x*y variabel x memperoleh nilai dari x * y
/= x /= y x=x/y variabel x memperoleh nilai dari x / y
%= x %= y x=x%y variabel x memperoleh nilai dari x % y
<<= x <<= y x = x << y variabel x memperoleh nilai dari x << y
>>= x >>= y x = x >> y variabel x memperoleh nilai dari x >> y
&= x &= y x=x&y variabel x memperoleh nilai dari x & y

|= x |= y x=x|y variabel x memperoleh nilai dari x | y

^= x ^= y x=x^y variabel x memperoleh nilai dari x ^ y

4. Operator perbandingan
Adalah operator yang digunakan untuk membandingkan dua buah nilai atau
variabel. Nilai yang dibandingkan bisa berupa angka maupun string. Hasil dari perbandingan
ini berupa nilai boolean, yaitu true (benar) atau false (salah).
Tabel 3.5. Operator Perbandingan
Operator Nama Contoh Hasil
== Sama dengan a == b benar jika a sama dengan b
!= Tidak sama dengan a != b benar jika a berbeda dengan b
> Lebih besar a>b benar jika a lebih besar dari b
< Lebih kecil a<b benar jika a lebih kecil dari b
Lebih besar atau benar jika a lebih besar atau
>= a >= b
sama dengan sama dengan b
Lebih kecil atau benar jika a lebih kecil atau
<= a <= b
sama dengan sama dengan b

5. Operator logika
Adalah operator yang digunakan untuk menangani tipe data boolean. Nilai data
boolean bisa berupa kondisi benar (true) atau salah (false) dan bisa juga 1 atau 0.
Tabel 3.6. Operator Logika

Operator Nama Contoh Hasil


benar jika a and b bernilai
&& And a && b
benar
benar jika salah satu a atau b
|| Or a || b
bernilai benar
! Not !a benar jika a tidak benar

9
6. Operator lain
Selain dari beberapa operator diatas, ada beberapa operator lain yang juga sering
dipakai terutam pada pemrograman array misalnya operator sizeof dan ppointer (*).
Tabel 3.7. Operator Lainnya
Operator Keterangan Contoh Hasil
Menghasilkan
Menghasilkan bilangan
sizeof() ukuran (size) dari sizeof(a)
integer, misal 5
variabel.
Mengembalikan
Menghasilkan alamat
& alamat (address) dari &a
sebenarnya dari variabel
variabel.

Pointer ke sebuah Mengarahkan pointer ke


* *a
variabel. sebuah variabel.

Jika kondisi a==1 benar maka


?: Operator kondisi b = (a == 1) ? 20: 30; nilai b=20 dan jika salah maka
nilai b=30

Instruksi Pada Bahasa C

Beberapa Instruksi bahasa C yang sering digunakan dalam pemrograman mikrokontroler


bisa dilihat pada tabel :
Tabel 3.5. Instruksi-instruksi pada bahasa C
No Fungsi Penulisan Program
1. Syarat / if (kondisi)
Kondisional {
………(aksi yang dikerjakan)
};
2. Percabangan if (kodisi)
{
……(aksi yang dikerjakan)
}
else if (kondisi)
{
…..(aksi yang dikerjakan)
}
…..…..
else
{
…..(aksi yang dikerjakan)
};

10
3. Percabangan switch (variable)
{
case nilai_variabel_ke-1:
{
….. (aksi yang dikerjakan)
}
case nilai_variabel_ke-2:
{
….. (aksi yang dikerjakan)
}
…………
………..
default:
{
…. (aksi yang dikerjakan)
}
}
4. Melompat goto alamat_tujuan;
…………….
…………….
alamat_tujuan:
……………
…………….
5. Melompat break;
keluar dari
perulangan
6. Perulangan while (kondisi)
{
……(aksi yang dikerjakan)
}
7. Perulangan do
{
…..(aksi yang dikerjakan)
}
while (syarat);
8. Perulangan for (nilai_awal,syarat,operasi++/--)
{
…..(aksi yang dikerjakan)
};

Modul Dasar Mikrokontroler | SMKN2 Padangsidimpuan |


30

11
PROSEDUR DAN FUNGSI

Seringkali dalam suatu program kita menemukan kelompok intruksi untuk suatu
keperluan tertentu yang sering dijalankan. Kelompok instruksi ini bisa dibuat sebagai
prosedur atau fungsi. Langkah ini akan dapat menghemat memori dibanding bila
instruksi-instruksi tersebut ditulis berulang-ulang. Ingat bahwa disini kita akan memprogram
mikrokontoler yang memorinya terbatas.

PROSEDUR

Prosedur adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan tertentu
tanpa mengembalikan suatu nilai.


void nama_prosedure (parameter1, parameter2,..,parameter n) {
Pernyataan‐pernyataan
}

Contoh:
void kedap_kedip_LED (unsigned int i)
{
while (i–)
{
PORTD=0x00;
_delay_ms(100);
PORTD=0xff;
}
}

Jika kita memanggil prosedur tersebut pada program tersebut maka PORTD akan nyala
dan mati selama nilai I yang diberikan. Untuk memanggil prosedur pada progam utama
cukup dengan memanggil nama prosedure tersebut dan diisi parameter yang ada jika ada.

void main(void)
unsigned int I;
…. i=100;
kedap_kedip_LED(i);

}

12
FUNGSI

Fungsi adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan tertentu
dengan hasil akhir pengembangan nilai keprluan tersebut.

Type_data nama_fungsi (parameter1, parameter2,..,parametern)


{
Pernyataan‐pernyataan
}

Contoh:

Int luas(int panjang, int lebar)


{
Luas=panjang*lebar;
Return luas;
}

Cara pemanggilan fungsi pada program yaitu:

Void main(void)
{
Int Luas_R, pj,lb;
….
Luas_R=luas(pj,lb);

}

13

Anda mungkin juga menyukai