Konfigurasi pin ATMEGA16/ATMEGA32 dengan kemasan 40 pin DIP (Dual In-line Package) dapat dilihat pada gambar. Dari gambar diatas dapatdijelaskan fungsi dari masing-masing pin sebagai berikut:
- VCC merupakan pin yang berfungsi sebagai masukan catu daya.
- GND merupakan pin ground.
- Port A (PA0..PA7) merupakan pin input/output dan pin masukan ADC.
- Port B (PB0..PB7) merupakan pin input/output dan pin fungsi khusus, seperti dapat dilihat pada tabel dibawah ini.
f. Port D (PD0..PD7) merupakan pin input/output dan pin fungsi khusus, seperti dapat dilihat pada tabel dibawah ini.
- RESET merupakan pin yang digunakan untuk me-reset mikrokontroler.
- XTAL1 dan XTAL2 merupakan pin masukan clock eksternal.
- AVCC merupakan pin masukan tegangan untuk ADC.
- AREF merupakan pin masukan tegangan referensi ADC.
2. Pemrograman Mikrokontroler AVR ATMEGA16/ATMEGA32
Berikut ini penjelasan bahasa C dan aturan penulisan program dalam bahasa C
Penulisan Program dalam bahasa C :
#include "Preprosessor(#), digunakan untuk memasukkan(include)
#include text dari file lain dan mendefinisikan macro(define)."
#define tombol PINA.0
#define led PORTB.0
//variabel global /* jika satu baris saja
Unsigned int i,j; ...komentar //...komentar...
....*/
Void main(void)
{
//variable local
DDRA=0x00;
PORTA=0xFF;
DDRB=0xFF;
PORTB=0x00L Inisialisasi
..........
..........
While(1)
{ Program Utama
............. program akan selalu berulang terus karena syarat
............. while(1) akan selalu menghasilkan nilai benar
.............
};
}
- Identifier
Adalah nama yang diberikan pada variable, fungsi, label atau objek lain. Identifier dapat mengandung huruf (A…Z,a…z) dan angka (0…9) dan karakter ( _ ). Identifier bersifat Case Sensitive dan maksimal 32 karakter.
- Konstanta
Konstanta integer ditulis dalam bentuk decimal (1234), dalam bentuk biner (0b101001), hexadecimal mempunyai awalan 0x (0xFF), atau dengan octal dengan awalan 0 (0777), konstanta karakter harus dilingkungi oleh tanda kutip (‘a’).
- Tipe Data
e. Program Kontrol
i. Percabangan
Printah if dan if…else…
Dilakukan untuk melakukan operasi percabangan bersyarat. Fungsi-fungsi untuk menetapkan kondisi dapat dilihat dalam table. Sintaks penulisan if dapat ditulis sebagai berikut:
If(<expression>)<statement>;
Sintaks penulisan if…else…
If(<expression>)<statement1>;
Else <statement2>;
Jika hasil testing expression memberikan hasil benar maka statement1 kan dilaksanakan. Pada keaadaan sebaliknya jika testing expression memberikan hasil yang tidak sesuai maka statemen2 akan dilaksanakan.
Percabangan switch
Perintah pecabangan if…else… dapat digantikan dengan percabangan switch. Dalam pernyataan switch, sebuah variable secara berurutan diuji oleh beberapa konstanta bilangan bulat atau konstanta karakter. Sintaks perintah switch dapat ditulis sebagai berikut:
Switch(variable)
{
Case konstanta_1: statement 1;
break;
Case konstanta_2: statement 2;
break;
Case konstanta_n: statement n;
break;
default: statement;
}
ii. Looping (Pengulangan)
Looping adalah pengulangan satu atau beberapa perintah sampai mencapai keadaan tertentu. Ada tiga perintah looping, yaitu: for…, while…, dan do…while… sintaks loop dapat dituliskan sebagai berikut:
For
Untuk pengulangan yang membuuhkan proses increment.
For(nama_variable=nilai awal;syarat_loop;nama_variable++)
{
Statement_yang_diulang;
}
Untuk pengulangan yang membuuhkan proses decrement.
For(nama_variable=nilai awal;syarat_loop;nama_variable--)
{
Statement_yang_diulang;
}
While
Perintah while dapat melakukan looping apabila persyaratannya benar. Sintaks while dapat dituliskan sebagai berikut:
Nama_variable=nilai_awal;
While (syarat_loop)
{
Statement_yang_diulang;
Nama_variable++;
}
Do…while…
Perinah while terlebih dahulu melakukan pengujian persyaratan sebelum melakukan looping. Kadang-kadang hal ini menimbulkan kerepotan-kerepotan yang tidak perlu, misalnya inisialisasi variable conrol. Salah satu solusi adalah dengan menggunakan loop do…while
Nama_variable=nilai_awal;
Do
{
Statement_yang_diulang;
Nama_variable++;
}
While(syarat_loop)
iii. Array
Array adalah deretan variable yang berjenis sama dan mempunyai nama yang sama. Setiap anggota deretn (elemen) diberi nomor yang disebut indeks, dimulai dari indeks nol. Array diatur agar mempunyai lokasi memory yang bersebelahan dengan alamat terkecil menunjukkan element array pertama dan alamat terbesar menunjukkan element terakhir. Element array dapat diakses dengan menggunakan indeksnya. Bentuk deklarasi array adalah:
Tipe nama_array[ukuran]
Int nilai[100]
Nilai[1]=10;
Nilai[2]=4;
iv. Fungsi
Sebuah program yang besar dapat dipecah menjadi beberapa subprogram yangterpisah yang melakuakan fungsi tertentu. Subprogram yang seperti ini disebut fungsi. Sebagai contoh, sebuah program yang melakukan proses pengisian data berulang kali dapat dilengkapi dengan sebuah fungsi yang bertugas untuk melakukan proses pengisian data. Apabila program hendak melakukan proses pengisian data, program dapat melakukan pemnggilan fungsi tersebut.
Fungsi adalah sebuah blik yang melingkupi beberapa perintah. Deklarasi fungsi dapat dilihat dengan cara:
Tipe nama_fungsi(argument)
Perameter dalam fungsi dijelaskan sebagai berikut:
Tipe adalah nilai yang dihasilkan oleh fungsi, jika tidak dinyatakan, hasil fungsi dianggap bertipe integer. Deklarasi tipe void dapat dimanfaatkan untuk menghindari terjadinya nilai balik.
Argument adalah deklarasi variable apa saja yang dibutuhkan fungsi dan bersifat optional.
Fungsi dengan nilai balik
Fungsi ini memberikan hasil yang berupa nilai
Fungsi dengan nilai balik(return value)
Contoh:
Long luas()
{
Int sisi=10;
Return (sisi*sisi);
}
Fungsi tanpa nilai balik
Fungsi ini tidak memberikan hasil yang berupa nilai melainkan berupa sebuah proses. Fungsi ini bertipe void.
Contoh:
Void kedip()
{
PORTD=0;
delay_ms(1000); //delay 1000 milisecon
PORTD=255;
delay_ms(1000);
PORTD=0;
delay_ms(1000);
return;
}
Pernyataan return
Pernyataan return dapat menyatakan 2 hal:
1. return mengakhiri jalannya fungsi dan kembali ke program utama.
2. mengirim nilai balik.
Fungsi dapat ditulis pad akhir program dengan membuat sebuah prototype function di bagian awal program. Cara menulis fungsi yang seperti itu memberikan kemudahan kepada programmer untuk memeriksa dan membaca ulang sebuah program yang besar.
Parameter dalam sebuah fungsi
Parameter dalam sebuah fungsi dibagi dua yaitu parameter formal dan parameter actual. Parameter formal adalah parameter pada saat fungsi itu dibuat, sedangkan parameter actual adalah parameter yang terdapat pada saat pemanggilan fungsi.
Contoh:
// mendeklarasikan fungsi
long func(int_param1,int_param2);
/* mendefinisikan fungsi, param_1 dan param_2 disebut parameter formal */
long func(int_param1,int_param2);
{
Return param1*param2;
}
/* memanggil fungsi dan mengisikan nilai yang dihasilkan ke sebuah variable x, nilai 20 dan 30 disebut parameter actual */
X=func(20,30) //mengisikan parameter_1=20 dan parameter_2=30
//hasil perkaliannya disimpan ke variable x