Jumat, 27 Mei 2011

BELAJAR C LANGUAGE dengan CODEVISION AVR


Asslmkm.wr.wb
alhamdulillah ini adalah postingan pertama ane di blog libraryilmu ini dan semoga blog ini bermanfaat bagi kita semua..
pertama-pertama ane mau ngeshare sedikit pengetahuan ane tentang C language dengan compilernya Codevission AVR yg mungkin sudah tak asing lagi dikalangan kita..

ok! bismillah kita mulai ya

DASAR PEMROGRAMAN C

Struktur dalam penulisan bahasa C secara umum dapat disusun dalam empat blok:
a.    Header.
b.    Deklarasi konstanta global dan local.
c.    Deklarasi procedure dan atau fungsi.
d.    Fungsi Utama.

Code yang akan diimplementasikan akan dituliskan pada fungsi utama karena pada awal eksekusi, maka fungsi utama lah yang pertama kali akan dieksekusi.

            Void main (void)
            {
            Code here;
            }
Contoh layout pada Codevision:


Contoh Code secara utuh:
Text Box: #include <mega8385.h>
#include <stdio.h>
#include <lcd.h>
#include <delay.h>

char kata [16];
int a;
unsigned char b;

void contoh_procedure ();

void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
…
While (1)
{
Write your code here.
};
};

Void contoh_procedure ()
{
Write your code here.
};

Tipe data

Terdapat beberapa tipe-tipe variable atau konstanta yang dikenal oleh codevision berdasarkan tipe bilangan pada bahasa pemrograman c, diantaranya:
Type
Size (Bits)
Range
Bit
1
0,1
Char
8
-128 s/d 127
unsigned char
8
0 s/d 255
signed char
8
-128 s/d 127
Int
16
-32768 s/d 32767
unsigned int
16
-32768 s/d 32767
signed int
16
0 s/d 65535
long int
16
-326768 s/d 32767
unsigned long int
32
0 s/d 4294967295
signed long int
32
-2147483648 s/d 2147482647
Float
32
± 1.175e-38 s/d ± 3.402e38
Double
32
± 1.175e-38 s/d ± 3.402e38

Reserved Keywords

Ada beberapa kata-kata yang telah ada dan disediakan oleh codevision sehingga tidak boleh digunakan pada code atau nama variable/konstanta. Indikasi suatu kata merupakan reserved keywords adalah kata yang tertuliskan secara BOLD. Kata-kata tersebut diantaranya:
Break
flash
signed
Bit
Float
sizeof
case
For
Sfrb
char
funcused
Sfrw
Const
goto
static
Continue
If
struct
default
Int
Double
interrupt
union
Eeprom
Register
void
enum
Return
Volatile
extern
short
while and … etc

Operator

Terdapat tiga type operator yang dapat digunakan untuk memanipulasi data, diantaranya:

ARITMATIKA
Operator
Contoh
Keterangan
+
Temp1 = temp2 + temp3
Penjumlahan
-
Temp1 = temp2 – temp3
Pengurangan
++
i++
Kenaikan/increment. n= n + 1
-
-i
Penurunan/decrement. n= n-1
*
c = a*b
n = n *2
Perkalian
%
Sisa = a % b
Menghasilkan sisa dari pembagian. a dan b bilangan bulat
=
a = b
Pemberian nilai
+=
a+=2
Penambahan suatu nilai pada variable yang telah ada nilai sebelumnya.
a = a+2.
-=
a-=2
Pengurangan  suatu nilai pada variable yang telah ada nilai sebelumnya.
a = a – 2.
*=
a*=2
Pengalian suatu nilai pada veriabel yang telah ada nilai sebelumnya.
a = a * 2.
/=
a /= 2
Pembagian suatu nilai pada variable yang telah ada nilai sebelumnya.
a = a / 2.
%=
a %= 2
Sisa dari suatu nilai pada suatu variable yang sudah ada sebelumnya yang dibagi oleh nilai atau variable lain.
*
*pointer
Menunjukkan isi dari pointer

