Belajar Pemrograman MCS51

Thursday, August 6th, 2015 - Microcontroller, Tutorial

Belajar Pemrograman MCS51 menjadi wajib kita pelajari apabila kita mau menggunakan mikrokontroler keluarga MCS51. Pada bagian pertama Belajar Pemrograman MCS51 ini akan kita pelajari bersama tentang bahasa pemrograman dasar mikrokontroler MCS51. Dimana dalam pemrograman MCS51 secara garis besar ada 2 bagian inti dari bahasa pemrogramanya yaitu “Kata Kerja” dan “Object”. Pada artikel Belajar Pemrograman MCS51 bagian pertama ini akan kita pelajari terlebih dahulu bagian “kata kerja” yaitu Kelompok perintah Peng-copi-an data, Kelompok perintah Aritmatik dan Kelompok perintah Logika.

Pemrograman MCS51,Pemrograman MCS51,program mcs51,memprogram mcs51,cara program mcs51,program micrcontroller,bahasapemrograman microconroler

PENYEBUTAN DATA DALAM PEMROGRAMAN MCS51

Data bisa berada diberbagai tempat yang berlainan, dengan demikian dikenal beberapa cara untuk menyebut data (dalam bahasa Inggris sering disebut sebagai “Addressing Mode”), antara lain sebagai berikut:

  • Penyebutan data konstan (immediate addressing mode): MOV A,#20. Data konstan merupakan data yang berada di dalam instruksi. Contoh instruksi ini mempunyai makna data konstan 20 (sebagai data konstan ditandai dengan “#“) di-copy-kan ke Akumulator A. Yang perlu benar-benar diperhatikan dalam perintah ini adalah bilangan 20 merupakan bagian dari instruksi.
  • Penyebutan data secara langsung (direct addressing mode), cara ini dipakai untuk menunjuk data yang berada di dalam memori dengan cara menyebut nomor memori tempat data tersebut berada : MOV A,30. Contoh instruksi ini mempunyai makna data yang berada di dalam memori nomor 30 di-copy-kan ke Akumulator.

Sekilas intruksi ini sama dengan instruksi data konstan di atas, perbedaannya instruksi di atas memakai tanda “#“ yang menandai 20 adalah data konstan, sedangkan dalam instruksi ini karena tidak ada tanda “#“ maka 30 adalah nomor dari memori.

  • Penyebutan data secara tidak langsung (indirect addressing mode), cara ini dipakai untuk menunjuk data yang berada di dalam memori, kalau memori penyimpan data ini letaknya berubah-rubah sehingga nomor memori tidak disebut secara langsung tapi di-”titip”-kan ke register lain : MOV A,@R0.

Dalam instruksi ini register serba guna R0 dipakai untuk mencatat nomor memori, sehingga instruksi ini mempunyai makna memori yang nomornya tercatat dalam R0 isinya di-copy-kan ke Akumulator A.

Tanda “@“ dipakai untuk menandai nomor memori disimpan di dalam R0.

Bandingkan dengan instruksi penyebutan nomor memori secara langsung di atas, dalam instruksi ini nomor memori terlebih dulu disimpan di R0 dan R0 berperan menunjuk memori mana yang dipakai, sehingga kalau nilai R0 berubah memori yang ditunjuk juga akan berubah pula.

Dalam instruksi ini register serba guna R0 berfungsi dengan register penampung alamat (indirect address register), selain R0 register serba guna R1 juga bisa dipakai sebagai register penampung alamat.

  • Penyebutan data dalam register (register addressing mode): MOV A,R5. Instruksi ini mempunyai makna data dalam register serba guna R5 di-copy-kan ke Akumulator A. Instruksi ini membuat register serba guna R0 sampai R7 sebagai tempat penyimpan data yang sangat praktis yang kerjanya sangat cepat.
  • Data yang dimaksud dalam bahasan di atas semuanya berada di dalam memori data (termasuk register serba guna letaknya juga di dalam memori data). Dalam penulisan program, sering-sering diperlukan tabel baku yang disimpan bersama dengan program tersebut. Tabel semacam ini sesungguhnya merupakan data yang berada di dalam memori program!

