Dalam penulisan program bahasa C, kadang terdapat code program yang harus kita gunakan beberapa kali. Dengan metode penulisan sederhana, kita akan menulisa code tersebut berulang kali juga. Misal: saat kita ingin menggunakan baris code itu 13x maka kita akan menulisnya 13x juga. Hmmm..... pasti merepotkan.
Dengan Prosedur dan Fungsi, kita gak perlu repot-repot, cukup menulis setiap baris code tersebut sekali aja.
1. Prosedur
Perhatikan contoh program berikut:
nilai yang dikeluarkan ke Port A, sama seperti gambar di samping.
Pertama, kondisi high pada Port A.0 lalu Port A.1 kemudian Port A.2 dan seterusnya.
program di atas dapat juga ditulis seperti dibawah:
Saat sebuah prosedur dipanggil, maka code program yang berada di dalam prosedur (di dalam kurung kurawal ) akan dijalankan oleh microcontroller. Cara memanggil prosedur cukup dengan menuliskan nama prosedurnya diikuti tanda kurung ( ) . Contoh:
2. Fungsi
Fungsi merupakan prosedur yang memiliki nilai return (menghasilkan nilai).
Perhatikan code program berikut:
Program di atas kan hanya contoh simple aja biar gak bingung. Aplikasi sesungguhnya dari penggunaan fungsi adalah saat kita membaca data dari sensor, adc, serial dll...
NB:
Ada prosedur dan fungsi yang membutuhkan nilai masukan. Misal:
misal:
#includeSimulasikan program di atas menggunakan AVR Studio4. Maksud dari code << yaitu untuk menggeser bit ke kiri :
#include
void main()
{
DDRA= 0xff;
PORTA=0x00;
while(1)
{
PORTA=0x01<<0;
delay_ms(50);
PORTA=0x01<<1;
delay_ms(50);
PORTA=0x01<<2;
delay_ms(50);
PORTA=0x01<<3;
delay_ms(50);
PORTA=0x01<<4;
delay_ms(50);
PORTA=0x01<<5;
delay_ms(50);
PORTA=0x03<<0;
delay_ms(50);
PORTA=0x03<<1;
delay_ms(50);
PORTA=0x03<<2;
delay_ms(50);
}
}
PORTA=0x01<<n; //menggeser nilai sebesar 0x01 digeser ke kiri sebanyak n.misal:
//Dan mengeluarkan hasilnya ke Port A
PORTA=0x01<<2; //artinya menggeser nilai 0x01 digeser ke kiri sebanyak 2 kali.Pahami gambar berikut:
//lalu hasilnya dikeluarkan ke Port A
nilai yang dikeluarkan ke Port A, sama seperti gambar di samping.
Pertama, kondisi high pada Port A.0 lalu Port A.1 kemudian Port A.2 dan seterusnya.
program di atas dapat juga ditulis seperti dibawah:
#include
#include
void geserkiri_A()
{
PORTA=0x01<<0;
delay_ms(50);
PORTA=0x01<<1;
delay_ms(50);
PORTA=0x01<<2;
delay_ms(50);
PORTA=0x01<<3;
delay_ms(50);
PORTA=0x01<<4;
delay_ms(50);
PORTA=0x01<<5;
delay_ms(50);
}
void geserkiri_B()
{
PORTA=0x03<<0;
delay_ms(50);
PORTA=0x03<<1;
delay_ms(50);
PORTA=0x03<<2;
delay_ms(50);
}
void main()Pada program di atas, main program hanya berisi beberapa baris program saja. Main program memanggil prosedur geserkiri_A kemudian memanggil prosedur geserkiri_B.
{
DDRA= 0xff;
PORTA=0x00;
while(1)
{
geserkiri_A();
geserkiri_B();
}
}
Saat sebuah prosedur dipanggil, maka code program yang berada di dalam prosedur (di dalam kurung kurawal ) akan dijalankan oleh microcontroller. Cara memanggil prosedur cukup dengan menuliskan nama prosedurnya diikuti tanda kurung ( ) . Contoh:
............Dengan menggunakan prosedur, main program akan terlihat lebih simple dan mudah dipahami.
............
geserkiri_A();
//berarti micro akan menjalankan code program yang ada di dalam prosedur geserkiri_A()
............
2. Fungsi
Fungsi merupakan prosedur yang memiliki nilai return (menghasilkan nilai).
Perhatikan code program berikut:
#includePada contoh program di atas terdapat fungsi baca_PINA.
#include
unsigned char baca_PINA()
{
unsigned char d;
d=PINA;
return d;
}
void main()
{
DDRA=0x00;
DDRB=0xff;
while(1)
{
PORTB=baca_PINA();
}
}
unsigned char baca_PINA()Cara memanggil fungsi seperti di atas sama dengan cara memanggil prosedur. Cuman karena fungsi menghasilkan sebuah nilai, maka kita harus menyediakan tempat untuk menampung nilai tersebut. Contohnya pada program di atas terdapat code program berikut:
{
unsigned char d; //mendeklarasikan variabel d dengan tipe data unsigned char
d=PINA; //memasukkan nilai PINA ke variabel d
return d; //mengembalikan(return) nilai d
//nilai d ini merupakan nilai yg dihasilkan saat fungsi baca_PINA dipanggil
}
PORTB=baca_PINA(); //memanggil fungsi baca_PINA ,Mungkin ada temen2 yang tanya, kenapa harus memakai fungsi segala, program untuk membaca nilai PINA lalu mengeluarkannya ke PORTB kan bisa ditulis seperti ini:
//lalu mengeluarkan hasilnya ke PORTB
...........Iya YA... kenapa mesri repot2.. HEhehe..
..........
while(1)
{
PORTB=PINA;
}
.........
Program di atas kan hanya contoh simple aja biar gak bingung. Aplikasi sesungguhnya dari penggunaan fungsi adalah saat kita membaca data dari sensor, adc, serial dll...
NB:
Ada prosedur dan fungsi yang membutuhkan nilai masukan. Misal:
unsigned int read_adc(unsigned char adc_input)
{
ADMUX=adc_input|ADC_VREF_TYPE;
ADCSRA|=0x40;
while ((ADCSRA & 0x10)==0);
ADCSRA|=0x10;
return ADCW;
}Saat kita memanggil fungsi read_adc,kita harus memasukkan nilai variabel adc_input.
misal:
data_ADC=read_adc(0); //nilai 0 merupakan nilai untuk variabel adc_inputYupzzz...... Sekarang kita telah mempelajari dasar fungsi dan prosedur.
No comments:
Post a Comment