LOGIKA
Simbol
Contoh
Logika pemabnding
==
If (a == b)
Logika sama dengan. Jika a sama dengan b maka bernilai true
!=
If (a != b)
Tidak sama dengan. Jika a tidak sama dengan b maka akan bernilai true.
If (a < b)
Logika lebih kecil dari. Jika a < b, maka akan bernilai true.
<=
If (a <= b)
Logika lebih kecil sama dengan dari. Jika a tidak sama dengan b, maka bernilai true.
If (a > b)
Logika lebih besar dari. Jika a > b, maka akan bernilai true.
>=
If (a >= b)
Logika lebih besar sama dengan dari. Jika a tidak sama dengan b, maka bernilai true.
!
if (!a)
Not a.
&&
If (a==b && a==c)
AND
||
If (a==b || a==c)
OR
 

MANIPULASI BIT
~
a = ~ b
Complement.
b=1100; a=0011;
&
c = a & b
AND untuk mmanipulasi bit. a=1100; b=1001; maka c=1000.
|
c = a | b
Or untuk manipulasi data bit. a=1100; b=1001; maka c=1000.
^
c = a ^ b
XOR untuk manipulasi data bit. a=1100; b=1001; maka c=0101.
<< 
c = a << n
Shift left, manipulasi bit menggeser ke kiri sejauh n bit. a=1101; b=1001;maka c=110100.
>> 
c = a>>n
Shift right, manipulasi bit menggeser ke kanan sejauh n bit. a=1101; b=1001;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<0x%0)
{
PORTB = 0xFF;
};
Dalam contoh ini PORTB akan dikirm data 0xFF (mode heksa).
·         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<0x5C)
{
PORTB = 0x55;
}
else
{
PORTC = 0xA5;
};
PORTB akan dikirim data 0x55 jika a lebih kecil dari 0x5C dan PORTC akan dikirim data 0xA5 jika ≥ 0x5C.
·         switch – case
Pernyataan switch – case digunakan jika terjadi banyak percabangan. Struktur penulisan pernyataan ini adalah sebagaib berikut:
     
switch (ekspresi) {
case konstanta1:
pernyataan1
break;
case konstanata2:
pernyataan2
            break;
           
case konstantaN:
pernyataanN
break;
}

Contoh:
switch (a) {
case 1:
PORTC = 0x01;
break;
case 2:
PORTC = 0x02;
            break;
case 3:
PORTC = 0x03;
break;
}
PORTC akan dikirim data 0x01 jika nilai a=1, PORTC akan dikirim data 0x02 jika nilai a=2 dan PORTC akan dikrik data 0x03 jika nilai a=3.
·         Switch – case – default
Pernyataan switch – case – default hamper sama dengan switch – case. Yang membedakan adalah bahwa dengan adanya default, maka jika tidak terdapat kondisi case sesuai dengan ekspresi, switch akan menuju pernyataan yang terdapat dibagian default. Struktur penulisan pernyataan ini adalah sebagai berikut:
switch (ekspresi) {
case konstanta1:
pernyataan1
break;
case konstanata2:
pernyataan2
            break;
           
case konstantaN:
pernyataanN
break;
default:
pernyataan – pernyataan;
}
Contoh:
switch (a) {
case 1:
PORTC = 0x01;
break;
case 2:
PORTC = 0x02;
            break;
case 3:
PORTC = 0x03;
break;
default
PORTC = 0xFF;
}
PORTC akan dikirim data 0x01 jika nilai a=1, PORTC akan dikirim data 0x02 jika nilai a=2 dan PORTC akan dikrim data 0x03 jika nilai a=3 dan jika kondisi case tidak sesuai dengan ekspresi maka pernyataan di default akan dijalankan.

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 pengondisi dalam for yaitu jika kondisi bernilai true maka pernyataan dalam for akan dijalanakan. 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 di atas akan melakukan perulangan 50 kali, yaitu dari 1 hingga 50 dengan penambahan 1 (i++, lihat operator aritmatik). Hasilnya PORTC akan dikirim data 1, kemudian data 2,4,8, ….
·         While
Bentuk dari perulangan ini adalah sebagai berikut:
while (kondisi) {
                  peryataan – pernyataan;
}
Jika kondisi memenuhi (bernilai true) maka pernyataan-pernyataan di bawahnya akan dijalankan hingga selesai, kemudian akan menguji kembali kondisi di atas.
Contoh:
i=1;
a=1;
while (i<50) {
            a=a*2;
            PORTC=a;
i++;
            };