Untuk keperluan ini, MCS51 mempunyai cara penyebutan data dalam memori program yang dilakukan secara indirect (code indirect addressing mode) : MOVC A,@A+DPTR.

Perhatikan dalam instruksi ini MOV digantikan dengan MOVC, tambahan huruf C tersebut dimaksud untuk membedakan bahwa instruksi ini dipakai di memori program. (MOV tanpa huruf C artinya instruksi dipakai di memori data).

Tanda “@“ dipakai untuk menandai A+DPTR dipakai untuk menyatakan nomor memori yang isinya di-copy-kan ke Akumulator A, dalam hal ini nilai yang tersimpan dalam DPTR (Data Pointer Register – 2 byte) ditambah dengan nilai yang tersimpan dalam Akumulator A (1 byte) dipakai untuk menunjuk nomor memori program.

“Kata kerja” dalam AT89Cx051

Secara keseluruhan AT89Cx051 mempunyai sebanyak 255 macam instruksi, yang dibentuk dengan mengkombinasikan “kata kerja” dan objek. “Kata kerja” tersebut secara kelompok dibahas sebagai berikut :

KELOMPOK PENG-COPY-AN DATA MCS51

Kode dasar untuk kelompok ini adalah MOV, singkatan dari MOVE yang artinya memindahkan, meskipun demikian lebih tepat dikatakan perintah ini mempunyai makna peng-copy-an data. Hal ini bisa dijelaskan berikut : setelah instruksi MOV A,R7 dikerjakan, Akumulator A dan register serba guna R7 berisikan data yang sama, yang asalnya tersimpan di dalam R7.

Perintah MOV dibedakan sesuai dengan jenis memori AT89Cx051. Perintah ini pada memori data dituliskan menjadi MOV, misalkan :

MOV A,20

MOV A,@R1

MOV A,P1

MOV P3,A

Untuk pemakaian pada memori program, perintah ini dituliskan menjadi MOVC, hanya ada 2 jenis instruksi yang memakai MOVC, yakni:

MOVC A,@A+DPTR ; DPTR sebagai register indirect

MOVC A,@A+PC ; PC sebagai register indirect

Selain itu, masih dikenal pula perintah MOVX, yakni perintah yang dipakai untuk memori data eksternal (X singkatakan dari External). Perintah ini hanya dimiliki oleh anggota keluarga MCS51 yang mempunyai memori data eksternal, misalnya AT89C51 dan lain sebagainya, dan jelas tidak dikenal oleh kelompok AT89Cx051 yang tidam punya memori data eksternal. Hanya ada 6 macam instruksi yang memakai MOVX, instruksi-instruksi tersebut adalah:

MOVX A,@DPTR

MOVX A,@R0

MOVX A,@R1

MOVX @DPTR,A

MOVX @R0,A

MOVX @R1,A

KELOMPOK ARIMATIK (ADD, ADDC, SUBB, DA, MUL dan DIV)

Perintah ADD dan ADDC

Isi Akumulator A ditambah dengan bilangan 1 byte, hasil penjumlahan akan ditampung kembali dalam Akumulator. Dalam operasi ini bit Carry (C flag dalam PSW €“ Program Status Word) berfungsi sebagai penampung limpahan hasil penjumlahan. Jika hasil penjumlahan tersebut melimpah (nilainya lebih besar dari 255) bit Carry akan bernilai “1”, kalau tidak bit Carry bernilai “0“. ADDC sama dengan ADD, hanya saja dalam ADDC nilai bit Carry dalam proses sebelumnya ikut dijumlahkan bersama.

Bilangan 1 byte yang ditambahkan ke Akumulator, bisa berasal dari bilangan konstan, dari register serba guna, dari memori data yang nomor memorinya disebut secara langsung maupun tidak langsung, seperti terlihat dalam contoh berikut :

ADD A,R0 ; register serba guna

ADD A,#23 ; bilangan konstan

ADD A,@R0 ; no memori tak langsung

ADD A,P1 ; no memori langsung (port 1)

PERINTAH SUBB DALAM PEMROGRAMAN MCS51

Isi Akumulator A dikurangi dengan bilangan 1 byte berikut dengan nilai bit Carry, hasil pengurangan akan ditampung kembali dalam Akumulator. Dalam operasi ini bit Carry juga berfungsi sebagai penampung limpahan hasil pengurangan. Jika hasil pengurangan tersebut melimpah (nilainya kurang dari 0) bit Carry akan bernilai “1”, kalau tidak bit Carry bernilai “0“.

