Anda di halaman 1dari 35

Pemrograman Mikrokontoller

STRUKTUR PEMROGRAMAN C
Struktur penulisan bahasa C secara umum tersusun atas empat blok, yaitu: Header Deklarasi Global Konstanta dan atau Variabel Fungsi dan atau Procedur (bisa dibawah prog utama) Program Utama

Secara umum pemrograman C paling sederhana 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

Berisikan include file (.hex), yaitu library yang akan digunakan dalam pemrograman. Contoh #include <mega8535.h> #include <delay.h> #include <stdio.h>

TIPE DATA
Type bit char unsigned char signed char int short int unsigned int Size (Bits) 1 8 8 8 16 16 16 Range 0,1 -128 to 127 0 to 255 -128 to 127 -32768 to 32767 -32768 to 32767 0 to 65535

signed int
long int unsigned long int signed long int

16
32 32 32

-32768 to 32767
-2147483648 to 2147483647 0 to 4294967295 -2147483648 to 2147483647

float
double

32
32

1.175e-38 to 3.402e38
1.175e-38 to 3.402e38

Khusus untuk tipe data bit hanya bisa di deklarasikan untuk global variabel.

Konstanta
Penulisan konstanta adalah sebagai berikut: Integer atau long integer dapat ditulis dengan format desimal (contoh 1234), biner dengan awalan 0b (contoh 0b101001), hexadesimal dengan awalan 0x (contoh 0xff) atau oktal dengan awalan 0 (contoh 0777). Unsigned integer ditulis dengan diakhiri U (contoh 10000U). 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). Penulisan karakter konstanta harus dalam tanda kutip (contoh a). Sedangkan konstanta string harus dalam tanda kutip dua (contoh "Saya Belajar C").

LABEL, VARIABEL, FUNCTION


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, dan yang lebih penting lagi identifikasi ini Case is significant yaitu huruf besar dan kecil berbeda. Misal variable1 tidak sama Variable1. Identifikasi bisa memuat karakter sebanyak 32 karakter.

KOMENTAR
Komentar diawali dengan tanda /* dan diakhir dengan */ . Contoh: /* Ini komentar */ /* Ini Komentar Multi baris */ Sedangkan komentar satu baris bisa dengan tanda // . Contoh: // Ini juga komentar

RESERVED KEYWORDS*
break bit case char const continue default do double eeprom else enum extern flash float for funcused goto if inline int interrupt long register return short signed sizeof sfrb sfrw static struct switch typedef union unsigned void volatile while

*Kata baku yang tidak bisa dipakai

Operator
Suatu instruksi pasti terdapat operator dan operand. Operand adalah variabel atau konstanta yang merupakan bagian pernyataan sedangkan operator adalah suatu simbol yang menyatakan operasi manakah 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.

Operator Aritmetika
Simbol
+ ++ -* / % = += -= *= /=

Contoh
c=a+b n=n+2 c=a-b n=n-2 ++i --i c=a*b n=n*2 c=a/b n=n/2 sisa=a % b a=b a += 2 a -= 2 a *= 2 a /= 2

Aritmetika
Penjumlahan Pengurangan Kenaikan (Increment), sama dengan i = i + 1 Penurunan (Decrement), sama dengan i = i - 1 Perkalian Pembagian Menghasilkan sisa dari pembagian. a dan b bil. bulat Pemberian nilai Penambahan suatu nilai pada suatu variabel yang sudah ada sebelumnya. Sama dengan a = a + 2 Pengurangan suatu nilai pada suatu variabel yang sudah ada sebelumnya. Sama dengan a = a - 2 Pengalian suatu nilai pada suatu variabel yang sudah ada sebelumnya. Sama dengan a = a * 2 Pembagian dari 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
Menunjukan isi dari pointer

*pointer

Operator Logika
Simbol == != < <= > >= ! && || Contoh if (a == b) if (a != b) if (a < b) if (a <= b) if (a > b) if (a >= b) if (!a) if (a==b && a==c ) if (a==b || a==c) Logika Pembanding Logika sama dengan, digunakan untuk pembanding. Menghasilkan nilai true jika a=b. Tidak sama dengan. Menghasilkan nilai true jika a b. Logika lebih kecil dari. Menghasilkan nilai true jika a < b. Logika lebih kecil sama dengan dari. Menghasilkan nilai true jika a b. Logika lebih besar dari. Menghasilkan nilai true jika a > b. Logika lebih besar sama dengan dari. Menghasilkan nilai true jika a b. NOT AND OR

Operator Manipulasi Bit


~ & | ^ << a = ~b c=a&b c=a|b c=a^b c = a << n Complement. b = 1100; a = 0011. AND untuk manipulasi bit. a=1100; b=1001; maka c=1000. OR untuk manipulasi bit. a=1100; b=1001; maka c=1101. XOR untuk manipilasi bit. a=1100; b=1001; maka c=0101. 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 then 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 dikirim data 0x55 (ingat mode hex) jika nilai a lebih kecil dari 0x50.

