Format penulisan bahasa C untuk pemograman mikrokontroller AVR (bagian 1)

Format penulisan kode bahasa C untuk pemograman mikrokontroller AVR biasanya terbagi menjadi 6 bagian yaitu :

1.   Bagian komentar

Bagian ini tidak wajib ada karena hanya berfungsi sebagai komentar dari penulis kode. Tujuan pembuatan komentar adalah agar mudah dibaca dan diingat kembali tentang fungsi kode-kode yang sudah dibuat. Oleh komplier, komentar ini akan diabaikan. Penulisan komentar dalam bahasa C diawali dengan  tanda ( // ) untuk komentar singkat dan tanda (*/……………./*) untuk komentar panjang.

Contoh penulisan komentar :

Untuk komentar yang panjang dalam bentuk paragraf

*/  komentar anda tentang suatu baris pernyataan atau kode program /*

Untuk komentar pendek yang biasanya digunakan sebagai penanda :

//komentar singkat anda tentang kode program

2.   Bagian preprosessor

Bagaimana cara kerja preprosessor?

Ketika kita menjalankan perintah untuk menyusun (compile) suau program C, maka program secara otomatis akan membaca perintah pada preprosessor. Preprocessor adalah program yang mengubah suatu program yang berasal dari sumber program C sesuai dengan arahan yang diberikan dalam program ini. Sumber program C biasanya disimpan dalam sebuah file. Preprosessor tidak mengubah secara langsung program ini, tetapi membuat salinan baru yang isinya sama dengan program sumbernya. File baru ini yang akan digabungkan dengan program-program yang akan disusun (compile).

Preprosessor yang berisikan pernyataan-pernyataan khusus disebut directives (pengarah), yang akan dijalankan pada awal proses penyusunan (compile). Perintah #include dan #define termasuk jenis directives (pengarah).

a.   Preprosessor #include

Preprosessor ini digunakan untuk menambahkan beberapa file dalam program yang kita buat. Beberapa  file yang ditambahkan dapat berupa file header (.h) atau file library. Bagian preprosessor ini berguna untuk memberitahukan kepada komplier untuk membaca file-file yang dimasukkan ke dalam program terlebih dahulu agar mengenali definisi-definisi yang digunakan dalam program agar tidak dianggap suatu kesalahan pemograman.

Cara penulisan :

#include <……………> untuk file library biasanya berada dalam lokasi standar yang telah disetting oleh komplier. Umumnya terletak dalam folder include atau folder direktori complier.

Contoh penulisan :

#include <io.h>

Cara penulisan :

#include “…………………..” untuk lokasi file yang kita tentukan sendiri.

Contoh penulisan :

#include “lcd.h”

#include “timer1.c”

Salah satu file include yang wajib ada adalah file header io.h. ini adalah file yang berisikan semua informasi dan defini tentang fungsi khusus (SFR) dan bit atau pin-pin mikrokontroller AVR.

b.   Preprosessor #define

Preprosessor #define berguna untuk mendefinisikan suatu konstanta atau makro.

Cara penulisan :

#define lambang konstanta;

Contoh penulisan 1 :

#define on 1

Artinya mendefinisikan tanda on dengan angka 1, sehingga setiap kemunculan on akan selalu digantikan dengan 1.

Contoh penulisan 2 :

#define kuadrat(x) x*x

Artinya setiap kemunculan kuadrat(x) akan digantikan dengan x*x. misalnya : temp=kuadrat(6), sehingga variabel temp akan berisi 36.

c.   Preprosessor #if dan #endif

Preprosessor ini digunakan untuk menguji suatu ekspresi yang benar untu mengolah kode program dibawahnya hingga tanda #endif.

Cara penulisan :

#if (ekspresi)

……..Kode program…………

#endif

Contoh penulisan :

#define pembagi 15

#if (pembagi>0)

y=x/pembagi;

#endif

d.   Preprosessor #if , #else dan #endif

Preprosessor ini digunakan untuk menguji suatu ekspresi yang benar untuk mengolah kode program di bawahnya atau jika tidak benar, maka kode program di bawah #else yang akan di proses hingga #endif.

Cara penulisannya :

#if (ekspresi)

…….. kode program ………

#else

……… kode program ……..

#endif

Contoh penulisan :

#define pembagi 15

#if (pembagi>0)

Y = X/pembagi;

#else

Y=0

#endif

e.   Preprosessor #ifdef dan #endif

Preprosessor ini digunakan untuk mencari tahu apakah suatu pengenal (identifier) sudah didefinisikan atau belum, jika sudah, maka eksekusi kode program dibawahnya akan dijalankan.

Cara penulisan :

#ifdef identifier

……kode program ……

#endif

Contoh :

#ifdef max

#define max 1000

#endif

f.    Preprosessor #ifndef dan #endif

Preprosessor ini adalah kebalikan dari preprosessor #ifdef. Fungsinya adalah untuk mencari tahu apakan suatu pengenal sudah didefinisikan atau belum, dan jika belum maka kode program di bawahnya akan dijalankan.

Cara penulisan :

#ifndef identifier

…………kode program………

#endif

Contoh penulisan :

#ifndef max

#define max 1000

#endif

g.   Preprosessor #undef

Preprosessor ini digunakan untuk menghilangkan suatu pengenal (identifier) yang telah kita buat sebelumnya dengan menggunakan perintah #define, sehingga kita dapat mendefinisikan ulang pengenal tersebut.

Cara penulisan:

#undef identifier

Contoh penulisan

#undef max

3.   Bagian deklarasi variabel.

Variabel yang digunakan dalam pemograman C untuk AVR dikenal ada 2 jenis yaitu variabel global dan variabel lokal. Variabel global dapat digunakan oleh semua semua fungsi dan harus diletakkan di bagian atas program. Variabel lokal adalah variabel yang hanya diakses oleh blok fungsi yang bersangkutan atau terbatas di dalam tanda { } dimana deklarasi fungsi itu berada.

Contoh :

#include <avr/io.h>                        ———————à preprosessor

#include <avr/interrupt.h> ———————à preprosessor

volatile unsigned char jam, menit; ————–à deklarasi variabel global : jam & menit

unsigned int angka ——————-à deklarasi variabel global angka

…………………………………

ISR(TIMER_COMPA_vect)

{static unsigned char detik;        —————-à deklarasi variabel lokal : detik

………………….

………………….

}

void main (void)

{unsigned int tunda;                        ——————–à deklarasi variabel lokal : tunda

…………………….

………………….

}

Dari contoh di atas, variabel jam dan menit dideklarasikan sebagai variabel global yang dapat diakses oleh semua fungsi di dalam program, tetapi variabel detik hanya dapat diakses oleh fungsi yang terdapat di dalam blok program ISR (TIMER_COMPA_vect) saja demikian juga dengan variabel tunda hanya dapat diakses oleh fungsi yang terdapat di dalam blok program main.

Variabel sendiri berfungsi sebagai tempat untuk menyimpan dan mengakses data yang mewakili memori dalam mikrokontroller. Variabel harus dideklarasikan atau diberitahukan ke komplier dengan tipe data beserta nama variabel yang akan digunakan. Dalam pemograman bahasa C penggunaan huruf kecil dan huruf besar harus diperhatikan, karena bahasa C membedakan penggunaan huruf kecil dan huruf besar atau istilahnya “case sensitive”. Tipe-tipe data yang dapat digunakan terdapat dalam tabel 1 berikut ini.

Tabel 1 tipe data dan nilainya

Tipe data

Byte

Bit

Nilai

minimum

maksimum

Char

1

8

-128

128

Unsigned char

1

8

0

255

Signed char

1

8

-128

128

Int

2

16

-32768

32768

Unsigned int

2

16

0

65535

Signed int

2

16

-32768

32768

long

4

32

-2147483648

2147483648

Unsigned long

4

32

0

4294967295

Signed long

4

32

-2147483648

2147483648

Float

4

32

1.28 x 10-38

3.4 x 1038

Dalam penggunaan tipe data kita harus memperhatikan keperluan dan memori yang dialokasikan untuk deklarasi tipe data. Misalnya bila kita hendak menggunakan data dari 0 hingga 200, ada baiknya kita memilih tipe data unsigned char daripada memilih unsigned int. Karena bila kita memilih unsigned char maka kita hanya menggunakan memori sebanyak 8 bit (1 byte) sedangkan bila kita memilih unsigned int maka kita akan menggunakan memori sebanyak 16 bit (2 byte), padahal kita hanya membutuhkan data 0 – 200 saja. Pemilihan tipe data yang benar dapat menghemat penggunaan memori dan mempercepat kinerja mikrokontroller.

Beberapa tip dalam penanganan variabel.

  1. Penamaan variabel sebaiknya menggunakan huruf kecil, sedangkan huruf besar digunakan untuk penamaan konstanta. Panjang maksimal penamaan variabel adalah 31 karakter.
  2. Pemberian nama pada sebuah variabel sebaiknya menggunakan nama yang mewakili penggunaan variabel tersebut sehingga memudahkan untuk dipakai, dibaca dan dipahami. Nama variabel tidak boleh diawali dengan angka, hanya boleh diawali dengan huruf saja. Jika benar-benar ingin menggunakan angka sebagai awal nama suatu variabel, berikan tanda underscore ( _ ) diawal angka tersebut. Contoh : _16unt.
  3. Gunakan tipe data yang sesuaid dengan kebutuhan, karena hal ini berhubungan dengan penghematan memori dan memperbaiki kinerja mikrokontroller. Ingat mikrokontroller hanya memiliki memori yang kecil.
  4. Di dalam mikrokontroller tidak mengenal bilangan negatif dan pecahan, walaupun kadang-kadang hal ini dapat dibuat dengan melakukan sedikit trik pemograman.

Beberapa perintah deklarasi khusus :

  1. typedef

Berfungsi untuk mendefinisikan variabel sebagai tipe data untuk deklarasi variabel selanjutnya.

Contoh :

typedef unsigned char data8bit;    ——–à mendefinisikan data8bit sebagai tipe data

data8bit menit; —————à variabel menit bertipe data unsigned char.

  1. extern

extern berfungsi untuk menunjukan bahwa variabel tersebut didefinisikan di luar file. Tidak ada pembentukan variabel baru hanya variabel yang di luar file dapat diakses dalam file yang sedang digunakan. Syarat menggunakan exter adalah file yang mengandung variabel yang akan  kita akses harus disertakan (include) file yang mengandung variabel tersebut.

Contoh :

#include <alfa.h>  ——à menyertakan file alfa.h yang akan diakses variabelnya

extern int var_alfa —-à var_alfa telah disertakan

  1. static

static berfungsi untuk mengendapkan nilai suatu variabel atau menjadikan variabel dalam suatu fungsi (variabel lokal) mempunyai nilai awal sama dengan nilai hasil eksekusi fungsi sebelumnya. Dalam keadaan normal suatu variabel lokal memiliki nilai nol atau nilai tertentu yang dimasukan langsung dalam pernyataan program ketika fungsi tersebut dieksekusi.

Contoh :

static char jam; ——à variabel jam

  1. volatile

volatile berfungsi untuk mencegah complier  mengoptimalisasi variabel. Atau dapat juga digunakan untuk menunjuk ke variabel yang sudah dipetakan sebagai register-register khusus. Setiap variabel global yang dalam penggunaannya dikasuskan oleh fungsi layanan interrupsi (ISR) maka harus diberi perfix volatile.

Contoh :

volatile unsigned char var_interrupt;

  1. register

register berfungsi untuk menjadikan register ke variabel.

Contoh :

void Count (void)

{register unsigned char counter asm(“r13”); -à mengubah register menjadi variabel

……………kode program…………..;

Asm volatile(“clr r13”);

……………kode program…………..;

}

  1. enumarasi

enumarasi adalah variabel bertipe integer yang bisa kita tentukan isinya dengan bebas menggunakan simbol atau nama yang akan diberi nomor urut secara otomatis oleh complier.

Contoh :

enum cewek {poppy, dessy, lulu, yanti};

Maka variabel cewek akan memiliki nomor urutan cewek[0] = poppy, cewek[1] = dessy, cewek[3] = lulu dan cewek[4] = yanti.

enum arah {kiri, kanan=7, belakang, depan}

Maka  variabel arah akan memiliki nomor urut arah[0] = kiri, arah[7] = kanan, arah[3] = belakang dan arah[4] = depan.

  1. Array

Array adalah variabel yang berisi sekumpulan data yang mempunyai tipe data yang sama berbentuk matrik tunggal atau matrik multi dimensi.

Cara penulisan array satu dimensi :

Tipe_namadata_array [banyak_elemen] = data_array;

Cara penulisan array multi dimensi :

Tipe_namadata_array [banyak_elemen1] [banyak_elemen2] = {{data_elemen1},{data_elemen2}};

Contoh :

Array 1 dimensi untuk 5 data dari 0 hingga 4 :

char harga [5];

harga [0] = 25 ;

harga [1] = 35;

harga [2] = 45;

harga [3] = 40;

harga [4] = 30;

Atau bisa juga dengan cara lebih singkat yaitu :

char harga [5] = {25,35,45,40,30};

Deklarasi dengan menyuruh complier mencari sendiri banyaknya data array :

char harga [ ] = {25,35,45,40,30,43,55,65,34};

Array multi dimensi matrik 2 x 5 :

char harga [2] [5];

harga [0] [0] = 25 ;

harga [1] [1] = 35;

harga [2] [2] = 45;

harga [3] [3] = 40;

harga [4] [4] = 30;

dan seterusnya, atau dapat juga dengan mengunakan cara yang lebih ringkas :

char harga [2] [5] = {{25,35,45,40,30},{1,2,3,4,5}};

selain itu juga dikenal dengan istilah string yaitu kumpulan array dalam bentuk karakter.

Contoh string :

char say[ ] ={“hello semua”};

say[0] = “h”;

say[5] = “o”;

dan seterusnya

4. Bagian Prototype fungsi

Bagian prototype fungsi berguna untuk mendeklarasikan fungsi yang ditulis dibawah fungsi “main”. Jika kita membuat fungsi di atas fungsi “main” maka kita tidak usah mendeklarasikan fungsi tersebut, tetapi langsung tulis saja.

Cara Penulisan :

tipeDATA    namaFUNGSI   (TipeDATA,………….,………..);

atau

TipeDATA   namaFUNGSI (TipeDATA namaPARAMETER,…..);

Tipe data di depan nama fungsi adalah tipe data output fungsi. Tipe daya di depan nama Parameteradalah tipe data input fungi.

5. Bagian fungsi utama (main)

Fungsi utama adalah fungsi pertama yang akan dieksekusi dengan urutan dari atas ke bawah dan akan loncat-loncat bergantung pada instruksi lompatan “goto” atau instruksi pemanggil fungsi atau terjadi interupsi jika fungsi interupsi diaktifkan.

Cara penulis pemanggilan fungsi dalam bahasa c:

Untuk fungsi tanpa nilai balik (output) dan tanpa parameter (input):

NamaFUNGSI();

Untuk fungsi dengan nilai balik (output) dan tanpa parameter (input):

Bariabel PENAMPUNG = NamaFUNGSI ();

Untuk fungsi dengan nilai balik (output) dan dengan parameter (input):

VariabelPENAMPUNG = NamaFUNGSI (variabel_atau_konstanta, ….. , ….. );

6. Bagian subprogram / fungsi

Fungsi yang telah diprototypekan ditulis di bawah fungsi “main”. Prototipe fungsi berguna untuk memudahkan programmer dalam penulisan program yang besar. Jika kita membuat banyak fungsi dan tanpa prototipe, maka harus ditulis di atas fungsi “mai” dan ini menyulitkan untuk dibaca dan diperbaharui sehingga kita butuh prototype fungsi.

Dalam penulisan program c sebebnarnya terbagi 2 kategori yaitu :

1. Kategori deklarasi

Deklarasi adalah membuat dan memberi tahu kepada comiler tentang sesuatu yang digunakan nanti dalam penulisan program agar digunakan semestinya dan tidak dianggap error atau asing.

Contohnya :

#include ……

#define …….

variabel glodal

2. Kategori pernyataan (statement)

Pernyataan adalah membuat instruksi-instruksi program dengan menggunakan keyword seperti instruksi operasi aritmatika, logika, operasi bit atau instruksi percabangan atau looping atau pembuatan suatu fungsi.

Posted on Mei 30, 2012, in AVR and tagged , , , , , , , , , . Bookmark the permalink. 3 Komentar.

  1. thanks ya…

  2. Maaf Gan, kalo boleh tau sumber tulisan ini dari mana?? dilihat dari cara menerangkan, mudah dipahami,. kalo masih ada terusannya, share dong,..

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: