Struktur Bahasa Assembler Mikrokontroller MCS51 1 Pendahuluan Bahasa assembler atau bahasa mesin adalah bahasa tingkat low level atau tingkat rendah. Disebut bahasa mesin karena bahasa assembler mendekati bahasa mesin yaitu suatu mnemonic-mnemonic yang jika diolah oleh compiler langsung dikonversikan menjadi kode-kode heksadesimal yang dikenali oleh mesin (dalam hal ini adalah mikrokontroller). Berbeda dengan bahasa C yang mendekati bahasa manusia, apabila diolah oleh compiler maka bahasa pemrograman tersebut akan diubah terlebih dahulu menjadi bahasa assembler kemudian diubah lagi menjadi kode heksadesimal. Bahkan pemrograman yang lebih mutakhir yaitu memprogram menggunakan Flowchart (nama programnya FlowCode) yaitu programmer cukup memprogram menggunakan diagram alir yang menunjukkan suatu siklus / tahapan proses. Oleh compiler flowcode ini dikonversi terlebih dahulu menjadi bahasa C (atau sejenisnya) lalu diubah lagi menjadi bahasa Assembler dan terakhir dikonversi menjadi kode-kode heksadesimal. Semakin panjang suatu program maka semakin panjang juga proses yang terjadi pada mikrokontroller tersebut dan juga memperlambat eksekusi program secara keseluruhan. Oleh sebab itu mengapa program yang ditulis dalam bahasa assembler lebih cepat dieksekusi oleh mikrokontroller dibanding jika ditulis dengan menggunakan bahasa C atau bahasa pemrograman lainnya. Akan tetapi menulis program dalam bahasa assembler membutuhkan pengetahuan yang lebih dalam dan luas seperti mengetahui alamat-alamat register mikrokontroller, register fungsi khusus, nilai-nilai register, inisialisasi register, mnemonic assembler, siklus program, waktu eksekusi suatu mnemonic, penggunaan ram, dll.
Setiap mikrokontroller yang dibuat oleh perusahaan yang berbeda memiliki bahasa pemrograman yang berbeda. Misalnya mikrokontroller yang dibuat oleh Atmel, PIC, Motorolla, dan Dallas memiliki jenis mikrokontroller sendiri dan memiliki bahasa pemrograman sendiri. Selain itu mikrokontroller yang dibuat perusahaan yang sama tetapi jenis / keluarga mikrokontrollernya berbeda juga memiliki bahasa pemrograman yang berbeda. Misalnya mikrokontroller keluaran Atmel untuk keluarga MCS51 dan AVR memiliki bahasa pemrograman assembler yang berbeda. 2 Struktur Bahasa Assembler MCS51 Salah satu jenis mikrokontroller buatan Atmel yang sempat popular adalah mikrokontroller keluarga MCS51 yaitu mikrokontroller CMOS 8 bit. Mnemonicmnemonic dalam bahasa assembler yang dapat digunakan untuk memprogram mikrokontroller MCS51 dapat dibaca pada file MCS51 Instruction Set.pdf. Mnemonic atau program yang ditulis dalam bahasa assembler selanjutnya diubah menjadi kodekode heksadesimal oleh compiler. Compiler yang digunakan adalah compiler ASM51 yang dibuat oleh Metalink Corp. ASM51.exe adalah compiler yang akan mengubah program dalam bahasa assembler menjadi kode-kode heksadesimal oleh sebab itu programmer harus mengikuti aturan-aturan penulisan program yang telah ditentukan oleh compiler ASM51, apabila tidak sesuai dengan aturan-aturan yang ditentukan oleh compiler maka akan menyebabkan kesalahan / error pada program tersebut. Aturan-aturan penulisan program menggunakan compiler ASM51 dicantumkan pada file ASM_MAN.doc, ASM_REV.doc, sedangkan contoh program yang dituliskan dalam bahasa assembler pada file BMULB.asm. Baca dulu file-file tersebut untuk memahami cara-cara penulisan program bahasa assembler menggunakan compiler ASM51.
Percobaan 1 : Struktur Dasar Jalankan aplikasi text editor seperti NOTEPAD.exe yang tersedia. 3 Pada NotePad kemudian File > Save dan simpan dengan nama Struktur.asm dengan Save as type adalah All Files. Akan muncul file dengan tipe assembler source file pada folder Assembler MCS51. Program sebagai berikut : $DATE(Maret 2011) $NOPAGING PORT_led EQU P0 ;definisi PORT0 INIT_uC: MAIN: Org 00H ; alamat awal pada 0000H MOV PORT_led,#00H ;setelah titik koma MOV P1,#0 ;adalah komentar MOV P2,#00000000B MOV P3,#00
Percobaan 2 : Struktur Dasar dan Fungsi. Program sebagai berikut : ; Program struktur Assembler MCS51 ; Xtall 11,059200 MHz 4 ;Assembler Control PORT_led EQU P0 ;Assembler Directive INIT_uC: WHILE_1: Org 00H ;alamat awal pada 0000H ;Label ;Inisialisasi Awal CALL FUNGSI1 ; program utama ACALL FUNGSI2 LCALL FUNGSI3 SJMP WHILE_1 ;Loop forever FUNGSI1: ;program rutin fungsi 1 ; isi program fungsi 1 FUNGSI2: ;program rutin fungsi 2 ; isi program fungsi 2 FUNGSI3: ;program rutin fungsi 3 ; isi program fungsi 3 ;End of Program
Percobaan 3 : Program Counter dan Data Transfer Program sebagai berikut : ; Program struktur Assembler MCS51 ; Xtall 11,059200 MHz 5 ;Assembler Control WHILE_1: Org 00H ;alamat awal pada 0000H MOV R0,#0AH MOV R1,#0EFH MOV 3FH,#01010101B MOV A,R0 MOV A,#30H MOV B,A MOV 3FH,A MOV DPTR,#65535 PUSH 3FH MOV 3FH,#00001111H POP 3FH XCH A,R1 SJMP WHILE_1 ;Loop forever ;End of Program Simulasikan coding tersebut menggunakan simulator yang ada untuk melihat perubahan nilai register-register dan program counter yang terjadi pada mikrokontroller MCS51.