DASAR PEMROGRAMAN BAHASA C PADA MIKROKONTROLER

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

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

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

Tags: , , , , , , , , , , , ,

Leave a Reply