1. Struktur Dasar Program C
Struktur dasar Program C terdiri dari bagian-bagian berikut:
- Bagian include
- Bagian fungsi
- Bagian Blok Main
- Bagian Komentar

Struktur Data Bahasa C
Bagian Include
Bagian include biasanya terdiri dari header file, yaitu sebuah file yang berisi fungsi-fungsi yang sering dipakai dan dikelompokkan pada file-file tertentu agar dapat digunakan oleh program C yang lain
Bagian deklarasi
Merupakan bagian yang mendeklarasikan label menjadi konstanta-konstanta tertentu di mana konstanta tersebut bisa berupa nilai atau dapat juga berupa sebuah kalimat.
Contoh:
#define TXD_OUT 1 //label TXD_OUT didefinisikan sebagai nilai 1
#define TXD_HIGH PORTD|=(1<<TXD_OUT) //label TXD_HIGH didefinisikan menjadi kalimat
//PORTD|=(1<<TXD_OUT) sehingga dengan me
//nuliskan TXD_HIGH berarti sama dengan
//menuliskan syntax PORTD|=(1<<TXD_OUT)
Bagian Fungsi
Merupakan bagian dari program yang akan sering digunakan dan dipanggil berulang-ulang sehingga sebaiknya ditulis sebagai fungsi agar dapat dipanggil setiap saat tanpa harus menuliskan ulang isinya.
Contoh di atas adalah fungsi Inisialisasi USART . Nama Fungsi diawali dengan void artinya fungsi tersebut tidak memiliki nilai yang harus dikembalikan. Di depan nama fungsi terdapat deklarasi variable yaitu unsigned int baud di mana variable tersebut harus diisi nilai tertentu sebelum fungsi dipanggil. Dalam fungsi USART_INIT ini variable baud diisi dengan nilai MYUBRR terlebih dahulu sebelum dipanggil, sehingga pada saat fungsi dijalankan variable Baud telah terisi dengan nilai MYUBRR.
Untuk fungsi yang membutuhkan nilai yang harus dikembalikan contohnya adalah sebagai berikut.
unsigned char USART_Receive (void){
while(!(UCSRA&(1<<RXC)));
return(UDR);
}
Nilai yang akan dikembalikan ditentukan dalam bentuk unsigned char sehingga nama fungsi akan diawali dengan tipe tersebut. Karena tidak membutuhkan nilai yang harus dibawa saat dipanggil maka di sebelah kanan nama fungsi diberikan (void) yang berarti kosong.
Setelah fungsi dijalankan, di bagian akhir ditambahkan return (UDR) artinya nilai yang dikembalikan saat fungsi ini selesai dijalankan adalah data yang tersimpan pada register UDR, di mana pada ATMega8535 nilai ini adalah nilai yang diterima pada register data USART.
Blok Main
Merupakan bagian dari jalannya program utama di mana bagian adalah tempat kita menuliskan program. Bagian ini diawali dengan { dan diakhiri dengan }.
Bagian Komentar
Bagian ini adalah bagian yang menyimpan catatan dari pemrogram agar dapat dengan mudah diingat cara kerja pada program tersebut. Bagian ini diawali dengan tanda // yang merupakan indikasi sebagai bagian yang tidak perlu diproses saat compile.
2. Variabel, tipe data dan konstanta

