Jumat, 03 Desember 2010

Belajar Mikrokontroller lebih Mudah dengan Bahasa C++

Pada masa sekarang ini, mikrokontroler bukanlah hal yang asing lagi atau pun barang canggih dan langka. Benda berukuran kecil ini dapat dijumpai pada jam tangan digital, penanak nasi listrik, oven microwave, timbangan digital remote TV, bahkan mainan elektronik anak-anak sekalipun. Chip berukuran kecil ini biasanya digunakan sebagai alat pemroses dan pengolah data serta sebagai pengendali output sebuah peralatan elektronik. Kemudian bagaimana komponen berukuran kecil ini bisa melakukan semua hal tersebut? Tentunya dibalik kecerdasan sebuah piranti digital tentunya ada sosok perancang yang membangunya.
Mikrokontroler pada dasarnya merupakan sebuah piranti digital yang memproses byte registernya secara berurutan dari baris pertama sampai terakhir dan seterusnya dengan nilai ketukan tertentu dimana isi register-registernya dapat diprogram (programmable). Mikrokontroler bisa dikatakan sebagai programmable IC, namun karena IC ini dilengkapi juga dengan RAM, ROM dan CPU, ada juga yang menyebutnya dengan istilah mikrokomputer. Dewasa ini sebagian besar aplikasi chip mikro tersebut lebih cenderung digunakan sebagai pengendali peralatan listrik dan elektronik sehingga membuat chip ini lebih dikenal dengan istilah mikrokontroler (bhs. inggris: microcontroller). Pada dasarnya semua chip microcontroller adalah sama (hanya berbeda spesifikasi yang ada di dalamnya saja), yang membuat berbeda dan istimewa (dari sgi kecanggihan dan fungsi) adalah perancang program microcontroller itu sendiri. Pada awal mula munculnya teknologi ini, proses pemrograman mikrokontroler cukup rumit karena seorang perancang atau programmer mikrokontroler harus mengerti kode mesin. Kode binary adalah kode bilangan binary (0 dan 1) yang dibaca oleh mikrokontroler dan mikrokontroler hanya mengenal bilangan ini.
Dalam perkembanganya, banyak developer software (pengembang perangkat lunak komputer) mencoba membuat aplikasi agar bahasa pemrograman mikrokontroler menjadi lebih mudah dimengerti dan dianalisa, sehingga dibuatlah aplikasi konversi bahasa assembly menjadi kode hex ataupun bin yang bisa diterima oleh mikrokontroler. Aplikasi ini dikenal dengan istilah assembler, sesuai dengan bahasa pemrograman yang berlaku pada itu (under DOS x86). Bahasa pemrograman ini tidak berlangsung lama, terutama setelah munculnya standar bahasa pemrograman tingkat tinggi (hi-level programming). Hi-level programming adalah bahasa pemrograman yang lebih mendekati bahasa manusia, atau dengan kata lain bahasa program yang digunakan lebih mudah dipahami dan dimengerti oleh manusia. Salah satu contoh hi-level programming adalah bahasa C++.
Disini kita tidak akan membahas mengenai bahasa assembler yang rumit tersebut, melainkan kita akan membahas bahasa pemrograman C++ untuk memudahkan pemahaman dan lebih mudah dalam melangkah ke dalam aplikasi yang lebih rumit lagi. Kenapa disini saya lebih condong untuk mengajak anda belajar memprogram mikrokontroler? Mikrokontroler selain harganya sangat murah (pada waktu itu saya cukup mengeluarkan biaya sebesar lima belas ribu saja untuk chip ini), ukuran yang kecil dan ringan, serta microcontroller ini dapat dibentuk dan mudah untuk dirpogram sesuai kebutuhan rancangan sistem.
Untuk memulai mempelajari pemrograman microcontroller, disini kita membutuhkan sebuah antarmua (interface) berupa perangkat lunak (software) yang akan merubah bahasa C++ menjadi kode mesin untuk ditransfer ke dalam microcontroller. Software yang saya rekomendasikan disini adalah “Keil development tools for the 8051 microcontroller family”. Anda bisa download software tersebut disini. Untuk tipe chip microcontroller yang digunakan disini adalah AT89S51 (4 kbyte), atau anda dapat memilih tipe lain sesuai dengan kebutuhan dari rancangan sistem anda. Untuk memilih tipe/model microcontroller yang akan digunakan (struktur register, jumlah pin input/output, jumlah memory, dll.) bisa anda lihat disini.
Untuk permulaan pengenalan dasar bahasa C++ dalam microcontroller, yang diperlukan disini hanyalah software dari Keil dimana sudah terdapat simulator disana. Lakukan instalasi software seperti biasa (ikuti langkah-langkah dan instruksi yang diberikan) kemudian jalankanlah software tersebut.

Dalam memulai sebuah project baru, arahkan mouse ke menu “Project” kemudian klik “New uVision Project”

Untuk memudahkan dalam pengaturan file-file project, sebaiknya dibuat file folder untuk setiap project. Kemudian ketiklah nama project pertama anda seperti gambar dibawah ini.


