Struktur Pemrograman C
Struktur penulisan bahasa C secara umum terdiri atas empat blok, yaitu :
- header
- deklarasi konstanata global dana atau variabel
- fungsi dan atau prosedur
- program utama
secara umum, pemrograman C paling sederhana dilakukan dengan hanya menuliskan program utamanya saja yaitu :
void main (void)
{
...
}
Secara utuh adalah sebagai berikut :
/*HEADER untuk memanggil library yang akan digunakan */
#include <mega8535.h>
#include <stdio.h>
/*Deklarasi konstanta dan atau variabel global*/
unsigned char dt,xx;
char buf[33];
/*Deklarasi fungsi dan atau prosedur*/
unsigned char lampu(unsigned char bitn)
{
PORTA=bitn & 0x3C;
}
/*Program Utama*/
void main (void);
/*Deklarasi konstanta dan atau variabel lokal*/
char data;
PORTA=0x00;
DDRA=0xF0;
while (1)
{
. . .
};
}
HEADER
Header
berisi include file (.hex) yaitu library (pustaka) yang akan digunakan
adlam pemograman. Biasanya berisikan 2 buah pengarah, yaitu :
- Pengarah preposesor
Pengarah
preprosesor digunakan untuk mendefinisikan prosesor yang digunakan,
dalam hal ini untuk mendefinisikan mikrokontroller yang digunakan.
Dengan pengarah preprosesor ini maka pendeklarasian register-register
dan penamaannya dilakukan pada file lain yang disisipkan dalam program
utama dengan sintaks sebagai berikut :
#include <nama_preposesor>
Contoh :
#include <mega8535.h>
- Pengarah Pustaka
Pengarah
pustaka digunakan untuk mendefinisikan pustaka yang digunakan. Pustaka
berisikan perintah-perintah yang mengatur register-register. Sintaksnya
sebagai berikut :
#include <nama_pustaka>
Contoh :
#include <delay.h>
TIPE DATA
Berikut ini adalah tabel tipe-tipe variabel data yang dapat digunakan di kompiler code vision AVR :
Tipe
|
Size (Bits)
|
Range
|
bit
|
1
|
0,1
|
char
|
8
|
-128 to 127
|
Unsigned char
|
8
|
0 to 255
|
Signed char
|
8
|
-128 to 127
|
Int
|
16
|
-32768 to 32767
|
Short int
|
16
|
-32768 to 32767
|
Unsigned int
|
16
|
0 to 65535
|
Signed int
|
16
|
-32768 to 32767
|
Long int
|
32
|
-2147483648 to 2147483647
|
Unsigned long int
|
32
|
0 to 4294967295
|
Signed long int
|
32
|
-2147483648 to 2147483647
|
Float
|
32
|
+/-1.175e-38 to +/-3.402e38
|
double
|
32
|
+/-1.175e-38 to +/-3.402e38
|
Khusus untuk tipe data bit hanya bisa dideklarasikan untuk variabel global.
KONSTANTA
Penulisan konstanta adalah sebagai berikut :
- integer
atau long integer dapat ditulis dengan format desimal (contoh 1234),
biner dengan awalan 0b (contoh 0b10100111), heksadesimal dengan awalan
0x (contoh 0xF0) atau oktal dengan awalan O (contoh O7777)
- unsigned integer ditulis dengan diakhiri U (contoh 100000U)
- long integer ditulis dengan diakhiri L (contoh 99L)
- unsigned long integer ditulis dengan diakhiri UL (contoh 99UL)
- floating point ditulis dengan diakhiri F (contoh 1.234F)
- character
ditulis dalam tanda kutip (contoh ‘a’) akan tetapi jika berupa string
harus dalam tanda kutip dua (contoh “Sistem Tertanam”).
LABEL, VARIABEL, FUNGSI
Identifikasi label, variabel, dan fungsi dapat berupa huruf (A...Z, a...z) dan angka (0...9), juga karakter underscore
(_). Meskipun begitu identifikasi hanya bisa dimulai dengan huruf atau
karakter underscore. Yang lebih pentinglagi, identifikasi ini case is seignificant yaitu huruf besar dan kecil berbeda. Paling banyak memuat 32 karakter.
KOMENTAR
Komentar diawali dengan tanda /* dan diakhiri dengan */ .
Contoh :
/* Ini komentar*/
/* Ini komentar
Multi baris*/
Sedangkan komentar stu baris bisa dengan tanda ‘//’
Contoh :
// Ini juga komentar
RESERVED KEYWORDS
Berikut ini adalah daftar kata baku yang tidak bisa dipakai (reserved keywords) untuk label, identifikasi atau variabel.
break flash signed
bit float sizeof
case for sfrb
char funcused sfrw
const goto static
continue if struct
default inline switch
do int typedef
double interrupt union
eeprom long unsigned
else register void
enum return volatile
extern short while
OPERATOR
Suatu
instruksi pasti mengandung operator dan operand. Operand adalah variabel
atau konstanta yang merupakan bagian pernyataan sedangkan operator
adalah suatu simbol yang menyatakan operasi mana yang akan dilakukan
oleh operand tersebut. Contoh :
c = a+ b ;
Ada tiga operand (a, b, dan c) dan dua operator (= dan +).
Operator dalam C dibagi menjadi 3 kelompok, yaitu :
- unary
Operator yang beroperasi pada satu operand, misal : -n.
- binary
Operator yang beroperasi pada dua operand, misal : a-n.
- Ternary
Operator yang memerlukan tiga atau lebih operand, misal : a = (b*c)+d
ARITMATIKA
Simbol
|
Contoh
|
Aritmatika
|
+
|
c=a+b
n=n+2
|
Penjumlahan
|
-
|
c=a-b
n=n-2
|
Pengurangan
|
++
|
++i
|
Kenaikan (increment, sama dengan i = i + 1
|
--
|
--i
|
Penurun (decrement, sama dengan i = i -1
|
*
|
c=a*b
n=n*2
|
Perkalian
|
/
|
c=a/b
n=n/2
|
Pembagian
|
%
|
sisa=a%b
|
Menghasilkan sisa dari pembagian a dan b bilangan bulat
|
=
|
a=b
|
Pemberian nilai
|
+=
|
a+=2
|
Penambahan suatu nilai pada suatu variabel yang sudah ada sebelumnya. Sama dengan a=a+2
|
-=
|
a-=2
|
Pengurangan suatu nilai pada suatu variabel yang sudah ada sebelumnya. Sama dengan a=a-2
|
*=
|
a*=2
|
Pengalian suatu nilai pada suatu variabel yang sudah ada sebelumnya. Sama dengan a=a*2
|
/=
|
a/=2
|
Pembagian suatu nilai pada suatu variabel yang sudah ada sebelumnya. Sama dengan a=a/2
|
%
|
a%=2
|
Sisa
dari suatu nilai pada suatu variabel yang sudah ada sebelumnya yang
dibagi oleh nilai atau variabel lain Sama dengan a=a-2
|
*
|
*pointer
|
Menunjukkan isi dari pointer
|
LOGIKA
Simbol
|
Contoh
|
Logika pembanding
|
==
|
if (a==b)
|
Logika sama dengan, digunakan untuk pembanding. Menghasilkan nilai true jika a=b
|
!=
|
if (a!=b)
|
Tidak sama dengan. Menghasilkan nilai true jika a ≠ b
|
<
|
if (a<b)
|
Logika lebih kecil dari. Menghasilkan nilai true jika a<b
|
<=
|
if (a<=b)
|
Logika lebih kecil sama dengan dari. Menghasilkan nilai true jika a ≤ b
|
>
|
if (a>b)
|
Logika lebih besar dari. Menghasilkan nilai true jika a>b
|
>=
|
if (a>=b)
|
Logika lebih besar sama dengan dari. Menghasilkan nilai true jika a ≥ b
|
!
|
if (!a)
|
NOT
|
&&
|
if (a==b && a==c)
|
AND
|
||
|
if (a==b || a==c)
|
OR
|
MANIPULASI BIT
~
|
a = ~b
|
Complement.
b = 1100; a = 0011
|
&
|
c = a & b
|
AND untuk manipulasi bit.
a = 1100; b = 1001; maka c = 1001.
|
|
|
c = a| b
|
OR untuk manipulasi bit.
a = 1100; b = 1001; maka c = 1101
|
^
|
c = a ^ b
|
XOR untuk manipulasi bit.
a = 1100; b=1001; maka c=0101.
|
<<
|
c = << n
|
Shift left, manipulasi bit menggeser ke kiri sejauh n bit
a=1101; n=2; maka c=110100
|
>>
|
c = a >> n
|
Shift right, manipulasi bit menggeser ke kiri sejauh n bit
a=11010; n=2, maka c=0110.
|
PERCABANGAN
- if
bentuk umum dari percabangan ini adalah:
if (kondisi)
{
//pernyataan
};
Artinya adalah pernyataan akan dijalankan jika kondisi terpenuhi.
Contoh:
if (a<0x50)
{
PORTC=0x55;
};
Dalam contoh ini PORTC akan dikirimkan data 0x55 (ingat mode heksa) jika nilai a lebih kecil dari 0x50
- if-else
bentuk umum dari percabangan ini adalah:
if (a<0x50)
{
//pernyataan a
}
else
{
//pernyataan b
};
Artinya
adalah pernyataan a akan dijalankan jika kondisi terpenuhi dan
pernyataan b akan dijalankan jika kondisi tidak terpenuhi.
Contoh:
if (a<0x50) PORTC=0xAA;
{ };
PORTC=0x55;
}
else
(
PORTC akan dikirim data 0x55 jika nilai a lebih kecil dari 0x50 dan PORTC akan dikirim data 0xAA jika a≥0x50
- switch – case
pernyataan switch – case digunakan jika terjadi banyak percabangan. Struktur penulisan pernyataan ini adalah sebagai berikut :
. . .
switch (ekspresi)
{
case konstanta1:pernyataan1;break;
case konstanta2:pernyataan2;break;
. . .
case konstantaN:pernyataanN;break;
}
. . .
Contoh:
. . .
switch (a)
{
case1:PORTC=0x01;break;
case2:PORTC=0x02;break;
case3:PORTC=0x04;break;
}
. . .
PORTC
akan dikirim data 0x01 jika nilai a=1 akan dikirim data 0x02 jika nilai
a=2 dan PORTC akan dikirim data 0x04 jika nilai a=3.
- switch – case – default
Pernyataan
switch – case – default hampis sama dengan switch – case. Yang
membedakan adalah bahwa dengan adanya default maka jika tidak terdapat
kondisi case yang sesuai dengan ekspresi switch maka akan menuju
pernyataan yang terdapat di bagian default. Struktur penulisan
pernyataan ini adalah sebagai berikut:
. . .
switch (ekspresi)
{
case konstanta1:pernyataan1;break;
case konstanta2:pernyataan2;break;
. . .
case konstantaN:pernyataanN;break;
default:pernyataan-pernyataan;
}
. . .
Contoh:
. . .
switch (ekspresi)
{
case case1:POTRC=0x01;break;
case case2:PORTC=0x02;break;
case case3:PORTC=0x03;break;
Default:PORTC=0xFF
}
PORTC
akan dikirim data 0x01 jika nilai a=1, PORTC akan dikirim data 0x02
jika nilai a=2 dan PORTC akan dikirim data 0x04 jika nilai a=3 dan jika
kondisi case r=tidak sesuai dengan ekspresi maka pernyataan di default
akan dijalankan.
PERULANGAN
- for
pernyataan
for akan melakukan perulangan beberapa kali sesuai yang diinginkan.
Struktur penulisan perulangan for adalah sebagai berikut:
. . .
For (mulai;kondisi;penambahan atau pengurangan)
{
//pernyataan-pernyataan
};
Mulai
adalah pemberian nilai awal, kemudian kondisi adalah pengondisi dalam
for yaitu jika kondisi bernilaitrue maka pernyataan dalam for akan
dijalankan. Penambahan atau pengurangan adalah penambahan atau
pengurangan terhadap nilai awal.
Contoh:
. . .
A=1;
For (i=1;i<50;i++)
{
a=a*2;
PORTC=a;
};
. . .
Contoh
di atas akan melakukan perulangan 50 kali, yaitu dari 2 hingga 50
dengan penambahan 1 (i++, lihat operator aritmetik). Hasilnya PORTC akan
dikirim data 1, kemudian data 2, 4, 8, . . .
- while
bentuk dari perulangan ini adalah sebagai berikut:
while (kondisi)
{
pernyataan-pernyataan;
}
Jika
kondisi memenuhi (bernilai true) maka pernyataan-pernyataan dibawahnya
akan dijalankan hingga selesai, kemudian akan menguji kembali kondisi
diatas.
Contoh:
. . .
i=1;
a=1
While (i<50)
{
a=a*2;
PORTC=a;
i++;
};
- do – while
bentuk perulangan ini kebalikan dari while – do, yaitu pernyataan dilakukan terlebih dahulu kemudian diuji kondisinya.
Do
{
Pernyataan-pernyataan;
}
While (kondisi);
Contoh:
. . .
i=1;
a=1;
do
{
a=a*2;
PORTC=a;
i++
}
while (i<50);
. . .
KONVERSI POLA
Karakter %_ dipakai sebagai operator konversi pola. Konversi pola akan sangat berguna pada saat kita menampilkan hasil ke LCD.
- %d menampilkan bilangan bulat positif
Contoh : sprintf(buf,”Angka %d”,14);
- %o menampilkan bilangan oktal bulat
- %x menampilkan bilangan heksadesimal bulat
- %u menampilkan bilangan desimal tanpa tanda
- %f menampilkan bilangan pecahan
- %i menampilkan bilangan integer
- %c menampilkan karakter yang ditunjukkan bilangan ASCII
PROSEDUR DAN FUNGSI
Seringkali dalam suatu program kita
menemukan kelompok instruksi untuk suatu keperluan tertentu yang sering
dijalankan. Kelompok instruksi ini bisa dibuat sebagao prosedur atau
fungsi. Langkah ini akan dapat menghemat memor dibanding bila
instruksi-instruksi tersebut ditulis berulang-ulang. Ingat bahwa di sini
kita akan memprogram mikrokontroller yang memiliki memori yang
terbatas.
PROSEDUR
Prosedur adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan tertentu tanpa mengembalikan suatu nilai
. . .
void nama_prosedur (parameter1, parameter2, ... parameterN) {
Pernyataan-pernyataan;
}
Contoh:
. . .
void delay (unsigned char i)
{
while (i--)
{
/* penulisan untuk bahasa assembly */
/* akan dibahas tersendiri*/
#asm
nop
nop
#endasm
};
}
. . .
FUNGSI
Fungsi adalah suatu kumpulan
instruksi untuk mengerjakan suatu keperluan tertentu dengan hasil akhir
pengembalian nilai dari keperluan tersebut.
. . .
type data nama_fungsi (parameter1, parameter2, ..., parameterN)
{
Pernyataan-pernyataan;
Return variable_hasil;
}
. . .
Contoh:
. . .
int luas (int pj, int lb)
{
luas = pj*lb;
return luas:
}
. . .
Pemanggilan prosedur atau fungsi dilakukan dengan langsung menuliskan prosedur atau fungsinya.
Contoh:
. . .
delay(150);
dt = luas (5,10);
}
. . .
MEMASUKKAN BAHASA ASSEMBLY
Kita sebut sebagai in-line assembly.
Dalam pemrograman dengan bahasa C
ini kita masih dapat memasukkan bahasa assembly ke dalam program C.
Struktur penulisannyapun juga mudah, yaitu :
. . .
#asm
nop
nop
#endasm
. . .
Atau jika hanya beberapa instruksi maka kita bisa melakukannya dengan cara :
. . .
#asm(“nop\nop\nop”)
. . .
PERNYATAAN KENDALI LAINNYA
Break
Pernyataan ini akan menghentukan atau menyebabkan keluar dari suatu blok program.
Continue
Pernyataan ini akan menyebabkan kendali melakukan kembali proses perulangan dari awa
Tidak ada komentar:
Posting Komentar