Dasar Pemrograman Mikrokontroler dengan Bahasa C
Dasar
Pemrograman Mikrokontroler dengan Bahasa C
Pokok
Bahasan:
1. Penggunaan
Fungsi (Using Functions)
2. Penanaman
bahasa rakitan di dalam Program 'C'
|
1.
|
Penggunaan Fungsi
|
Pada dasarnya
bahasa pemrograman C untuk mikrokontroler sama dengan bahasa pemrograman C
untuk dekstop, akan tetapi ada sedikit perbedaan pada proses pengaksesan
register dan memori yang digunakan di dalam pemrograman mikrokontroler. Pada
subbab ini akan dibahas sedikit tentang pemrograman C untuk
mikrokontroler.
Pengenal
Pengenal (identifier) merupakan sebuah nama yang
didefinisikan oleh peprogram untuk menunjukkan identitas dari sebuah konstanta,
variabel, fungsi, label, atau tipe data khusus. Penamaan identifier harus memenuhi syarat sebagai berikut:
• Nama
variabel tidak boleh diawali dengan angka
• Nama
variabel harus diaawali dengan huruf atau garis bawah, selanjutnya dapat
diikuti dengan huruf maupun angka, atau garis bawah
• Nama
variabel tidak boleh menggunakan operator aritmatika dan karakter-karakter
khusus seperti @,%,*, dan sebagainya
• Tidak
boleh menggunakan spasi, jika variabel terdiri dari dua kata diperbolehkan
menggunakan tanda garis bawah
• Tidak
boleh menggunakan kata kunci (key word)
dari bahasa pemrograman C, seperti: void,
main, int, if, while, dan sebagainya
• Variabel
bersifat case sensitive, yaitu
anatara huruf besar dan huruf kecil dibedakan.
Tipe Data
Dalam
pemrograman mikrokontroler ATMega8535 digunakan software untuk compiler
CodeVisionAVR, adapun tipe data yang dapat dikenali oleh compiler CodeVisionAVR
terlihat pada tabel 1.
Tabel 1. Tipe Data
|
Tipe
Data
|
Ukuran
|
Jangkauan
Nilai
|
|
Bit
|
1 Byte
|
0 atau 1
|
|
Char
|
1 Byte
|
-128 sld 127
|
|
Unsigned Char
|
1 Byte
|
0 sld 255
|
|
Signed Char
|
1 Byte
|
-128 sld 127
|
|
Int
|
2 Byte
|
-32.768 sld 32.767
|
|
Short Int
|
2 Byte
|
-32.768 sld 32.767
|
|
Unsigned Int
|
2 Byte
|
0 sld 65.535
|
|
Signed Int
|
2 Byte
|
-32.768 sld 32.767
|
|
Long Int
|
4 Byte
|
-2.147.483.648 sld
2.147.483.647
|
|
Unsigned Long Int
|
4 Byte
|
0 sld 4.294.967.295
|
|
Signed Long Int
|
4 Byte
|
-2.147.483.648 sld
2.147.483.647
|
|
Float
|
4 Byte
|
1.2 x 10
|
|
Double
|
4 Byte
|
|
Variabel
Variabel
meupakan sebuah tempat untuk menyimpan data di dalam memori yang isinya dapat
diubah-ubah. Pendeklarasian konstanta :
Tipe_data
nama_variabel = nilai
Contoh : char pinA = 0x20;
Variabel dibagi menjadi dua bagian, yaitu:
• Variabel
Global
Variabel Global
adalah variabel yang dapat dikenali oleh semua fungsi yang ada di dalam program. Variabel global
selalu dideklarasikan di luar fungsi.
Contoh : char DDA;
• Variabel
Lokal
Variabel Lokal
adalah variabel yang hanya dapat dikenali oleh fungsi tertentu. Untuk pendeklarasian variabel lokal
dideklarasikan hanya di dalam fungsi
tertentu, contoh :
void main(void)
{
Char PORTB = 0xFF;
}
Konstanta
Konstanta
merupakan sebuah tempat untuk menyimpan data di dalam memori dimana data dari
konstanta tidak dapat diubah. Pendeklarasi konstanta :
Const tipe_data nama_konstanta = nilai
Contoh : Const char PINB = 0xFF;
Komentar
Komentar adalah
tulisan-tulisan yang tidak dianggap sebagai bagian dari program sehingga tidak
akan dieksekusi oleh compailer. Komentar
digunakan sebagai penjelas, informasi ataupun keterangan dari program yang
dibuat untuk mempermudah memahami program. Untuk membuat komentar satu baris
digunakan tanda “//” atau atau untuk beberapa baris digunakan tanda “/*” dan
diakhiri dengan “*/”.
Contoh :
// Komentar satu baris
/*
komentar untuk beberapa baris
Komentar
baris kedua */
Preprosesor
Preprosesor digunakan untuk mendeklarasikan
atau mendefinisikan prosesor yang akan digunakan di dalam program, di dalam pemrograman mikrokontroler preprosesor
digunakan untuk mendeklarasikan jenis dari mikrokontroler yang akan digunakan.
Dengan preprosesor ini maka pendeklarasian register-register dan penamaannya
dilakukan pada file lain yang disisipkan dalam program utama dengan sintacks
sebagai berikut:
#include
<nama_preprosesor>
Contoh : #include <mega8535.h>
Dalam CodeVisionAVR
telah disediakan preprosesor dari file header
yang mendukung untuk pemrograman mikrokontroler, file header tersebut terlihat pada tabel 2 berikut:
Tabel 2 File Header di dalam
CodeVisionAVR
Pernyataan
Pernyataan
adalah satu buah atau satu blok intruksi lengkap yang berdiri sendiri. Contoh
pernyataan:
PORTA
= 0xF0;
Contoh blok
pernyataan:
{
PORTB
=0x00;
PORTC
= 0xFF;
}
Operator
Operator merupakan simbol khusus yangmerepresentasikan perhitungan sederhana
seperti penambahan dan perkalian. Nilai yang digunakan oleh operator disebut
operand. Ekspresi merupakan kombinasi dari operand dan operator. Dalam sebuah
eksekusi program, suatu ekspresi akan dievaluasi sehingga menghasilkan suatu
nilai tunggal. Di dalam bahasa pemrograman C untuk mikrokontroler dikenal
beberapa operator, seperti : operator Relational, operator Logika, operator
Penunjuk, operator Aritmatika, dan operator Bit.
• Operator Aritmatika
Operator aritmatika adalah operator yang
digunakan untuk melakukan perhitungan aritmatika. Operator aritmatika tersebut
dapat dilihat pada tabel 3.
Tabel 3. Operator aritmatika
|
Operator
|
Keterangan
|
|
+
|
Operator untuk operasi
penjumlahan
|
|
-
|
Operator untuk operasi
pengurangan
|
|
*
|
Operator untuk operasi
perkalian
|
|
I
|
Operator untuk operasi
pembagian
|
|
%
|
Operator untuk operasi sisa
pembagian
|
• Operator Relasional
Operator
relational disebut juga operator pembanding adalah operator yang digunakan
untuk membandingkan 2 buah data. Hasil perbandingan dari 2 buah data berupa
pernyataan benar („1‟) atau salah („0‟)
tidak berupa hasil yang lain. Adapun tabel operator relasional dapat dilihat
pada tabel 5.4
Tabel 5.3. Operator Relasional
|
Operator
|
Contoh
|
Keterangan
|
|
==
|
x == y
|
Bernilai benar
jika kedua data
sama dan
|
|
!=
|
x != y
|
Bernilai benar jika kedua data tidak
sama
|
|
>
|
x > y
|
Bernilai benar jika nilai x lebih besar dari pada y dan bernilai salah
jika y lebih besar dari x
|
|
<
|
x < y
|
Bernilai benar jika x lebih kecil daripada y dan bernilai salah jika x
bernilai lebih besar dari y
|
|
>=
|
x >= y
|
Bernilai
benar jika x
lebih besar sama
|
|
<=
|
x <= y
|
Bernilai
benar jika x
lebih kecil sama
|
• Operator Logika
Operator logika digunakan untuk
membentuk suatu logika atau dua buah kondisi atau lebih. Yang termasuk operator
logika terlihat pada tabel 5.5.
Tabel 5.5. Operator Logika
|
Operator
|
Keterangan
|
|
&&
|
Operator untuk logika
AND
|
|
|
|
Operator untuk logika
OR
|
|
!
|
Operator untuk logika
NOT
|
• Operator Bit
Operator bit
adalah operator logika yang bekrja pada level bit. Dalam operator logika data
yang dihasilkan adalah data yang berupa bilangan biner.
Yang termasuk operator bit dapat dilihat pada table
5.6.
Tabel 5.6. Operator bit
|
Operator
|
Keterangan
|
|
&
|
Operator untuk operasi AND
level bit (biner)
|
|
!
|
Operator untuk operasi OR
level bit (biner)
|
|
A
|
Operator untuk operasi XOR
level bit (biner)
|
|
~
|
Operator untuk operasi NOT
level bit (biner)
|
|
<<
|
Operator untuk operasi
geser kiri pada data biner
|
|
>>
|
Operator untuk operasi
geser kanan pada data biner
|
Fungsi Pustaka
Bahasa C memiliki sejumlah fungsi
pustaka yang berada pad filefile tertentu dan disediakan untuk menangani berbagai hal dengan cara pemangilan
fungsi-fungsi yang telah dideklarasikan di dalam file tersebut. Biasanya file-file
pustaka disediakan dalam file yang telah dikompilasi. Pada proses linking kode-kode dari fungsi ini akan
dikaitkan dengan kode-kode yang ditulis oleh program. Sintaks untuk menggunakan
fungsi pustaka adalah sebagai berikut:
#include <nama_fungsi_pustaka.h>
Di dalam CodeVisionAVR
telah disertakan fungsi
pustaka yang mendukung
pemrograman mikrokontroler, diantara fungsi pustaka yang disertakan
adalah sebagai berikut:
• Fungsi
tipe karakter (ctype.h)
• Fungsi
standar I/O (stdio.h)
• Fungsi
matematika (math.h)
• Fungsi
string (string.h)
• Fungsi
konversi BCD (bcd.h)
• Fungsi
konversi akses memori (mem.h)
• Fungsi
waktu tunda (delay.h)
• Fungsi
LCD (lcd.h)
• Fungsi
I2C (i2c.h)
• Fungsi
SPI (spi.h)
• Fungsi
RTC/ Real Time Clock (ds1302.h,
ds1307.h)
• Fungsi
Sensor suhu LM75, DS1621, dan lain-lain (lm75.h,
ds1621.h)
Pernyataan If
Pernyataan if
digunakan untuk melakukan
pengambilan keputusan terhadap
dua buah kemungkinan yaitu
mengerjakan suatu blok pernyataan atau tidak, jika dan hanya jika
persyaratannya terpenuhi. Bentuk pernyataan if adalah sebagai berikut:
If
(kondisi)
{
//
blok pernyataan yang dieksekusi jika kondisi benar
}
Pernyataan If ... Else
Pernyataan If
... else digunakan untuk meakukan pengambilan keputusan terhadap dua buah
kemungkinan, kedua kemungkinan tersebt adalah mengerjakan pernyataan satu atau
mengerjakan pernyataan yang lain. Bentuk umum pernyataan If ... Else adalah
sebagai berikut:
If
(kondisi
{
//blok
pernyataan 1
}
else
{
//
blok pernyataan 2
}
Pernyataan If Bersarang
Pernyataan if
bersarang (nested If) adalah
pernyataan if maupun if ... else dimana di dalam blok
pernyataan yang akan dikerjakan terdapat pernyataan if atau if
... else lagi.
Bentuk umum pernyataan if bersarang:
If (kondisi_1)
{
If (kondisi_2)
{
//blok pernyataan
}
}
else
{
If (kondisi_3)
{
// pernyataan
}
}
Pernyataan Switch
Pernyataan switch
digunakan untuk
melakukan pengambilan keputusan
terhadap banyak kemungkinan. Bentuk umumdari pernyataan switch adalah sebagai
berikut:
switch (ekspresi)
{
case
nilai_1:pernyataan_1; break;
case nilai_2:pernyataan_2; break;
..... default : pernyataan_default; break;
}
Pernyataan While
Pernyataan while
digunakan untuk pengulangan sebuah pernyataan atau blok pernyataan secara
terus menerus selama kondisi tertentu masih terpenuhi.
Bentuk umum pernyataan while adalah sebagai berikut:
while (kondisi)
{
//pernyataan
atau blok pernyataan
}
Pernyataan Do ... While
Pernyataan Do
... While digunakan sama seperti pengunaan pernyataan dari while. Bentuk umum dari pernyataan Do ... While adalah sebagai berikut: do
{
//pernyataan atau blok pernyataan
}
while (kondisi)
Yang membedakan
peryataan while dengan do ... while adalah bahwa pada
pernyataan while pengetesan kondisi dilakukan terlebih dahulu, jika kondisi
terpenuhi maka akan dilaksanakan tetapi apabila tidak terpenuhi maka tidak akan
pernah ada pelaksanaan dari pernyataan. Sedangkan pernyataan do ... while, blok
pernyataan dikerjakan terlebih dahulu setelah itu baru dilakukan pengetesan
kondisi jadi pernyataan yang ada minimal akan dikerjakan sekali walaupun
kondisinya salah.
Pernyataan For
Pernyataan for digunakan juga untuk melakukan
pngulangan sebuah pernyataan atau blok pernyataan, tetapi beberapa kali jumlah
pengulangannya dapat ditentukan secara lebih spesifik. Bentuk pernyataan for adalh sebagai berikut:
for (nilai_awal ; kondisi ; perubahan)
{
//
pernyataan atau blok pernyataan
}
nilai_awal adalah nilai inisial awal
sebuah variabel yang didefinisikan terlebih dahulu untuk menetukan nilai
variabel pertama kali sebelum pengulangan. Kondisi
merupakan pernyataan pengetesan untuk mengontrol pengulangan, jika
pernyataan kondisi terpenuhi maka pernyataan akan diulang terus sampai
pernyataan kondisi tidak terpenuhi. Perubahan
adalah pernyataan yang digunakan untuk melakukan perubahan nilai variabel
baik naik maupun turun setiap kali perulangan dilakukan.
Fungsi
Fungsi adalah
kumpulan pernyataan-pernyataan yang dikemas dalam satu wadah kemudian diberi
nama dan selanjutnya dapat dipangil beberapa kali dalam sebuah program. Fungsi
dapat digunakan untuk memecah logika program menjadi lebih kecil sehingga akan
lebih memudahkan untuk mengelola dan memahami alur logika program pada saat
menulis ataupun mengoreksi program. Fungsi dapat dibedakan berdasarkan hasil
fungsi tersebut menjadi dua, yaitu:
- Fungsi nilai balik
Fungsi ini akan
menghasilkan data keluaran baru setelah fungsi ini dipanggil/ dieksekusi oleh
program. Bentuk umum dari fungsi ini adalah sebagai berikut:
tipe_data
nama_fungsi (tipe_data_1 parameter_1, ...)
{
Pernyaaan_1;
Pernyataan_2;
......
}
Contoh :
int jarak (int data_1, int data_2)
{
hasil
= data_1 / data_2; return hasil;
}
Fungsi dapat di
sebut dengan fungsi tanpa nilai balik jika fungsi tersebut apabila dipangil
tidak menghasilkan nilai. Bentuk umum dari fungsi ini adalah sebagai
berikut:
tipe_data
nama_fungsi (tipe_data_1 parameter_1, ....)
{
Pernyaaan_1;
Pernyataan_2;
......
}
Contoh : void port (char
A, char B, char C, char D)
{
DDRA
= A; DDRB = B; DDRC = C; DDRD = D;
}
Bentuk Dasar Bahasa C
Sebuah program
dalam bahasa C harus memiliki sebuah fungsi utama. Fungsi utama atau sering
disebut dengan fungsi main memiliki
kerangka program sebagai berikut:
void main(void)
{
//
pernyataan-pernyataan
}
Fungsi utama
merupakan fungsi yang paling pertama kali yang akan dieksekusi oleh program,
walaupun di dalam program tersebut terdapat beberapa fungsi. Kedudukan fungsi
fungsi yang lain lebih rendah dari fungsi utama, sehingga fungsi selain fungsi
utama dapat dipanggil/ digunakan di dalam fungsi utama.


Komentar
Posting Komentar