Pemrograman Mikrokontroler
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.
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
while (1){
//program utama Sub Rutin
Program akan berjalan terus karena syarat while(1)
....... akan selalu menghasilkan nilai benar (true)
3
Contoh pemrograman yang lebih lengkap (dengan fungsi tunda)
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
}
}
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 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*/
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
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
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
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.
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)
};
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.
Contoh:
Void main(void)
{
Int Luas_R, pj,lb;
….
Luas_R=luas(pj,lb);
…
}
13