Variabele, tipe data dan konstanta
Gambar di atas adalah cara penulisan variable, setiap variable terlebih dahulu dituliskan dengan diawali tipe data dari variable dan kemudian dilanjutkan dengan nama variable. Variabel juga dapat langsung diberi nilai awal.
Hal yang perlu diperhatikan dalam membuat variable adalah:
- Jangan menggunakan angka di bagian awal variable
- Jangan menggunakan kata-kata khusus yang sudah digunakan pada bahasa C seperti if, void, for dll
- Penulisan huruf kecil dan besar sifatnya sensitive sehingga variable yang tertulis dengan huruf besar akan berbeda dengan variable yang tertulis dengan huruf kecil.
- Disarankan menggunakan underscore untuk variable yang lebih dari satu kata
Contoh program yang menggunakan variable adalah sebagai berikut
#include <avr/io.h>
Int main (){
Unsigned char data_port;
data_port=PINB;
Artinya data pada Port B diambil dan diisikan ke variable data_port yang tipenya unsigned char.
Tipe data dalam Bahasa C
Tipe Data
|
Ukuran
|
Panjang
|
Contoh
|
Char
|
1 byte
|
-128 – 127
|
A’,'a’,'3′
|
int
|
2 byte
|
– 32768 – 32767
|
32, 256, 100
|
float
|
4 byte
|
1.2E-38 – 3.4E+38
|
3.5, 5.6, 7.5
|
double
|
8 byte
|
2.3E-308 – 1.7E+308
|
2.56, 3.57, 4.12
|
void
|
tidak ada data
|
array
|
tergantung nilai ukuran array
|
|
|
Konstanta dalam Bahasa C
Konstanta adalah sebuah variable yang sifatnya permanen dan tidak dapat diubah-ubah. Terdapat dua cara untuk mendefinisikan konstanta.
1. Menggunakan define
#define BAUD 115200
#define MYUBRR FOSC/8/BAUD-1
Di sini konstanta BAUD diisi dengan 115200 dan MYUBRR diisi dari persamaan MYUBRR=FOSC/8/BAUD-1
2. Menggunakan const
Const data_port = 0×55;
Const menggunakan “;” sebagai penutup
Operator dalam Bahasa C
1. Operator Aritmatika:
Penjumlahan +
Pengurangan -
Perkalian *
Pembagian /
Sisabagi %
2. Operator Penugasan:
Pengisian Nilai =
Pengisian dan Penambahan +=
Pengisian dan Pengurangan -=
Pengisian dan Perkalian *=
Pengisian dan Pembagian /=
Pengisian dan SisaBagi %=
Pengisian dan Shift Left <<=
Pengisian dan Shift Right >>=
Pengisian dan bitwise AND &=
Pengisian dan bitwise OR |=
Pengisian dan bitwise XOR ^=
3. Operator Pembanding
Lebih Besar >
Lebih Kecil <
Sama dengan ==
Tidak sama dengan !=
Lebih Besar sama dengan >=
Lebih Kecil sama dengan <=
4. Operato Logika
Logika AND &&
Logika OR ||
Negasi/kebalikan !
5. Operator Bitwise
AND &
OR |
XOR ^
Not/komplemen ~
Left Shift <<
Right Shift >>
6. Operator Lain lain
Alamat Memori & untuk mengambil alamat memori
Pointer * untuk membuat pointer
Ternary ?: untuk membuat kondisi
Increment ++ untuk menambah 1
Decrement — untuk mengurangi 1
Paulus Andi Nalwan, DELTA ELECTRONIC
Struktur dasar Program C terdiri dari bagian-bagian berikut:
- Bagian include
- Bagian fungsi
- Bagian Blok Main
- Bagian Komentar
Bagian Include
Bagian include biasanya terdiri dari header file, yaitu sebuah file yang berisi fungsi-fungsi yang sering dipakai dan dikelompokkan pada file-file tertentu agar dapat digunakan oleh program C yang lain
Bagian deklarasi
Merupakan bagian yang mendeklarasikan label menjadi konstanta-konstanta tertentu di mana konstanta tersebut bisa berupa nilai atau dapat juga berupa sebuah kalimat.
Contoh:
#define TXD_OUT 1 //label TXD_OUT didefinisikan sebagai nilai 1
#define TXD_HIGH PORTD|=(1<<TXD_OUT) //label TXD_HIGH didefinisikan menjadi kalimat
//PORTD|=(1<<TXD_OUT) sehingga dengan me
//nuliskan TXD_HIGH berarti sama dengan
//menuliskan syntax PORTD|=(1<<TXD_OUT)
Bagian Fungsi
Merupakan bagian dari program yang akan sering digunakan dan dipanggil berulang-ulang sehingga sebaiknya ditulis sebagai fungsi agar dapat dipanggil setiap saat tanpa harus menuliskan ulang isinya.
Contoh di atas adalah fungsi Inisialisasi USART . Nama Fungsi diawali dengan void artinya fungsi tersebut tidak memiliki nilai yang harus dikembalikan. Di depan nama fungsi terdapat deklarasi variable yaitu unsigned int baud di mana variable tersebut harus diisi nilai tertentu sebelum fungsi dipanggil. Dalam fungsi USART_INIT ini variable baud diisi dengan nilai MYUBRR terlebih dahulu sebelum dipanggil, sehingga pada saat fungsi dijalankan variable Baud telah terisi dengan nilai MYUBRR.
Untuk fungsi yang membutuhkan nilai yang harus dikembalikan contohnya adalah sebagai berikut.
unsigned char USART_Receive (void){
while(!(UCSRA&(1<<RXC)));
return(UDR);
}
Nilai yang akan dikembalikan ditentukan dalam bentuk unsigned char sehingga nama fungsi akan diawali dengan tipe tersebut. Karena tidak membutuhkan nilai yang harus dibawa saat dipanggil maka di sebelah kanan nama fungsi diberikan (void) yang berarti kosong.
Setelah fungsi dijalankan, di bagian akhir ditambahkan return (UDR) artinya nilai yang dikembalikan saat fungsi ini selesai dijalankan adalah data yang tersimpan pada register UDR, di mana pada ATMega8535 nilai ini adalah nilai yang diterima pada register data USART.
Blok Main
Merupakan bagian dari jalannya program utama di mana bagian adalah tempat kita menuliskan program. Bagian ini diawali dengan { dan diakhiri dengan }.
Bagian Komentar
Bagian ini adalah bagian yang menyimpan catatan dari pemrogram agar dapat dengan mudah diingat cara kerja pada program tersebut. Bagian ini diawali dengan tanda // yang merupakan indikasi sebagai bagian yang tidak perlu diproses saat compile.
2. Variabel, Tipe Data dan Kontanta

Gambar di atas adalah cara penulisan variable, setiap variable terlebih dahulu dituliskan dengan diawali tipe data dari variable dan kemudian dilanjutkan dengan nama variable. Variabel juga dapat langsung diberi nilai awal.
Hal yang perlu diperhatikan dalam membuat variable adalah:
- Jangan menggunakan angka di bagian awal variable
- Jangan menggunakan kata-kata khusus yang sudah digunakan pada bahasa C seperti if, void, for dll
- Penulisan huruf kecil dan besar sifatnya sensitive sehingga variable yang tertulis dengan huruf besar akan berbeda dengan variable yang tertulis dengan huruf kecil.
- Disarankan menggunakan underscore untuk variable yang lebih dari satu kata
Contoh program yang menggunakan variable adalah sebagai berikut
#include <avr/io.h>
Int main (){
Unsigned char data_port;
data_port=PINB;
Artinya data pada Port B diambil dan diisikan ke variable data_port yang tipenya unsigned char.
Tipe data dalam Bahasa C
Tipe Data
|
Ukuran
|
Panjang
|
Contoh
|
Char
|
1 byte
|
-128 – 127
|
A’,'a’,'3′
|
int
|
2 byte
|
- 32768 – 32767
|
32, 256, 100
|
float
|
4 byte
|
1.2E-38 – 3.4E+38
|
3.5, 5.6, 7.5
|
double
|
8 byte
|
2.3E-308 – 1.7E+308
|
2.56, 3.57, 4.12
|
void
|
tidak ada data
|
array
|
tergantung nilai ukuran array
|
|
|
Konstanta dalam Bahasa C
Konstanta adalah sebuah variable yang sifatnya permanen dan tidak dapat diubah-ubah. Terdapat dua cara untuk mendefinisikan konstanta.
1. Menggunakan define
#define BAUD 115200
#define MYUBRR FOSC/8/BAUD-1
Di sini konstanta BAUD diisi dengan 115200 dan MYUBRR diisi dari persamaan MYUBRR=FOSC/8/BAUD-1
2. Menggunakan const
Const data_port = 0×55;
Const menggunakan “;” sebagai penutup
Operator dalam Bahasa C
1. Operator Aritmatika:
Penjumlahan +
Pengurangan -
Perkalian *
Pembagian /
Sisabagi %
2. Operator Penugasan:
Pengisian Nilai =
Pengisian dan Penambahan +=
Pengisian dan Pengurangan -=
Pengisian dan Perkalian *=
Pengisian dan Pembagian /=
Pengisian dan SisaBagi %=
Pengisian dan Shift Left <<=
Pengisian dan Shift Right >>=
Pengisian dan bitwise AND &=
Pengisian dan bitwise OR |=
Pengisian dan bitwise XOR ^=
3. Operator Pembanding
Lebih Besar >
Lebih Kecil <
Sama dengan ==
Tidak sama dengan !=
Lebih Besar sama dengan >=
Lebih Kecil sama dengan <=
4. Operato Logika
Logika AND &&
Logika OR ||
Negasi/kebalikan !
5. Operator Bitwise
AND &
OR |
XOR ^
Not/komplemen ~
Left Shift <<
Right Shift >>
6. Operator Lain lain
Alamat Memori & untuk mengambil alamat memori
Pointer * untuk membuat pointer
Ternary ?: untuk membuat kondisi
Increment ++ untuk menambah 1
Decrement – untuk mengurangi 1
Percabangan dalam Bahasa C
1. Percabangan if
Contoh flowchartnya adalah sebagai berikut

int main (void){
unsigned char data_serial;
USART_INIT(MYUBRR);
data_serial=USART_Receive();
if (data_serial==’0′){ //apabila data serial = ‘0’ maka
USART_Transmit(‘O’); //jalankan blok instruksi yang
USART_Transmit(‘F’); //mengirimkan ‘OFF’ ke port
USART_Transmit(‘F’); //serial
while(1); //
}
USART_Transmit(‘O’); //apabila data serial =buka ‘0’
USART_Transmit(‘N’); //maka kirim ON
while(1);
}
2. Percabangan if else
int main (void){
unsigned char data_serial;
USART_INIT(MYUBRR);
data_serial=USART_Receive();
if (data_serial==’0′){
USART_Transmit(‘O’);
USART_Transmit(‘F’);
USART_Transmit(‘F’);
}
else{
USART_Transmit(‘O’);
USART_Transmit(‘N’);
}
unsigned char tabel_data [16]={0×0D,0×0A,’t',’o',’m',’b',’o',’l',’ ‘,’s’,'e’,'l’,'e’,’s’,'a’,'i’};
for (int i=0;i<16;i++)
USART_Transmit(tabel_data[i]);
while(1);
}
Pada contoh di atas artinya apabila data serial = ‘0’ maka kirim “OFF” dan akhiri dengan “tombol selesai” namun else apabila ‘1’ maka kirim “ON” dan akhiri dengan “tombol selesai”
3. Percabangan if else if

int main (void){
unsigned char data_serial;
USART_INIT(MYUBRR);
data_serial=USART_Receive();
if (data_serial==’0′){
USART_Transmit(‘O’);
USART_Transmit(‘F’);
USART_Transmit(‘F’);
}
else if (data_serial==’1′){
USART_Transmit(‘O’);
USART_Transmit(‘N’);
}
else if (data_serial==’2′)
USART_Transmit(‘?’);
else
USART_Transmit(‘*’);
unsigned char tabel_data [16]={0×0D,0×0A,’t',’o',’m',’b',’o',’l',’ ‘,’s’,'e’,'l’,'e’,’s’,'a’,'i’};
for (int i=0;i<16;i++)
USART_Transmit(tabel_data[i]);
while(1);
}
4. Percabangan switch case
Percabangan ini hanyalah merupakan bentuk lain dari if else if, hanya saja pada setiap case harus diakhiri dengan break kecuali di bagian akhir yang merupakan default
int main (void){
unsigned char data_serial;
USART_INIT(MYUBRR);
data_serial=USART_Receive();
if (data_serial==’0′){
USART_Transmit(‘O’);
USART_Transmit(‘F’);
USART_Transmit(‘F’);
}
else if (data_serial==’1′){
USART_Transmit(‘O’);
USART_Transmit(‘N’);
}
else if (data_serial==’2′)
USART_Transmit(‘?’);
else
USART_Transmit(‘*’);
unsigned char tabel_data [16]={0×0D,0×0A,’t',’o',’m',’b',’o',’l',’ ‘,’s’,'e’,'l’,'e’,’s’,'a’,'i’};
for (int i=0;i<16;i++)
USART_Transmit(tabel_data[i]);
while(1);
}
5. Percabangan nested
int main (void){
unsigned char data_serial;
USART_INIT(MYUBRR);
data_serial=USART_Receive();
if (data_serial==’0′){
data_serial=USART_Receive();
if (data_serial==’A'){
USART_Transmit(‘O’);
USART_Transmit(‘F’);
USART_Transmit(‘F’);
USART_Transmit(‘ ‘);
USART_Transmit(‘A’);
}
else{
USART_Transmit(‘O’);
USART_Transmit(‘F’);
USART_Transmit(‘F’);
USART_Transmit(‘ ‘);
USART_Transmit(‘B’);
}
}
else{
data_serial=USART_Receive();
if (data_serial==’A'){
USART_Transmit(‘O’);
USART_Transmit(‘N’);
USART_Transmit(‘ ‘);
USART_Transmit(‘A’);
}
else{
USART_Transmit(‘O’);
USART_Transmit(‘N’);
USART_Transmit(‘ ‘);
USART_Transmit(‘B’);
}
}
unsigned char tabel_data [16]={0×0D,0×0A,’t',’o',’m',’b',’o',’l',’ ‘,’s’,'e’,'l’,'e’,’s’,'a’,'i’};
for (int i=0;i<16;i++)
USART_Transmit(tabel_data[i]);
while(1);
}
Perulangan dalam C
1. Perulangan For

int main (void){
USART_INIT(MYUBRR);
for (int i=0;i<5;i++)
USART_Transmit(i);
while(1);
}
2. Perulangan While
Memiliki bentuk yang sama dengan for hanya saja pada while proses perulangan terus dilanjutkan hingga diperoleh kondisi false
int main (void){
USART_INIT(MYUBRR);
int counter=0;
while (counter<5){
USART_Transmit(counter);
counter++;
}
while(1);
}
3. Perulangan Do/While
Perulangan ini dilakukan dengan terlebih dahulu melakukan satu kali proses dan selanjutnya diulang hingga diperoleh nilai yang false dari while
int main (void){
USART_INIT(MYUBRR);
int counter=0;
do{
USART_Transmit(counter);
counter++;
}
while(counter<5);
while(1);
}
4. Perulangan Nested
Merupakan perulangan yang dilakukan di dalam perulangan sebagai berikut
int main (void){
USART_INIT(MYUBRR);
int counter=0;
do{
USART_Transmit(counter);
counter++;
}
while(counter<5);
while(1);
}
Di sini proses perulangan dilakukan sebanyak I x j