Pemrograman Dasar C Mikrokontroler AVR
By : Deddy Susilo, ST
(WORKSHOP PIM FTEK UKSW 2009)
Sasaran: Setelah membaca bab ini, pembaca akan mampu :•
Memahami pemrograman dasar C Mikrontroler AVR.•
Mengaplikasikan mikrokontroler dalam beberapa aplikasi sederhana menggunakan bahasa CBab ini akan membahas pemrograman dasar mikrokontroler AVR dalam bahasa C. Belajar mikrokontroler apapun lebih bagus jika dimulai dengan bahasa assembly karena akan lebih mudah memahami sifat dan cara penggunaan register dasar dari sebuah mikrokontroler. Hal ini dikarenakan mikrokontroler / mikroprosesor hanya mengenal bahasa mesin (yang biasanya dalam format HEX atau BIN) saja, yang mana bahasa mesin tersebut adalah hasil proses assembling dari bahasa assembly (yang biasanya dalam format ASM).
Untuk pembuatan program dalam skala besar (misalnya program mikrokontroler untuk
control unit sebuah DVD player, dsb) pemrogram akan mengalami kesulitan jika menggunakan bahasa pemrograman tingkat rendah seperti bahasa assembly AVR. Karena itu kemudian dikembangkan sebuah Kompiler yang dapat menerjemahkan bahasa pemrograman tingkat tinggi (misalnya bahasa C, Pascal, dsb) ke bahasa assembly-nya AVR, sehingga pemrogram dapat membuat perangkat lunak untuk mikrokontroler AVR menggunakan bahasa tingkat tinggi.
Salah satu compiler terkenal dan mudah digunakan untuk menerjemahkan bahasa C ke bahasa assembly AVR adalah Code Vision AVR. Dalam mempelajari bahasa C untuk AVR, untuk tiap sub-babnya sebelumnya akan dibahas terlebih dahulu bahasa C secara umum (maksudnya bahasa C standar yang untuk PC). Bahasa C cukup universal tidak seperti bahasa assembly, sehingga untuk mempelajari tipe membahas mikrokontroler keluarga yag lain, bahasa C yang digunakan tidak jauh berbeda cara penulisan dan pemakaiannya, sehingga pembaca tidak akan mengalami kesulitan yang berarti.
1.1. Kata-kata Kunci Dalam Bahasa C
Kompiler menyediakan tipe data C standar dan beberapa tipe data tambahan untuk menunjang mikrokontroler keluarga AVR. Untuk bahasa C standar ANSI hanya mempunyai 32 kata kunci (perintah baku). Berikut adalah ke-32 kata-kata kunci untuk Turbo C :
auto default float register
volatile break do for
return switch while case
double goto short typedef
char else if signed
union const enum int
long static void struct
Fungsi masing-masing kata kunci di atas dapat dibaca di buku-buku yang khusus membahas bahasa C umum. Meskipun hanya mempunyai 32 kata kunci saja, bukan berarti bahasa C kurang variatif dalam perintah-perintahnya. Karena perintah-perintah tambahan (yang biasanya berupa fungsi) dapat ditambahkan sewaktu penulisan program dengan menambahkan beberapa file pustaka (library) pada program yang ditulis. Sebagai tambahan kata kunci tersebut juga berlaku jika nanti kita mulai belajar mikrokontroler keluarga AVR.
1.2. Struktur Program Dalam Bahasa C
Setiap bahasa pemrograman mempunyai ciri khas tersendiri dalam penulisan programnya. Karena itu untuk mengenal lebih jauh penulisan program dengan suatu bahasa pemrograman, haruslah diketahui struktur / pola penulisan bahasa pemrograman tersebut. Struktur dari program C dapat dilihat sebagai kumpulan dari sebuah atau lebih fungsi-fungsi. Dimana masing-masing fungsi tersebut mempunyai nama. Fungsi utama yang harus ada di program C sudah ditentukan namanya, yaitu bernama main( ). Berikut adalah struktur/pola penulisan program dalam bahasa C :
penulisan file-file pustaka main( ) { statemen-statemen; ……… } fungsi_fungsi_Lain( ) { statemen-statemen; ……… }
Bahasa C dikatakan sebagai bahasa pemrograman terstruktur, karena strukturnya menggunakan fungsi-fungsi sebagai program-program bagian (subroutine). Jika diinginkan digunakannya perintah-perintah tambahan selain yang ada pada ke-32 kata kunci, maka ditambahkan beberapa file pustaka yang dituliskan pada bagian awal program. Pada file-file pustaka tersebut akan didefinisikan beberapa perintah-perintah tambahan (yang biasanya berupa fungsi-fungsi) yang dapat digunakan pada penulisan program. Salah satu file pustaka yang sering digunakan adalah stdio.h (singkatan dari Standard Input Output) . Pada file pustaka tersebut telah didefinisikan beberapa perintah baru yang digunakan untuk masukan dan keluaran standar, misalnya perintah untuk menampilkan sesuatu di layar (perintah printf), perintah untuk memasukkan data (perintah scanf), dsb.
1.3. Contoh Program Bahasa C Yang Sederhana
Berikut adalah sebuah contoh program C sederhana.
Kode Program Keterangan
#include <stdio.h> //file pustaka
//tempat mendeklarasikan variabel global (jika ada)
masukkan nama anda : Budi nama anda adalah : Budi
main( ) {
char nama[10];
printf(“masukkan nama anda :”); scanf(“%s”,&nama);
printf(“nama anda adalah : %s”,nama); }
//fungsi utama
//contoh variabel lokal nama bertipe char meminta disediakan tempat di memori sebanyak 10
//statemen-statemen
Jika program tersebut dijalankan akan didapatkan hasil :
Program di atas adalah program bahasa C untuk komputer (PC). Berikut adalah contoh program bahasa C sederhana untuk mikrokontroler AVR (dengan Code Vision AVR) :
Kode Program Keterangan
#include <mega8535.h> #include <stdio.h> #include <reg51.h> void main(void) { char simpan; PORTA=0xFF; simpan=PORTC; } //file pustaka
//tempat mendeklarasikan variabel global (jika ada)
//fungsi utama
//contoh variabel lokal simpan //statemen-statemen
Jika program tersebut dikompilasi ke bentuk hex atau biner dan dimasukkan ke FLASH PEROM AVR, mikrokontroler akan mengeluarkan nilai FFh (=11111111b) di port A, dan akan mengambil nilai yang ada di port C serta menyimpannya di variabel simpan.
1.4. Tipe Data Dalam Bahasa C Untuk AVR
Di dalam bahasa pemrograman komputer, data yang digunakan umumnya dibedakan menjadi data nilai numerik (bilangan) dan data nilai karakter (huruf dan kata). Nilai numerik dibedakan lagi menjadi nilai numerik integer (bilangan bulat) dan nilai numerik pecahan. Nilai numerik pecahan dapat dibedakan lagi menjadi nilai numerik pecahan ketepatan tunggal (32 bit) dan nilai numerik pecahan ketepatan ganda (64 bit). Bahasa pemrograman komputer membedakan data ke dalam beberapa tipe data ini untuk tujuan supaya operasi data menjadi efisien dan efektif.
Bahasa C menyediakan lima macam tipe data dasar, yaitu tipe data integer (nilai numerik bulat yang dideklarasikan dengan int), floating point (nilai numerik pecahan ketepatan tunggal yang dideklarasikan dengan float), double precision (nilai numerik pecahan ketepatan ganda yang dideklarasikan dengan double), karakter (dideklarasikan dengan char) dan kosong (dideklarasikan dengan void). Selanjutnya int, float, double, dan char dapat dikombinasikan dengan perintah pengubah (modifier) signed, unsigned, long, dan short. Hasil dari kombinasi tipe data ini dapat dilihat di tabel berikut :
Tabel 1. Tipe Data AVR
Beberapa tipe data akan dijelaskan dengan lebih detail sebagai berikut.
1.4.1. Tipe Data bit
Tipe data ini digunakan untuk mendeklarasikan variabel 1 bit.
Kode Program Keterangan
bit ftek_uksw; ftek_uksw=1; delay_ms(100); ftek_uksw=0;
Variabel bernama ftek_uksw bertipe data bit, variasi nilai hanya 0 atau 1
1.4.2. Tipe Data signed char/unsigned char
Tipe data ini standar di bahasa C yang digunakan untuk mendeklarasikan bilangan bertanda dan bilangan tak bertanda yang bertipe char (8 bit). Karakter bertanda mempunyai jangkauan -128 hingga +127, karakter tak bertanda mempunyai jangkauan 0 sampai dengan 255.
Kode Program Keterangan
unsigned char bos1,bos2; bos1=0x55;
bos2=bos1;
//Variabel bernama bos1 dan bos2 bertipe data unsigned char, variasi nilai -128 s/d +127
//variabel bos1 diisi 55 heksa
//isi dari variabel bos1 dikopikan ke variabel bos2
1.4.3. Tipe Data signed short/unsigned short
Signed short mempunyai jangkauan -32768 hingga +32767, unsigned short mempunyai jangkauan 0 sampai dengan 65535.
Kode Program Keterangan
unsigned short suhu,kipas; //Variabel bernama suhu dan kipas
suhu=0x0C200 ; kipas=suhu;
//isikan nilai C200 heksadesimal ke variabel suhu
//kopikan isi variabel suhu ke variabel kipas
1.4.4. Tipe Data signed int/unsigned int
Signed int mempunyai jangkauan -32768 hingga +32767, unsigned int mempunyai jangkauan 0 sampai dengan 65535.
Kode Program Keterangan
unsigned int nilai1,nilai2; nilai1=10 ;
nilai2=2*nilai1;
//Variabel bernama nilai1 dan nilai2 bertipe data unsigned int
//isikan nilai1 dengan bilangan 10 desimal
//kalikan nilai1 dengan 2 kemudian kopikan ke nilai2
1.4.5. Tipe Data signed long /unsigned long
Signed long dan unsigned long mempunyai jangkauan 4 byte (32 bit)
Kode Program Keterangan
unsigned long suhu; suhu=250000 ;
//Variabel bernama suhu bertipe data unsigned long integer
//isikan nilai 250000 desimal ke variabel suhu
1.4.6. Tipe Data float
Float digunakan untuk mendeklarasikan variabel floating point.
Kode Program Keterangan
Float x1,x2; x1=31.4 ; x2=sqrt(x1);
//Variabel bernama x1 dan x2 bertipe data float
//isikan nilai 31,4 ke variabel x1 //akar kuadratkan isi nilai x1 kemudian simpan di variabel x2
1.5. Variabel
Variabel adalah suatu pengenal yang digunakan untuk mewakili suatu nilai tertentu di dalam proses program. Variabel juga didefinisikan sebagai suatu pemesanan tempat di memori RAM untuk menyimpan suatu nilai tertentu. Misalnya ungkapan int x=3, x adalah nama variabel yang memesan sebuah tempat di RAM sebesar 16 bit untuk menyimpan nilai bilangan bulat 3. Nilai variabel tersebut dapat diubah-ubah sewaktu-waktu.
Semua variabel-variabel yang akan digunakan di program C harus dideklarasikan terlebih dahulu, begitu juga untuk AVR. Bentuk umum dari mendeklarasikan variabel dapat ditulis sebagai berikut ini :
tipe nama_nama_variabel;
Tipe adalah tipe data dari variabel yang dikehendaki. Nama_nama variabel adalah satu atau lebih dari nama variabel yang dikehendaki dengan tipe tersebut. Setiap pendeklarasian variabel harus
diakhiri dengan “;”. Berikut adalah beberapa contoh untuk mendeklarasikan variabel :
char simpan;
 Berarti mendeklarasikan variabel yang bernama simpan, yang mana variabel tersebut mempunyai tipe data char (=variabel tersebut akan dipakai untuk menyimpan data 8 bit). Variabel ini otomatis akan disimpan di bagian RAM yang masih kosong.
