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 ukuran evaluasi hanya diperbolehkan ukuran program maksimal 2kbyte, namun untuk aplikasi dasar ini sudah cukup. Sebagai alternatif (tidak dibatasi ukuran programnya) anda bisa download software IDE Reads51 dari Rigels atau klik disini untuk download langsung.
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.
Apabila ada permintaan seperti berikut, anda bisa mengabaikanya dengan meng-klik tombol “No” ataupun “Yes” (proses ini tidak terlalu signifikan)
Jika sudah, expand tab target microcontroller anda dan klik dua kali pada tab souce, detailnya seperti gambar dibawah.
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.
Kemudian simpan dengan ekstensi *.c contohnya adalah “ LedJalan.c ”
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.
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.
Klik icon seperti dibawah untuk memulai proses Debug. Klik “Run” untuk menjalankan program melalui simulator.
Apabila program benar, maka seharusnya LED akan bergeser bolak-balik seperti berikut ini.
Apabila program tersebut di konversikan ke dalam program low-level machine (assembler) alias bahasa yang susah untuk dimengerti 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
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’at..
0 KOMENTAR