Disini anda akan diminta untuk memasukan tipe microcontroller yang akan digunakan. Dalam tutorial ini digunakan tipe ATMEL AT89S51 dengan ukuran kristal-X = 12 MHz.
image
Apabila ada permintaan seperti berikut, anda bisa mengabaikanya dengan meng-klik tombol “No” ataupun “Yes” (proses ini tidak terlalu signifikan)
image
Jika sudah, expand tab target microcontroller anda dan klik dua kali pada tab souce, detailnya seperti gambar dibawah.
image
Ketikan nama file source code yang akan dibuat lalu klik “Add”, setelah itu pilih jenis bahasa pemrograman yang akan digunakan. Di tutorial ini digunakan bahasa pemrograman C++. Klik icon “Create a new file” untuk menambahkan code bahasa C++ dalam project yang akan dibuat.
image
Kemudian simpan dengan ekstensi *.c contohnya adalah “ LedJalan.c ”
image
Klik kanan pada tab “source” dan pilih “Add Files to Group” dan pilihlah file yang baru saja dibuat tadi. Jika sudah “Add” kemudian klik tombol close.
image image
Maka dari sini kita sudah siap untuk menambahkan beberapa buah kode agar target microcontroller kita dapat bekerja. Silahkan ketik dan pelajari source code C++ untuk mocrocontroller dibawah (ini adalah sebuah contoh sangat sederhana).
/*  LED-JALAN.C - LED Berjalan Untuk Microcontroller AT89S51   */
/*  Kode berwarna hijau berarti comment/abaikan dalam bahasa C */
/*== Inisialisasi Byte Register ==*/
// karena setiap port I/O micro disimbolkan dengan bilangan
// maka untuk menggantinya sesuai keinginan kita, kita harus
// mengganti namanya dengan proses inisialisasi seperti ini.
sfr Port_0        = 0x80;    /*alamat Port 0 (terdiri dari 8 baris pin) */
sfr Port_1        = 0x90;    /*alamat Port 1 (terdiri dari 8 baris pin) */
sfr Port_2        = 0xA0;    /*alamat Port 2 (terdiri dari 8 baris pin) */
sfr Port_3        = 0xB0;    /*alamat Port 3 (terdiri dari 8 baris pin) */
/* Aplikasi 1 : Lampu Berjalan */
void tunggu (void)  {                 /* fungsi tunggu */
  ;                                               /* hanya sebagai delay dalam kedipan LED */
}                                                 /* apabila tidak diberikan maka LED akan berjalan */
                                                  /* sangat cepat */
void main (void)  {
  unsigned int i;                                                  /* Variabel untuk delay */
  unsigned char j;                                               /* Variable pengganti LED */
  while (1) {                                                       /* Looping terus */
    for (j=0x01; j< 0x80; j<<=1)  {                  /* LED nyala bergantian 0, 1, 2, 3, 4, 5, 6 (shift) */
      Port_0 = j;                                                   /* untuk mengeluarkan data j ke Port_0 */
      for (i = 0; i < 50000; i++)  {                        /* Sebelum 50000 ketukan maka */
       tunggu ();                                                     /* panggil fungsi tunggu */
      }
    }
/* apabila proses diatas telah selesai atau j = 0x80 atau 10000000 */
/* maka kode dibawah adalah untuk menggeser kembali ke posisi 0x01 atau 00000001 */
    for (j=0x80; j> 0x01; j>>=1)  {                 /* LED nyala bergantian 6, 5, 4, 3, 2, 1 */
      Port_0 = j;                                                 /* untuk mengeluarkan data j ke Port_0 */
      for (i = 0; i < 50000; i++)  {                     /* Sebelum 50000 ketukan maka */
       tunggu ();                                                 /* panggil fungsi tunggu */
      }
    }
  }
}
/* Catatan: apabila pergeseran LED tidak nampak (semua tampak nyala) maka */
/* LED bergeser sangat cepat, hal ini berarti nilai ketukan delay kurang lama */
/* rubah nilai 50000 menjadi lebih besar sesuai keinginan anda dan sebaliknya. */
/* SELAMAT MENCOBA */
Disini terdapat 4 baris Port I/O microcontroller yang dapat digunakan. Silahkan variasikan ke-empat port tersebut untuk lebih mengenal jenis pemrograman ini sehingga anda akan siap untuk memulai ke pokok bahasan lebih lanjut.
Untuk mengecek dan melacak kesalahan serta menjalankan simulator, klik icon “Build Target” dan “Start/Stop Debug Session”, apabila tidak ditemukan kesalahan maka simulator dapat dijalankan.