int X,Y,Nilai;
 Berarti mendeklarasikan variabel-variabel yang bernama X, Y, dan Nilai, yang mana variabel-variabel tersebut mempunyai tipe data integer (variabel tersebut akan dipakai untuk menyimpan bilangan bulat selebar maksimal 16 bit). Variabel ini otomatis akan disimpan di bagian RAM yang masih kosong.
bit nilai_biner;
 Berarti mendeklarasikan variabel yang bernama nilai_biner, yang mana variabel tersebut mempunyai tipe data bit. Variabel ini otomatis akan disimpan di bagian bit addressable yang masih kosong.
1.6. Operator
Penulisan program yang berisi instruksi-instruksi mengandung operator dan operand. Operand adalah variabel atau konstanta yang merupakan bagian pernyataan sedangkan operator adalah suatu simbol yang menyatakan suatu operasi akan dilakukan oleh operand tersebut. Contoh dalam operasi matematika :
x = y + z;
Ada 3 buah operand dalam pernyataan diatas yaitu : x, y dan z dan dua buah operator yaitu = (sama dengan) dan + (penjumlahan). Operator dalam bahasa C dibagi menjadi tiga kelompok yaitu :
1. Unary : operator yang beroperasi pada satu operand, misal : a 2. Binary : operator yang beroperasi pada dua operand, misal : a-b
3. Ternary : operator yang beroperasi pada tiga atau lebih operand, misal : (a-b)*c
1.6.1. Operator Aritmatika
Operator aritmatika adalah beberapa operator yang digunakan untuk melakukan perhitungan aritmatika.
Tabel 2. Operator Aritmatika
Operator Pernyataan
+ operator untuk operasi penjumlahan - operator untuk operasi pengurangan * operator untuk operasi perkalian
/ operator untuk operasi pembagian % operator untuk operasi sisa pembagian (modulus) Operator *, / dan % memiliki prioritas yang lebih tinggi bila dibanding operator + dan -.
1.6.2. Operator Pembanding
Operator pembanding adalah beberapa operator yang digunakan untuk membandingkan 2 buah data. Hasil operasinya bukan berupa nilai tetapi hanya nilai ’true’ (’1’) atau ’false’ (’0’).
Tabel 3. Operator Pembanding
Operator Pernyataan Contoh
= = bernilai benar jika kedua data sama a = = b
! = bernilai benar jika kedua data tidak sama a ! = b
> bernilai benar jika data pertama lebih besar dari data kedua a > b < bernilai benar jika data pertama lebih kecil dari data kedua a < b >= bernilai benar jika data pertama lebih besar atau sama dengan data kedua a >= b <= bernilai benar jika data pertama lebih kecil atau sama dengan data kedua a <= b
1.6.3. Operator Logika
Operator logika digunakan untuk membentuk suatu logika atas dua buah kondisi atau lebih.
Tabel 4. Operator Logika
Operator Pernyataan Contoh
&& operator untuk logika AND if((a= =b) && (c>=b)) P0=0x0f; || operator untuk logika OR if((a<=b) || (c>=b)) P0=0x0f; ! operator untuk logika NOT if((a= =b) && (c!=b)) P0=0x0f;
1.6.4. Operator Bit
Operator bit digunakan pada operasi logika yang bekerja pada level bit. Hasil dari operasi ini menghasilkan data bukan kondisi benar atau salah.
Tabel 5. Operator Bit
Operator Pernyataan
& operator untuk logika AND level bit (biner) | operator untuk logika OR level bit (biner) ^ operator untuk logika NOT level bit (biner) ~ operator untuk logika NOT level bit (biner) << operator untuk operasi geser kiri >> operator untuk operasi geser kanan Contoh : a = 0x55; b = 0x23; a&b=? a = 0x55 = 0 1 0 1 0 1 0 1 b = 0x20 = 0 0 1 0 0 0 1 1 & a&b= 0x01 = 0 0 0 0 0 0 0 1 b<<1=? Sebelum digeser:
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
Setelah digeser kiri :
Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
0 1 0 0 0 1 1 0
b<<1=0x46
1.6.5. Operator Penugasan dan Majemuk
Operator penugasan digunakan untuk memberikan nilai atau memanipulasi data sebuah variabel.
Tabel 6. Operator Penugasan
Operator Pernyataan Contoh Arti
= operator untuk memberi nilai variabel a = 5 Variabel x diberi nilai 5 += operator untuk menambahkan nilai
variabel a += 5 a = a + 5
-= operator untuk mengurangi nilai variabel
a -= 5 a = a - 5
*= operator untuk mengalikan nilai variabel
a *= 5 a = a * 5
/= operator untuk membagi nilai variabel
a /= 5 a = a / 5
%= operator untuk memperoleh sisa
pembagian a %= 5 a = a % 5
&= operasi bit untuk AND a &= 5 Variabel a di-AND-kan dengan 5
| = operasi bit untuk OR a |= 5 Variabel a di-OR-kan
dengan 5
~ = operasi bit untuk komplemen a ~= 5 Variabel a
di-komplemenkan a=~(5)  a=0xfa
^ = operasi bit untuk XOR a ^= 5 Variabel a di-XOR-kan
dengan 5
<<= operasi bit untuk geser kiri a<<=1 Variabel a digeser kiri 1 kali
>>= operasi bit untuk geser kanan a>>=1 Variabel a digeser kanan 1 kali
1.6.6. Operator Penambahan dan Pengurangan
Operator penambahan dan pengurangan adalah beberapa operator yang digunakan untuk menaikkan atau menurunkan nilai sebuah variabel dengan selisih 1.
Tabel 7. Operator Penambahan dan Pengurangan
Operator Pernyataan Contoh Hasil
++ Penambahan nilai variabel dengan 1 a = 1; a++;
a = 2 -- Pengurangan nilai variabel dengan 1 b = 3; b = 2
b--;
1.6.7. Operator Berkondisi atau Ternary (?:)
Operator berkondisi atau ternary digunakan untuk mengecek logika sebuah ekspresi pernyataan kemudian menentukan ekspresi pernataan berikutnya.
Bentuk :
ekspresi_1 ? ekspresi_2 : ekspresi_3;
Contoh :
P1 = data_a <= data_b ? data_a : data_b
Program ini akan mengecek apakah nilai variabel data_a lebih kecil atau sama dengan data_b, jika ya maka nilai variabel data_a akan dikeluarkan ke port 1, jika tidak maka nilai variabel data_b yang akan dikeluarkan ke Port 1.
1.7. Percabangan
Semua contoh program di atas berjalan secara berurutan, artinya proses satu statemen ke statemen berikutnya dilakukan secara urut sesuai dengan urutannya. Akan tetapi untuk program yang cukup komplek, proses yang ada tidak selalu berurutan, karena hampir setiap program yang komplek mengandung suatu percabangan. Percabangan-percabangan dalam program tersebut antara lain terjadi melalui penyeleksian kondisi (melalui syarat-syarat tertentu). Meskipun demikian ada pula percabangan dalam program yang dilakukan tanpa adanya penyeleksian kondisi.
Untuk percabangan bersyarat (conditional branch), di dalam bahasa C dapat dipergunakan statemen if.
1.7.1. Statemen If
Struktur IfBentuk dari struktur if adalah sebagai berikut :
if (ungkapan) { statemen1; statemen2; .. .. .. .. } contoh :
Kode Program Keterangan
#include <stdio.h> main()
{
int nilai;
printf(“Berapa nilai anda :”); scanf(“%i”,&nilai);
if(nilai>80) {
printf(“Selamat Anda Lulus \n”);
printf(“Tapi jangan cepat-cepat nikah..Hehe..”); }
}
//file pustaka //fungsi utama //variabel lokal
//statemen if, menyeleksi jika isi dari variabel nilai lebih dari 60 maka lakukan pernyataan didalam tanda { }
Bentuk if di atas adalah bentuk if untuk bahasa C di PC, berikut adalah contoh bentuk if untuk bahasa C di AVR:
Kode Program Keterangan
#include <stdio.h> #include <mega8535.h> main() { PORTA=0x00; DDRA=0x00; PORTC=0x00; DDRC=0xFF; unsigned char suhu; suhu=PORTA; P0RTC=0x00; if(suhu>=0x1F) { PORTC=0xFF; } } //file pustaka //fungsi utama //Port A sebagai input //Port C sebagai output
//variabel lokal suhu bertipe char //ambil data dari Port A
//Port 0 diberikan nilai 00000000 biner
//statemen if, menyeleksi jika isi dari variabel suhu lebih dari 1F heksa maka lakukan pernyataan didalam tanda
{ }  Port0 diberi nilai 11111111 B
1.7.2. Statemen if...else
Struktur if..else merupakan pengembangan dari struktur if dengan struktur sebagai berikut :
if (kondisi) statemen1; else statemen2;
Statemen1 yang dapat berupa blok statemen akan diproses bilamana kondisi yang diseleksi benar (terpenuhi) sedang statemen-statemen atau dapat berupa blok statemen akan diproses bilamana kondisi yang diseleksi salah (tidak terpenuhi).
Contoh :
Kode Program Keterangan
#include <stdio.h> main()
{
int nilai;
printf(“Berapa nilai anda :”); scanf(“%i”, &nilai);
if(nilai>60) printf(“Anda lulus”); else printf(“Anda tidak lulus!”); }
//file pustaka //fungsi utama
//variabel lokal nilai bertipe integer //ambil nilai yang diketikkan pada keyboard
//statemen if, menyeleksi jika isi dari variabel nilai lebih dari 60 desimal cetak kalimat ‘Anda lulus’, jika tak terpenuhi maka cetak kalimat ‘Anda tidak lulus !’
Bila program tsb dijalankan :
Berapa nilai anda: 70 Anda lulus
Kemungkinan lain :
Berapa nilai anda: 50 Anda tidak lulus
untuk bahasa C di AVR:
Kode Program Keterangan
#include <stdio.h> #include <mega8535.h> main()
{
unsigned char suhu; PORTA=0x00; DDRA=0xFF; PORTB=0x00; DDRB=0x00; suhu=PORTB; PORTA=0x00; if(suhu>=0x1F) { PORTA=0x55; } else { PORTA=0xAA; } } //file pustaka //fungsi utama
//variabel lokal suhu bertipe unsigned char
//Port A sebagai output //Port B sebagai input
//ambil data dari Port B simpan di variabel suhu
//Port A diberikan nilai 00000000 biner
//statemen if, menyeleksi jika isi dari variabel suhu lebih dari 1F heksa maka lakukan pernyataan didalam tanda
{ }  Port A diberi nilai 55 heksa Jika tidak maka Port A diberi nilai AA heksa
1.7.3. Statemen switch
Bentuk umum :
switch (ekspresi) {
case nilai_1 : pernyataan_1;break; case nilai_2 : pernyataan_2;break; case nilai_3 : pernyataan_3;break; . . .
default : pernyataan_default;break; }
Pada pernyataan switch, masing-masing pernyataan (pernyataan_1 sampai dengan pernyataan_default) dapat berupa satu atau beberapa perintah dan tidak perlu berupa blok pernyataan. Pernyataan_1 akan dikerjakan jika ekspresi bernilai sama dengan nilai_1, pernyataan_2 akan dikerjakan jika ekspresi bernilai sama dengan nilai_2, dan seterusnya. Pernyataan_default bersifat opsional, artinya boleh ada boleh tidak. Jika ada maka pernyataan_default akan dikerjakan apabila nilai ekspresi tidak ada yang sama satupun dengan salah satu nilai_1, nilai_2, nilai_3 dan seterusnya. Setiap akhir dari pernyataan harus diakhiri dengan break, karena dipergunakan untuk keluar dari pernyataan switch.
Kode Program Keterangan
#include <stdio.h> #include <mega8535.h> main()
//file pustaka //fungsi utama
{ char x; PORTA=0x00; DDRA=0xFF; PORTD=0x00; DDRD=0x00; x=PORTD; switch(x) { case 0: PORTA=0x01;break; case 1: PORTA=0x02;break; case 2: PORTA=0x03;break; default : PORTA=0xff;break; } }
//variabel lokal x bertipe char //Port A sebagai output //Port D sebagai input
//ambil data dari Port D simpan di variabel x
//Jika x bernilai 0 maka PA=0x01 //Jika x bernilai 1 maka PA=0x02 //Jika x bernilai 2 maka PA=0x03 //jika bukan 0,1,2 maka PA=0xff
1.8. Perulangan (Looping) Pada Pemrograman Bahasa C
Perulangan merupakan bentuk yang sering ditemui di dalam suatu program aplikasi. Di dalam bahasa C, dikenal tiga macam perulangan, yaitu dengan menggunakan statemen for, while, dan do-while.
1.8.1. Struktur Perulangan For
Perulangan dengan for digunakan untuk mengulang statemen atau satu blok statemen berulang kali sejumlah yang ditentukan. Perulangan dengan statemen for dapat berbentuk perulangan positif, perulangan negatif, dan perulangan bersarang (nested loop).
Perulangan dengan for mempunyai bentuk umum sebagai berikut :
for(Awal;Akhir;Peningkatan) statemen;
Awal adalah suatu ungkapan yang memberikan nilai awal suatu variabel untuk perulangannya (misalnya x=0 atau i=1). Variabel dalam ungkapan tsb dijadikan penghitung untuk banyaknya perulangan yang akan dilakukan.
Akhir adalah ungkapan yang memberikan nilai maksimal pada variabel yang harus dipenuhi supaya perulangan masih dapat terus dilakukan (misalnya x<=20, berarti statemen yang diulang akan terus dilakukan selama nilai x lebih kecil atau sama dengan 20. Contoh lain misalnya i<=10, berarti statemen yang diulang akan terus dilakukan selama nilai i lebih kecil atau sama dengan 10).
Peningkatan adalah suatu ungkapan yang mengubah nilai variabel penghitung perulangan setiap kali perulangan dilakukan (misalnya x++ menunjukkan nilai x bertambah satu setiap perulangan dilakukan, atau misalnya i-- menunjukkan nilai i berkurang satu setiap perulangan dilakukan).
Contoh :
Kode Program Keterangan
#include <stdio.h> main() { int x; //file pustaka //fungsi utama
for(x=1;x<=5;x++) printf(“Pemrograman Bahasa C \n”);
} //untuk nilai awal x=1 diperiksa apakah <=5?, jika ya maka tingkatkan nilai x=x+1, dan cetak kalimat. Kemudian loop ke statemen ini lagi periksa apakah x<=5,jika belum maka ulang cetak kalimat, jika sudah hentikan.
Jika program tsb dijalankan :
Pemrograman Bahasa C Pemrograman Bahasa C Pemrograman Bahasa C Pemrograman Bahasa C Pemrograman Bahasa C
Bentuk perulangan for di atas adalah bentuk for untuk bahasa C di PC, berikut adalah contoh bentuk for untuk bahasa C di AVR:
Kode Program Keterangan
#include <stdio.h> #include <mega8535.h> void delay(void); main() { PORTB=0x00; DDRB=0xFF;
unsigned char counter=0; PORTB=0; for(counter=0;counter<=255;counter++) { PORTB=counter; delay(); } } void delay(void) { long int x; for(x=0;x<=500000;x++); } //file pustaka
//fungsi tambahan delay //fungsi utama
// PortB sebagai output
//variabel lokal counter bertipe unsigned char
//untuk counter=0 diperiksa apakah counter<=255?, jika ya maka tingkatkan nilai counter=counter+1, dan kirim nilai counter ke PortB. Kemudian loop ke statemen ini
lagi periksa apakah
counter<=255, jika belum nilai counter dikeluarkan ke port B, jika sudah hentikan.
//fungsi delay juga merupakan perulangan for
1.8.2. Struktur Perulangan While
Statemen while digunakan untuk melakukan proses perulangan suatu statemen atau blok statemen terus-menerus selama kondisi ungkapan pada while masih bernilai benar. Struktur perulangan dengan while :
while(ungkapan) {
statemen-statemen; … … … …
}
benar.
Contoh :
Kode Program Keterangan
#include <stdio.h> main() { int x=0; while(x<5) { printf(“Pemrograman Bahasa C \n”); x=x+1; } } //file pustaka //fungsi utama
//variabel lokal x bertipe integer diberi nilai 0
/* perintah ini sama dengan perintah x++ */
Bila program tsb dijalankan, akan tertampil di layar :Pemrograman Bahasa C
Pemrograman Bahasa C Pemrograman Bahasa C Pemrograman Bahasa C Pemrograman Bahasa C
Penjelasan :
Perulangan dari while akan terus dikerjakan bila kondisinya masih benar. Dalam hal ini kondisinya adalah bila nilai x masih kurang dari 5, berarti kondisi di dalamwhile masih terpenuhi dan perulangan akan selesai setelah nilai x lebih besar atau sama dengan 5. Tampak pada program di atas bahwa perulangan dilakukan sebanyak 5 kali, karena sewaktu program dijalankan terjadi 5 kali kondisi dimana nilai x masih kurang dari 5, yaitu sewaktu nilai x=0,x=1,x=2,x=3, dan x=4. Perulangan akan berhenti otomatis sewaktu nilai x=5. Bentuk while di atas adalah bentuk while untuk bahasa C di PC, berikut adalah contoh bentuk while untuk bahasa C di AVR:
Contoh 1:
Kode Program Keterangan
#include <stdio.h> #include <mega8535.h> void delay(void); main() { PORTB=0x00; DDRB=0xFF;
unsigned char counter=0; PORTB=0; while(counter<256) { PORTB=counter; delay(); counter++; } } void delay(void) { long int x; while(x<500000) { //file pustaka
//fungsi tambahan delay //fungsi utama
//portB sebagai output
//variabel counter bertipe unsigned char diisi nilai 0 //Port B= 00000000b //jika counter<256 maka //Port B=nilai counter //panggil fungsi delay //Naikkan nilai counter //cek lagi kondisi nilai counter
x++; } } contoh 2 : Kode Program #include <stdio.h> #include <mega8535.h> void delay(void); main( ) { PORTB=0x00; DDRB=0xFF;
unsigned char counter; PORTB=0; while(1) { PORTB=counter; delay(); counter++; if(counter>=256) counter=0; } } void delay(void) { long int x; while(x<500000) { x++; } } Contoh 3:
Bentuk lain dari pernyataan while adalah do-while. Pernyataan ini mempunyai bentuk dasar sebagai berikut : Kode Program #include <stdio.h> #include <mega8535.h> main() { bit tombol_1 bit tombol_2
PORTB=0x00; DDRB=0x00; PORTA=0x00; DDRA=0xFF; while(1) { tombol_1=PORTB.2 tombol_2=PORTB.4 if(tombol_1==1) PORTA.7=0; if(tombol_2==1) PORTA.3=1; } }
do { Statemen-statemen; . . . } while (ekspresi)
Kode Program Keterangan
#include <stdio.h> #include <mega8535.h> void main(void) { PORTA=0x00; DDRA=0x00; unsigned char x=20; do { PORTA=x; x--; } while (x>0); } //file pustaka //fungsi utama
//variabel x bertipe unsigned char diisi nilai 20 desimal Pernyataan didalam { } dieksekusi seama while bernilai benar