·         Do – while
Bentuk perulangan ini kembalikan dari while – do, yaitu pernyataan dilakukan terlebih dahulu kemudian diuji kondisinya.
      do {
      pernyataan-pernyataan;
      }
while (kodisi);
Contoh:
i=1;
a=1;
do {
a=a*2;
PORTC=a;
i++;
}
while (i<50);

Konversi Pola (%)

Karakter %_ dipakai sebagai operator konversi pola. Konversi pola akan sangat berguna pada saat kita menampilkan hasil ke LCD.
·         %d menampilkan bilangan bulat positif.
Contoh:
Sprint (buf, “angka%d”,14);
·         %o menampilkan bilangan octal bulat.
·         %x menampilkan bilangan heksadesimal bulat.
·         %u menampilkan bilangan decimal tanpa tanda.
·         %f menampilkan bilangan pecahan.
·         %i menampilkan bilangan integer.
·         %c menampilkan karakter yang ditunjukkan bilangan ASCII.

Prosedur dan Fungsi

Seringkali dalam suatu program kita menemukan kelompok instruksi untuk suatu keperluan tertentu yang sering dijalankan. Kelompok instruksi ini bisa dibuat sebagai procedure atau fungsi. Langkah ini akan dapat menghemat memori disbanding bila instruksi-instruksi tersebut ditulis berulang-ulang. Ingat bahwa di sini kita akan memprogram mikrokontroller yang memiliki memori yang terbatas.
a.    Procedure
Prosedur adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan tertentu tanpa mengembalikan suatu nilai.
Void nama_procedure (parameter1,parameter2,…parameterN) {
Pernyataan-pernyataan;
}

Contoh:
Void delay (unsigned char i) {
While (i--) {
/*penulisan untuk bahasa assembly*/
/*akan dibahas tersendiri*/
#asm
            nop
            nop
#end asm
};
b.    Fungsi
Fungsi adalah suatu kumpulan instruksi untuk mengerjakan suatu keperluan tertentu dengan hasil akhir pengembalian nilai dari keperluan tersebut.
Type_data nama_fungsi (parameter1, parameter2, ..parameterN)
{
Pernyataan-pernyataan;

return variable _hasil;
};

Contoh:
Int luas (int pj, int lb) {
     luas = pj*lb;
    return luas;
};
Pengembalian prosedur atau fungsi dialkukan dengan langsung menuliskan prosedur atau fungsinya.
Contoh:
delay (150);
dt =  luas (5,10);
}

Memasukkan bahasa assembly

Kita sebut sebagai in-line assembly.
Dalam pemrograman dengan bahasa v inin kita masih dapat memasukkan bahasa assembly ke dalam program C. Struktur penulisannya juga mudah, yaitu:
           
            #asm                           //dimulai dengan #asm//
                        nop                  //blok bahasa assembly//
                        nop
            #endasm                     //diakhiri dengan #endasm//



PERNYATAAN KENDALI LAINNYA
Break
Pernyataan ini akan menghentikan atau menyebabkan kelua dari suatu blok program.
Continue
Pernyataan ini akan menyebabakan kendali melaukan kembali proses perulangan dari awal.
Goto - Label
Pernyataan ini akan melakukan loncatan ke label yang dituju


















Tidak ada komentar:

Posting Komentar