SUBB A,R0 ; A = A – R0 – C

SUBB A,#23 ; A = A – 23

SUBB A,@R1

SUBB A,P0

Perintah DA

Perintah DA (Decimal Adjust) dipakai setelah perintah ADD; ADDC atau SUBB, dipakai untuk merubah nilai biner 8 bit yang tersimpan dalam Akumulator menjadi 2 buah bilangan desimal yang masing-masing terdiri dari nilai biner 4 bit.

PERINTAH MUL AB DALAM PEMROGRAMAN MCS51

Bilangan biner 8 bit dalam Akumulator A dikalikan dengan bilangan biner 8 bit dalam register B. Hasil perkalian berupa bilangan biner 16 bit, 8 bit bilangan biner yang bobotnya lebih besar ditampung di register B, sedangkan 8 bit lainnya yang bobotnya lebih kecil ditampung di Akumulator A.

Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai hasil perkalian yang ada dalam register B. Bit OV akan bernilai “0“ jika register B bernilai 00, kalau tidak bit OV bernilai “1“.

MOV A,#10

MOV B,#20

MUL AB

PERINTAH DIV AB DALAM PEMROGRAMAN MCS51

Bilangan biner 8 bit dalam Akumulator A dibagi dengan bilangan biner 8 bit dalam register B. Hasil pembagian berupa bilangan biner 8 bit ditampung di Akumulator, sedangkan sisa pembagian berupa bilangan biner 8 bit ditampung di register B.

Bit OV dalam PSW (Program Status Word) dipakai untuk menandai nilai sebelum pembagian yang ada dalam register B. Bit OV akan bernilai “1“ jika register B asalnya bernilai 00.

KELOMPOK LOGIKA (ANL, ORL dan XRL) DALAM PEMROGRAMAN MCS51

Kelompok perintah ini dipakai untuk melakukan operasi logika mikrokontroler MCS51, operasi logika yang bisa dilakukan adalah operasi AND (kode operasi ANL), operasi OR (kode operasi ORL) dan operasi Exclusive-OR (kode operasi XRL).

Data yang dipakai dalam operasi ini bisa berupa data yang berada dalam Akumulator atau data yang berada dalam memori-data, hal ini sedikit berlainan dengan operasi aritmatik yang harus melihatkan Akumulator secara aktip.

Hasil operasi ditampung di sumber data yang pertama.

  • Operasi logika AND banyak dipakai untuk me-”0“-kan beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-ANL-kan bilangan asal. Bit yang ingin di-”0“-kan diwakili dengan “0“ pada data konstan, sedangkan bit lainnya diberi nilai “1“, misalnya

Instruksi ANL P1,#01111110 akan mengakibatkan bit 0 dan bit 7 dari Port 1 (P1) bernilai “0“ sedangkan bit-bit lainnya tetap tidak berubah nilai.

  • Operasi logika OR banyak dipakai untuk me-”1“-kan beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-ORL-kan bilangan asal. Bit yang ingin di-”1“-kan diwakili dengan “1“ pada data konstan, sedangkan bit lainnya diberi nilai “0“, misalnya

Instruksi ORL A,#01111110 akan mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator bernilai “1” sedangkan bit-bit lainnya tetap tidak berubah nilai.

  • Operasi logika Exclusive-OR banyak dipakai untuk membalik nilai (complement) beberapa bit tertentu dari sebuah bilangan biner 8 bit, caranya dengan membentuk sebuah bilangan biner 8 bit sebagai data konstan yang di-XRL-kan bilangan asal. Bit yang ingin dibalik-nilai diwakili dengan “1” pada data konstan, sedangkan bit lainnya diberi nilai “0”, misalnya

Instruksi XRL A,#01111110 akan mengakibatkan bit 1 sampai dengan bit 6 dari Akumulator berbalik nilai, sedangkan bit-bit lainnya tetap tidak berubah nilai.

Share Belajar Pemrograman MCS51

Like Dan Ikuti Perkembangan Belajar Elektronika

Artikel Terkait Belajar Pemrograman MCS51