Pengenalan Bahasa C 1. Struktur penulisan program #include < [library1.h] > #include < [library2.h] >
// Opsional // Opsional
#define [nama1] [nilai] ; #define [nama2] [nilai] ;
// Opsional // Opsional
[global variables]
// Opsional
[functions]
// Opsional
void main(void) // Program Utama { [Deklarasi local variable/constant] [Isi Program Utama] }
2. Tipe data - char - unsigned char - int - unsigned int - long - unsigned long - float - array
: : : : : : : :
1 byte ( -128 s/d 127 ) 1 byte ( 0 s/d 255 ) 2 byte ( -32768 s/d 32767 ) 2 byte ( 0 s/d 65535 ) 4 byte ( -2147483648 s/d 2147483647 ) 4 byte ( 0 s/d 4294967295 ) bilangan desimal kumpulan data-data yang sama tipenya.
3. Penyimpanan Data - Variabel: Memori penyimpanan data yang datanya dapat diubah nilainya. Deklarasi : [tipe data] [nama] = [nilai] ; - Konstanta: Memori penyimpanan data yang datanya tidak dapat diubah nilainya.. Deklarasi : const [nama] = [nilai] ; [nama] : hanya huruf, angka(bukan karakter pertama), underscore( _ ) • Global : variabel/konstanta yang dapat diakses di seluruh bagian program • Local : variabel/konstanta yang hanya dapat diakses oleh fungsi dideklarasikannya.
tempat
4. Operasi logika dan biner Logika => - AND : && - OR : || Biner => • AND : & • OR : |
- NOT : ! • XOR : ^ • shift left : <<
• right shift : >> • komplemen : ~
5. Operasi relasional (perbandingan) Sama dengan Tidak sama dengan Lebih besar Lebih besar sama dengan Lebih kecil Lebih kecil sama dengan
: : : : : :
== != > >= < <=
6. Operasi aritmatika Operator : [ + , - , * , / , % , += , -= , *= , /= , ++ , --] • + , - , * , / : tambah,kurang,kali,bagi • += , -= , *= , /= : nilai di sebelah kiri operator di tambah/kurang/kali/bagi dengan nilai di sebelah kanan operator • % : sisa bagi • ++ , -- : tambah satu (increment) , kurang satu (decrement) Contoh : a = 5 * 6 + 2 / 2 -1 ; maka nilai a adalah 30 a *= 5 ; jika nilai awal a adalah 30, maka nilai a = 30x5 = 150. a += 3 ; jika nilai awal a adalah 30, maka nilai a = 30+5 = 33. a++ ; jika nilai awal a adalah 5 maka nilai a = a+1 = 6. a-; jika nilai awal a adalah 5 maka nilai a = a-1 = 4. 7. Statement adalah setiap operasi dalam pemrograman yang diakhiri dengan [ ; ] atau [ } ]. Statement tidak akan dieksekusi bila diawali dengan tanda [ // ] untuk satu baris. Lebih dari 1 baris gunakan pasangan [ /* ] dan [ */ ]. Statement yang tidak dieksekusi disebut juga comments / komentar. 8. Conditional statement - if … else …. = jika …. maka …. jika tidak …… if ( [persyaratan] ) { [statement1] ; [statement2] ; …. } - for … for ( [nilai awal] ; [persyaratan] ; [operasi nilai] ) { [statement1] ; [statement2] ; …. } - while …. while ( [persyaratan] ) { [statement1] ; [statement2] ; …. } - do …. while …. do { [statement1] ; [statement2] ; …. } while ( [persyaratan] ) - switch …. case …. switch ( [nama variabel] ) { case [nilai1]: [statement]; break; case [nilai2]: [statement] ; break; …. }
9. Function Program kecil yang dipanggil oleh program utama. Penulisan : [tipe data hasil] [nama function] ( [tipe data input 1] , [tipe data input 2] ) { [statement] ; } 10. Latihan // Contoh Program 1 void main(void) { unsigned char i,a ; i = 10 ; a = 23 ; i++ ; a = a*i-20 ; }
// Program Utama
*/ Contoh Program 2 : menggunakan conditional statement for ... dan operasi aritmatika */ void main (void) { const max=3; unsigned char i,jumlah=0; for (i=0;i<5;i++) { jumlah++ ; jumlah *= max ; } } #define max 10 ; #define min 0 ; unsigned int jumlah=0; void fungsi1(void) { switch (jumlah) { case 5 : jumlah &= 8 ; break ; case 10 : jumlah |= 1 ; break ; case 15 ; jumlah << 1 ; break ; } } void main (void) { unsigned int a; jumlah++ ; jumlah *= 5 ; if ((jumlah < max) && (jumlah > min)) {a=60000;} else (a=20000;} fungsi1(); }
#define max 15 #define min 10
; ;
unsigned char jumlah=0; unsigned char fungsi2(unsigned char input) { unsigned char x = 0 ; unsigned char u = 25 ; while (x<5) { u-- ; x++ ; } return = (input & u) | 5 ; } void main (void) { char a; unsigned char j,k[3]; for (j=0;j<3;j++) { k[j] = j+2 jumlah += 5 ; if ((jumlah == max) || (jumlah == min)) {a=0;} else (a=1;} } j = fungsi2(jumlah)+ k[0] + k[1] + k[2] ; }
Pemrograman AVR ATMEGA8535 dengan CodeVision AVR
1. Membuat projek baru • File => New => Project => OK => Yes. Pilih tipe chip dan nilai kristal yang digunakan:
• File => Generate, Save and Exit => masukkan nama file [.c] => Save => masukkan nama projek [.prj] => Save => masukkan nama file [.cwp] => Save .
2. Membuat program untuk AVR ATMEGA8535L Struktur program: #include < mega8535.h > #define [nama1] [nilai] ; #define [nama2] [nilai] ;
// Opsional // Opsional
[global variables]
// Opsional
[functions]
// Opsional
void main(void) // Program Utama { [Deklarasi local variable/constant] [Inisialisasi register] while(1) { [Isi Program Utama] } }
3. Compile dan download ke Chip • Project => Compile File atau tekan F9. Bila ada error dalam penulisan program akan diberitahu pada window “Messages” di paling bawah. • Project => Make atau tekan Shift+F9. • Settings => Programmer => lihat gambar => OK • Tools => Chip Programmer => Program => Flash
4. Tipe data tambahan : bit ( 1 atau 0 ) . [Hanya untuk variabel global] . 5. Penulisan basis angka - Biner
: diawali dengan 0b, contoh : 0b11110011. - Desimal : ditulis seperti biasa. - Hexadesimal : diawali dengan 0x, contoh : 0xFF, 0x5B, 0x0A .
6. Pemrograman AVR untuk port I/O - Tiga register yang harus diset untuk menggunakan port I/O : DDRx , PORTx , dan PINx. x adalah nama port yang bersangkutan ( A, B, C, D). • DDRx => menentukan arah dari port (output atau input) • PORTx => menulis nilai ke port ( 1 atau 0 ) • PINx => membaca nilai port sebagai input ( 1 atau 0 )
DDRx
PORTx
- Output paralel ( 8 bit ) ke port . Syntax : DDRx = 0xFF ; x = nama port (A,B,C,D) PORTx = [nilai 8 bit] ; Contoh : DDRA = 0xFF ; port A digunakan sebagai output PORTA = 0xFF ; port A = 11111111 biner - Output bit per bit ke port . Syntax : DDRx.n = 1 ; x = nama port ( A,B,C,D ) PORTx.n = [1/0] ; n = bit ke …. ( 0 s/d 7 ) Contoh : DDRB.1 = 1 ; port B bit ke 1 digunakan sebagai output PORTB.1 = 1 ; port B bit ke 1 sama dengan 1 - Membaca input paralel dari port . Syntax : DDRx =0 ; [variabel 1 byte] = PINx ; Contoh : DDRB =0 ; port B digunakan sebagai input data = PINB ; baca nilai port B dan tulis ke variabel “data” - Membaca input dari port bit per bit . Syntax : DDRx.n =0 ; [variabel 1 bit] = PINx.n ; Contoh : DDRC.6 = 0 ; port C bit ke 6 digunakan sebagai input biner = PINC.6 ; baca nilai port C bit ke 6 dan tulis ke variabel “biner”
Contoh program : //Program ini membaca input dari PORTD.2 (tombol INT0), apabila tombol //ditekan, semua led di PORTC akan menyala, bila tombol dilepas, semua //led mati #include < mega8535.h > void main(void) { unsigned char data; DDRC = 0xFF ; DDRD = 0x00 ; PORTC= 0xFF ; PORTD= 0xFF ; while(1) { if (PIND.2==0) { PORTC= 0x00; } else { PORTC= 0xFF; } } }
// cek apakah tombol ditekan // nyalakan semua led pada PORTC
// matikan semua led pada PORTC