"[WELLCOME]"."[bhernandz.blogspot.com]"

Minggu, 29 April 2012

Bahasa C Untuk Pemrograman Mikrokontroler MCS-51


Pemrograman Bahasa C untuk mikrokontroler sudah umum digunakan. Bahasa ini sudah merupakan high level language, dimana memudahkan programmer menuangkan algoritmanya. Berikut penjelasan kode2 dasar bahasa C untuk pemrograman mikrokontroler keluarga 89S51 yang sering digunakan:

1. Struktur penulisan program
#include < [library1.h] > // Opsional*
#include < [library2.h] > // Opsional
#define [nama1] [nilai] ; // Opsional
#define [nama2] [nilai] ; // Opsional
[global variables] // Opsional
[functions` prototype] // Opsional
void main(void) // Program Utama harus ada
{ [Deklarasi local variable/constant] [Isi Program Utama] }
*Dalam pemrograman C, Pendeklarasian library harus ada sesuai dengan kode program yang digunakan.

Berikut contoh penulisan kode2 tersebut:
#include
#include
#include “myOwnLib”; //contoh penulisan library yg dideklarasikan manual
int variabel_global;
int sum(int); //contoh prototype fungsi sum (prototype fungsi hanya dituliskan bila fungsi diletakkan dibawah fungsi main)
#define PHI 3.14
void main (void)
{
int variabel_lokal;
}
int sum (int a)
{
}

2. Tipe data
char : 1 byte ( -128 s/d 127 )
unsigned char : 1 byte ( 0 s/d 255 )
int : 2 byte ( -32768 s/d 32767 )
unsigned int : 2 byte ( 0 s/d 65535 )
long : 4 byte ( -2147483648 s/d 2147483647 )
unsigned long : 4 byte ( 0 s/d 4294967295 )
float : bilangan desimal
array : kumpulan data-data yang sama tipenya.

3. Deklarasi variabel & konstanta
Variabel adalah memori penyimpanan data yang nilainya dapat diubah-ubah.
Penulisan : [tipe data] [nama] = [nilai] ;
Konstanta adalah memori penyimpanan data yang nilainya tidak dapat diubah.
Penulisan : const [nama] = [nilai] ;
Tambahan: Global variabel/konstanta yang dapat diakses di seluruh bagian program.
Local variabel/konstanta yang hanya dapat diakses oleh fungsi tempat dideklarasikannya.

4. Statement
Statement adalah setiap operasi dalam pemrograman, harus 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.
Contoh: suhu=adc/255*100; //contoh rumus perhitungan suhu

5. Function Function
adalah bagian program yang dapat dipanggil oleh program utama.
Penulisan : [tipe data hasil] [nama function]([tipe data input 1],[tipe data input 2]) { [statement] ; }

6. Conditional statement dan looping if else
digunakan untuk penyeleksian kondisi
if ( [persyaratan] ) { [statement1]; [statement2]; } else { [statement3]; [statement4]; }
for : digunakan untuk looping dengan jumlah yang sudah diketahui
for ( [nilai awal] ; [persyaratan] ; [operasi nilai] ) { [statement1]; [statement2]; }
while : digunakan untuk looping jika dan salama memenuhi syarat tertentu
while ( [persyaratan] ) { [statement1]; [statement2]; }
do while : digunakan untuk looping jika dan salama memenuhi syarat tertentu, namun min 1 kali
do { [statement1]; [statement2]; } while ( [persyaratan] )
switch case : digunakan untuk seleksi dengan banyak kondisi
switch ( [nama variabel] ) { case [nilai1]: [statement]; break; case [nilai2]: [statement]; break; }

7. Operasi logika dan biner Logika
AND :&&
NOT : !
OR : ||
Biner AND : &
OR : |
XOR : ^
Shift right: >>
Shift left : <<
Komplemen : ~

8. Operasi relasional (perbandingan)
Sama dengan : ==
Tidak sama dengan : !=
Lebih besar : >
Lebih besar sama dengan : >=
Lebih kecil : <
Lebih kecil sama dengan : <=

9. Operasi aritmatika
+ , – , * , / : 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 = 30×5 = 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.

10. pemrograman interupsi untuk interupsi mikrokontroler
Ada beberapa interupsi yang dapat diinisialisasi pada pemrograman bahasa C, kegunaan masing2 interupsi tersebut berbeda. Berikut penulisan kode interupsi yang digunakan untuk menghubungkan komputer dan mikrokontroler secara serial:
[tipe data] [nama interupsi] ([tipe data]) interrupt
misalnya: void interruptSerial (void) interrupt
kode IRQ_VECTOR([nama interupsi serial],SERIAL) dapat ditambahkan diatas deklarasi fungsi interupsi untuk beberapa kompiler.

11. Kode program untuk menerima data dari komputer ke mikrokontroler keluarga 89S51
Pada mikrokontroler, ada beberapa register yang memiliki fungsi2 tersendiri (penjelasan mengenai mikrokontroler akan dibahas di artikel yang berbeda) selain itu ada juga pengaturan timer / clock yang harus diinisialisasi. Berikut contoh deklarasi fungsi tersebut:
void inisialisasi_serial_port_9600_uC_receive()
{
TMOD=0×20;              //setting timer 1 mode 2 (isi ulang) TMOD=0010 0000
TH1=0xFD;   TL1=0xFD;   //nilai isi ulang untuk 9600 bps, crystall=11,059 MHz
TR1=1;                  //aktifkan timer 1
SCON=0×50;              //serial model (UART 8 bit), SCON=0100 0000, REN=1 (siap terima)
PCON=0×00;              //baud rate normal, tidak digandakan
}

12. Kode program untuk menerima data dari mikrokontroler keluarga 89S51 ke komputer
sama seperti contoh di no. 11 hanya saja ada nilai register yang berbeda.
void inisialisasi_serial_port_9600_uC_transmit()
{
TMOD = 0×20;             //setting timer 1 mode 2 (isi ulang)
TH1 = 0xFD; TL1=0xFD; //nilai isi ulang, 9600 bps
TR1 = 1;                 //aktifkan timer1
SCON = 0×40;             //serial mode 1(UART 8 bit), REN =0
PCON = 0×00;        //baud rate normal, tidak digandakan
}

13. fungsi untuk mengirim kalimat dari komputer ke mikrokontroler
Pada mikrokontroler ada register yang berfungsi untuk menyimpan karakter secara sementara yaitu register SBUF (serial Buffer). Register tersebut dimanfaatkan untuk proses pengiriman data.
Berikut contoh fungsi untuk menerima data dari komputer:
char input()
{
while(!RI) {;}
RI=0;
return(SBUF);
}
Berikut contoh fungsi untuk mengirim data ke komputer:
void tulis_serial(unsigned char* dat)
{
int i;
i=0;
while(dat[i] != NULL)     //ulang terus sampai ditemukan karakter NULL (terakhir)
{
SBUF=dat[i];
while (TI==0);        //tunggu sampai TI = 1
TI=0;               //secara manual menge-nol-kan TI
i++;        //ambil karakter berikutnya
}
}

0 komentar:

Posting Komentar

 
Powered by Blogger