if then else Bentuk umum dari percabangan ini adalah: If (kondisi) { // 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=0x55; } else { PORTC=0xAA; }; PORTC akan dikirim data 0x55 jika nilai a < 0x50 dan PORTC akan dikirim data 0xAA jika a0x50.

switch case Pernyataan switch case digunakan jika terjadi banyak percabangan. Struktur penulisan pernyataan ini adalah sebagai berikut: Contoh: ... ... switch (ekspresi) { switch (a) { case konstanta1: case 1: pernyataan1 PORTC=0x01; break; break; case konstanta2: case 2: pernyataan2 PORTC=0x02; break; break; ... case 3: case konstantaN: PORTC=0x04; pernyataanN break; break; } } ... ... 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;

Switch case default Pernyataan switch case default hampir sama dengan switch case, yang membedakan adalah dengan adanya default. 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: Contoh: ... switch (a) { switch (ekspresi) { case 1: case konstanta1: PORTC=0x01; pernyataan1 break; break; case 2: case konstanta2: PORTC=0x02; pernyataan2 break; break; case 3: ... PORTC=0x04; case konstantaN: break; pernyataanN Default: break; PORTC=0xFF; default: } pernyataan-pernyataan; ... } ... 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 tidak sesuai dengan ekspresi maka pernyataan di default

PERULANGAN
For Pernyataan for akan melakukan perulangan berapa 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 pengkondisi dalam for yaitu jika kondisi bernilai true 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 diatas akan melakukan perulangan 50 kali, yaitu dari 1 hingga 50 dengan penambahan 1 (i++, lihat operator aritmetik). Hasilnya PORTC akan dikirim data 1, kemudian data 2, 4, 8.

While - Do 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 di atas. Contoh: ... i=1; a=1; Bandingkan dengan perulangan while (i<50) { for dan while-do. a=a*2; PORTC=a;; i++ ; }; ...

Do While Pentuk 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 { Bandingkan dengan perulangan a=a*2; for dan while-do dan do-while. PORTC=a;; i++ ; } while (i<50); ...

KONVERSI POLA (%)


Karakter %... dipakai sebagai operator konversi pola. Konversi pola sangat berguna nantinya 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 hexadesimal 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


Prosedur adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan tertentu tanpa mengembalikan suatu nilai. ... void nama_prosedur (parameter1, parametar2, parameterN) { Pernyataan-pernyataan; } ... Contoh: ... void delay(unsigned char i) { while (i--) { /* penulisan untuk bahasa assembly akan dibahas tersendiri */ #asm nop nop #endasm }; } ...

Fungsi adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan tertentu dengan hasil akhir pengembalian nilai dari keperluan tersebut. ... Type data nama_fungsi (parameter1, parametar2, parameterN) { Pernyataan-pernyataan; return variable_hasil; } ... Contoh: ... int luas(int pj, int lb) { luas = pj*lb; return luas; } ... Pemanggilan prosedur atau fungsi langsung ditulis prosedur atau fungsinya. Contoh: ... delay(150); // cara memanggil prosedur dt = luas(5,10); // cara menggunakan fungsi } ...

MEMASUKKAN BAHASA ASSEMBLY


Atau 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 // dimulai dengan #asm nop // blok bahasa assembly nop // #endasm // diakhiri dengan #endasm ... Atau, jika hanya beberapa instruksi bisa dengan cara: ... #asm("nop\nop\nop") ...

PERNYATAAN KENDALI LAINNYA

Break Pernyataan ini akan menghentikan atau keluar dari suatu blok program. Continue Pernyataan ini akan menyebabkan kendali melakukan kembali proses perulangan dari awal. Goto Label Pernyataan ini akan melakukan loncat ke label yang dituju. (tidak disarankan menggunaan pernyataan ini).

CVAVR
Code Vision AVR C Compiler (CVAVR) merupakan compiler bahasa C untuk AVR. Compiler ini cukup memadai untuk belajar AVR, selain mudah dalam penggunaan juga di dukung fitur-fitur yang sangat membantu dalam pembuatan software untuk keperluan pemrograman AVR. CVAVR ini dapat berjalan dibawah sistem operasi Windows 9x, Me, NT 4, 2000 dan XP. CVAVR ini dpt mengimplementasikan hampir semua instruksi bahasa C yang sesuai dengan arsitektur AVR, bahkan terdapat beberapa keunggulan tambahan untuk memenuhi keunggulan spesifik dari AVR. Hasil kompilasi objek CVAVR bisa digunakan sebagai source debug dengan AVR Studio debugger dari ATMEL. CVAVR dapat diperoleh dari: http://www.hpinfotech.ro.

Fitur CVAVR
Mendukung hampir semua library standart bahasa C Terdapat library tambahan dari CVAVR yang mendukung dalam pemrograman AVR, yaitu: Alphanumeric LCD modules Philips I2C bus National Semiconductor LM75 Temperature Sensor Philips PCF8563, PCF8583, Maxim/Dallas Semiconductor DS1302 and DS1307 Real Time Clocks Maxim/Dallas Semiconductor 1 Wire protocol Maxim/Dallas Semiconductor DS1820, DS18S20, DS18B20 Temperature Sensors Maxim/Dallas Semiconductor DS1621 Thermometer/Thermostat Maxim/Dallas Semiconductor DS2430 and DS2433 EEPROMs SPI Power management Delays Gray code conversion Memiliki Program Generator yang memungkinkan kita membuat program dengan cepat.

Installasi CVAVR
File yang diperlukan: cvavre.exe (versi 1.25.1 Evaluasi). Gunakan yang terbaru jika sudah tersedia. Klik dua kali file tersebut untuk memulai instalasi. Ikuti petunjuk, ubah jika perlu. Selesai.

Pengalaman Pertama Menggunakan CVAVR

MENU File Didalam menu File terdapat submenu-submenu untuk bekerja dengan file maupun project. Edit Didalam menu Edit terdapat tools untuk pengeditan dalam mode kerja pemrograman. View Untuk menampilkan atau tidak toolbar, Navigasi dan pesan compiler. Project Berisi submenu untuk kompilasi, cek instruksi dan setting project. Tools Berisikan tools untuk program generator, debugger, programmer dan setting debug. Setting Berisi beberapa setting untuk tampilan CVAVR, pemrograman dan koneksi. Windows Untuk pengaturan window/jendela kerja. Help Berisi help dan tentu saja keterangan dari CVAVR Toolbar Toolbar ini berisikan ikon-ikon yang nantinya sangat membantu dalam pemrograman. Navigator, Code Templates dan Clipboard History Jendela ini berisikan informasi file dan project yang terbuka, kode-kode bahasa C yang bisa langsung dipakai dan perekaman clipboard. Messages Jendela ini menampilkan informasi saat kompilasi, ini sangat penting terutama informasi tentang kesalahan yang kita buat. Lembar Kerja Lembar kerja adalah lembar dimana kita bekerja untuk membuat program.

Setting Programer

Klik menu Setting, pilih Programmer. Tampak kotak dialog Programmer Setting, dan lakukan perubahan menjadi seperti disamping: Klik OK.

PENTING !!! Rangkaian downloader yang kita gunakan kompatibel terhadap STK200+/300. Setting ini cukup dilakukan sekali saja.

Membuat Project Baru


1. 2. 3. 4. Pastikan tidak terdapat file/project yang terbuka, jika ada yang terbuka tutup dahulu Klik Menu File, kemudian pilih New, maka selanjutnya akan tampak dialog disamping: Pilih Project, kemudian Klik tombol OK. Tampak Dialog untuk konfirmasi menggunakan Program Generator atau manual. Klik tombol Yes maka tampak wizard dialog spt disamping: Ubah bagian tab Chip, pilih ATmega8535L (karena kita menggunakan ATmega8535L). Beberapa nantinya akan kita ubah sesuai dengan kebutuhan terutama clock. Klik File, pilih Generate, Save and Exit. Simpan masing-masing dengan nama input.C (untuk file source C), input.prj (untuk file Project) dan input.cwp (untuk file Code Wizard Project). Maka pada bagian navigasi akan tampak seperti pada gambar berikut.
(Klik Menu File, Pilih Close Project).

5.

6.

7.

8.

9. 10. 11.

12.

Klik menu Project dan pilih Configure atau klik icon , maka tampak kotak Dialog Project Configure Pilih tab After Make. Beri tanda [] Cek pada Program the Chip. Untuk keperluan yang lain bisa anda ubah sesuai kebutuhan, misal untuk proteksi. Klik OK

PENTING !!! Harap 7 langkah diatas dipahami betul. Penggunaan 7 langkah diatas memudahkan dalam setting register AVR Langkah ke 5 merupakan salah satu keunggulan memprogram ATmega dengan bahasa C terutama dengan CodeVision AVR karena device ATmega yang dipakai tidak banyak berpengaruh pada program yang kita buat, hanya perlu perubahan/penyesuaian sedikit saja kita bisa menggunakan ATmega seri yang lain. Abaikan langkah 8-12 jika anda berkeinginan menggunakan PonyProg2000 untuk download ke AVR.

Compile (Kompilasi) dan Download ke AVR


Klik menu Project, pilih Make atau shortcut [shift+F9] atau klik ikon . Selanjutnya akan nampak dialog hasil kompilasi, baca jika tidak terjadi kesalahan dapat dilanjukkan untuk proses download (Langkah 6). Jika terjadi kesalahan baca keterangan di jendela Messages atau di Navigator. Koreksi kesalahan dan kompilasi lagi. Jika tidak terjadi kesalahan maka akan tampak kotak dialog berikut: Jika tidak ada kesalahan bisa langsung program ke AVR (untuk warning biasanya menampilkan beberapa variabel yang telah di deklarasikan namun tidak digunakan). Klik tombol Program the chip untuk download ke AVR, maka akan tampak progress bar berikut: Jika terdapat kesalahan cek ulang hardware anda, terutama kabel downloadernya. AVR telah diprogram.