pemrograman dasar c mikrokontroler avr

23
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 C Bab 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 sizeof unsigned continue extern 1

Upload: slamet-dhatank

Post on 15-Nov-2015

332 views

Category:

Documents


14 download

DESCRIPTION

ggggg

TRANSCRIPT

  • 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 C

    Bab 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

    sizeof unsigned continue extern

    1

  • 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 //file pustaka

    //tempat mendeklarasikan variabel global (jika ada)

    2

  • 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 #include #include

    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 :

    3

  • 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 Keteranganbit 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 Keteranganunsigned 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 Keteranganunsigned short suhu,kipas; //Variabel bernama suhu dan kipas

    bertipe data unsigned short

    4

  • 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 Keteranganunsigned 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 Keteranganunsigned 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 KeteranganFloat 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

    5

  • 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 -.

    6

  • 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 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

  • Setelah digeser kiri :

    Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 00 1 0 0 0 1 1 0

    b

  • 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 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 { }

    9

  • 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 #include 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 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

    Bentuk if else di atas adalah bentuk if else untuk bahasa C di PC, berikut adalah contoh bentuk if else

    10

  • untuk bahasa C di AVR:

    Kode Program Keterangan#include #include 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 heksaJika 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 #include main()

    //file pustaka

    //fungsi utama

    11

  • { 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

  • for(x=1;x
  • benar.

    Contoh :

    Kode Program Keterangan#include main() { int x=0; while(x

  • x++; } }

    contoh 2 :

    Kode Program#include #include 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

  • do { Statemen-statemen; . . . . . . . . . . . . }while (ekspresi)

    Kode Program Keterangan#include #include 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

    16

  • By : Agus04 (Asisten Mikrokontroler)Code Vision merupakan IDE untuk mikrokontroller jenis AVR yang sudah dilengkapi

    dengan compiler C. sebagai sebuah IDE code vision dilengkapi dengan berbagai macam tools semisal Integrated ISP, Code Wizard(ini merupakan fitur paling menarik dari code vision), Integrated Compiler dan Integrated Editor sehingga memudahkan programmer dalam membuat, mengkompile dan mendownloadkan ke target device. Meskipun begitu Code Vision masih memiliki kelemahan, yaitu pada bagian debugging, code vision tidak dilengkapi dengan integrated debugger sehingga programmer mengalami kesulitan ketika akan mendebug programnya.

    Program yang kita buat dikelompokkan menjadi sebuah project yang nantinya diletakkan pada Project Workspace. berikut adalah tampilan GUI dari Code Vision.

    Selanjutnya agar dapat membuat project baru kita memilih File-New, sehingga muncul tampilan sebagai berikut

    pilih project dan tekan OK selanjutnya akan muncul pilihan untuk menggunakan Code Wizard atau tidak, nah disinilah letak ketangguhan Code Vision yang sebenarnya, pilih YES

    17

  • maka akan muncul window lagi sebagai berikut

    pada bagian Chip pilihlah yang sesuai dengan IC yang anda gunakan, pastikan juga kecepatan clocknya juga sesuai, jika sudah klik tab Ports sehingga muncul tampilan sebagai berikut

    AVR dilengkapi dengan internal buffer, tab ports ini berguna untuk menentukan arah data, apakah data masuk ke mikro atau keluar dari mikro, hal ini berbeda dengan MCS51 dimana programmer dapat langsung saja menentukan kapan port berfungsi sebagai input dan kapan sebagai output, pada AVR hal harus dilakukan dengan merubah nilai register DDR., setelah menentukan konfigurasi port yang akan kita pakai selanjutnya kita dapat menentukan konfigurasi yang lain semisal UART, SPI, ADC sampai LCD, kita coba mulai dulu dari UART, jika kalian klik tab USART akan muncul pilihan sebagai berikut

    18

  • dari contoh konfigurasi diatas saya memilih konfigurasi UART hanya dapat menerima data saja 9600bps dengan format 810, serta interrupt Rx(mirip RI pada MCS51) juga ON, jadi data tersebut saya proses di ISR, dengan panjang buffer 32 Byte, singkatnya dengan Code Vision kalian tidak direpotkan dengan urusan inisialisasi sehingga cukup mudah bukan? Selanjutnya kalian dapat juga mengaktifkan fitur ADC yang dimiliki oleh AVR klik saja tab ADC sehingga muncul pilihan sebagai berikut.

    pilih clock yang paling cepat, kecepatan clock disini tergantung konfigurasi kristal yang kalian masukan pada tab Chip. Mungkin diantara semua fitur fitur AVR fitur ini dan fitur SPI lah yang paling menarik, selanjutnya jika kita masih kurang fitur kalian dapat mencoba fitur SPI hardware, SPI ini digunakan untuk berkomunikasi dengan IC lain yang mensupport SPI semisal SEEPROM, RTC, LCD dsb. Dengan SPI hardware programmer tidak direpotkan untuk membuat protocol SPI sendiri, selain itu karena fitur ini diintegrasikan secara hardware menjadikan MCU menjadi tidak terbebani pada saat proses pengiriman data maupun penerimaan data via SPI.

    19

  • mode pengiriman data dapat kalian tentukan sendiri, tergantung dari IC apa yang akan kalian ajak berkomunikasi via SPI, dalam contoh diatas saya mengkonfigurasi SPI hardware dengan AVR sebagai Master Device, Mode 0(baca keterangan di datasheet AVR), dengan frekuensi SCK sekitar 5Mhz. ketika semua konfigurasi dirasa sudah mencukupi pilihlah File-[Generate, Save and Exit].

    anda akan dihadapkan pada pilihan untuk men-save project file, code file pilihlah semuanya di-direktori yang sama agar memudahkan jika kita ingin mengedit atau memindah project.

    Selanjutnya pada IDE akan muncul Editor sebagai berikut, isi teks pada editor merupakan hasil code generate dari code wizard. Coba kalian cari dimana void main pada sourcecode kalian, didalam void main kalian akan menemukan inisialisasi dari code wizard yang sudah kalian konfigurasi sebelumnya, jangan ubah apapun pada bagian inisialisasi tersebut jika kalian sudah yakin akan kemampuan code wizard. Nantinya di sinilah kalian mengetikkan program kalian.

    Berhenti dan ketiklah didalam main program anda

    20

  • variable bmp adalah array hasil konversi dari file bmp, kalian dapat menggenerate array ini dari program bmp2array, nanti akan saya bagikan pada saat praktikum. Pastikan juga library pcf8833.h dan pcf8833.lib(nanti dikasi pada waktu praktikum) sudah terletak pada direktori workspace.pilih Setting-Programmer

    pastikan kabel ISP yang digunakan adalah STK200

    jika sudah tekan OK, selanjutnya pilih Project-Configure

    21

  • lalu pilih tab After Build

    contreng Program the Chip, jangan mengubah settingan yang lain kalo tidak ingin kenapa-napa tekan OK(buat yang pake resolusi 1024x768 kebawah geser window ke atas sampai tombol OK kelihatan). Lalu tekan SHIFT+F9 sehingga muncul windows sebagai berikut.

    22

  • pilih Program the chip untuk memulai memprogram AVR, pastikan kabel ISP sudah menancap pada tempatnya.

    23