image
image
image
Klik icon seperti dibawah untuk memulai proses Debug. Klik “Run” untuk menjalankan program melalui simulator.
image
image
Apabila program benar, maka seharusnya LED akan bergeser bolak-balik seperti berikut ini.
image image
Apabila program tersebut di konversikan ke dalam program low-level machine (assembler) adalah sbb:
C:0x0800    750801   MOV      0x08,#0x01
C:0x0803    E508     MOV      A,0x08
C:0x0805    C3       CLR      C
C:0x0806    9480     SUBB     A,#Port_0(0x80)
C:0x0808    502D     JNC      C:0837
C:0x080A    850880   MOV      Port_0(0x80),0x08
C:0x080D    E4       CLR      A
C:0x080E    F583     MOV      DP0H(0x83),A
C:0x0810    F582     MOV      DP0L(0x82),A
C:0x0812    AA83     MOV      R2,DP0H(0x83)
C:0x0814    AB82     MOV      R3,DP0L(0x82)
C:0x0816    AF03     MOV      R7,0x03
C:0x0818    AE02     MOV      R6,0x02
C:0x081A    E4       CLR      A
C:0x081B    FC       MOV      R4,A
C:0x081C    FD       MOV      R5,A
C:0x081D    7B50     MOV      R3,#0x50
C:0x081F    7AC3     MOV      R2,#0xC3
C:0x0821    F9       MOV      R1,A
C:0x0822    F8       MOV      R0,A
C:0x0823    D3       SETB     C
C:0x0824    12086A   LCALL    C?SLCMP(C:086A)
C:0x0827    4006     JC       C:082F
C:0x0829    12088C   LCALL    tunggu(C:088C)
C:0x082C    A3       INC      DPTR
C:0x082D    80E3     SJMP     C:0812
C:0x082F    E508     MOV      A,0x08
C:0x0831    25E0     ADD      A,ACC(0xE0)
C:0x0833    F508     MOV      0x08,A
C:0x0835    80CC     SJMP     C:0803
C:0x0837    750880   MOV      0x08,#Port_0(0x80)
C:0x083A    E508     MOV      A,0x08
C:0x083C    D3       SETB     C
C:0x083D    9401     SUBB     A,#0x01
C:0x083F    40BF     JC       main(C:0800)
C:0x0841    850880   MOV      Port_0(0x80),0x08
C:0x0844    E4       CLR      A
C:0x0845    F583     MOV      DP0H(0x83),A
C:0x0847    F582     MOV      DP0L(0x82),A
C:0x0849    AF82     MOV      R7,DP0L(0x82)
C:0x084B    AE83     MOV      R6,DP0H(0x83)
C:0x084D    E4       CLR      A
C:0x084E    FC       MOV      R4,A
C:0x084F    FD       MOV      R5,A
C:0x0850    7B50     MOV      R3,#0x50
C:0x0852    7AC3     MOV      R2,#0xC3
C:0x0854    F9       MOV      R1,A
C:0x0855    F8       MOV      R0,A
C:0x0856    D3       SETB     C
C:0x0857    12086A   LCALL    C?SLCMP(C:086A)
C:0x085A    4006     JC       C:0862
C:0x085C    12088C   LCALL    tunggu(C:088C)
C:0x085F    A3       INC      DPTR
C:0x0860    80E7     SJMP     C:0849
C:0x0862    E508     MOV      A,0x08
C:0x0864    C3       CLR      C
C:0x0865    13       RRC      A
C:0x0866    F508     MOV      0x08,A
C:0x0868    80D0     SJMP     C:083A
                 C?SLCMP:
C:0x086A    EB       MOV      A,R3
C:0x086B    9F       SUBB     A,R7
C:0x086C    F5F0     MOV      B(0xF0),A
C:0x086E    EA       MOV      A,R2
C:0x086F    9E       SUBB     A,R6
C:0x0870    42F0     ORL      B(0xF0),A
C:0x0872    E9       MOV      A,R1
C:0x0873    9D       SUBB     A,R5
C:0x0874    42F0     ORL      B(0xF0),A
C:0x0876    EC       MOV      A,R4
C:0x0877    6480     XRL      A,#Port_0(0x80)
C:0x0879    C8       XCH      A,R0
C:0x087A    6480     XRL      A,#Port_0(0x80)
C:0x087C    98       SUBB     A,R0
C:0x087D    45F0     ORL      A,B(0xF0)
C:0x087F    22       RET     
C:0x0880    787F     MOV      R0,#0x7F
C:0x0882    E4       CLR      A
C:0x0883    F6       MOV      @R0,A
C:0x0884    D8FD     DJNZ     R0,C:0883
C:0x0886    758108   MOV      SP(0x81),#0x08
C:0x0889    020800   LJMP     main(C:0800)
C:0x088C    22       RET     
Jika proses pembuatan project diatas terlalu rumit, anda dapat mengunduh/download file cource code diatas dan merubah-rubah parameter code C++ yang ada di dalam tutorial ini disini. Apabila proses download di server kami terlalu lama, ada bisa klik disini untuk mempercepat proses download.
Semoga Bermanfa’ah..
Sumber : http://www.ilmu-listrik.cz.cc/2009/10/belajar-mikrokontroler-lebih-mudah.html

Tidak ada komentar:

Posting Komentar

Apapun Komentar anda Itulah Anda