Dasar Pemrograman MCS51 (AT89C51, AT89S51, AT89C2051) atau keluarga mikrokontroler MCS51 Bagian Ketiga.
  
Operasi Bit dengan MCS51
Pada umumnya mikrokontroler mengolah data 8 bit sekali gus, misalnya mengisi akumulator dengan data 8 bit sekali gus,      isi akumulator yang 8 bit dijumlahkan dengan isi memori yang 8 bit dan lain      sebagainya. MCS51 dilengkapi kemampuan mengolah data per bit, untuk keperluan      ini bit Carry dalam PSW diperlakukan sebagai ‘akumulator bit’, dan dilengkapi      dengan beberapa instruksi khusus untuk operasi Boolean.
Objek operasi Bit
          Seperti sudah dibahas dibagian depan, memori-data nomor $20      sampai $2F bisa dipakai menampung informasi dalam level bit.      Setiap byte memori di daerah ini bisa menampung 8 bit informasi yang masing-masing      dinomori tersendiri, misalkan bit 0 dari memori-data nomor $20      bisa disebut sebagai bit nomor 0, bit 1 memori-data nomor $20      disebut sebagai bit nomor 1… seterusnya bit 0 dari memori-data nomor $21      disebut sebagai bit nomor 8, bit 7 memori-data nomor $21 disebut      sebagai bit nomor 15 dan seterusnyanya. 
          Dengan demikian memori-data nomor $20 sampai      dengan nomor $2F sebanyak 16 byte memori bisa dipakai      untuk menyimpan 128 bit (16 x 8 bit) data Boolean yang dinomori dengan bit      nomor $00      sampai $7F.
           Di samping itu, operasi bit bisa pula belaku di memori-data      nomor $80 sampai dengan $FF yang biasa      disebut sebagai Special Function Register (SFR). Hanya      SFR dengan nomor memori-data yang diakhiri dengan      angka heksa-desimal 0 atau 8 yang bisa dipakai untuk operasi bit, bit pada      memori-data daerah ini sebanyak 128 bit, mendapat nomor dari $80      sampai dengan $FF.
Secara keseluruhan operasi bit bisa diberlakukan pada 256      lokasi bit seperti terlihat dalam Gambar 6.
Operasi bit yang bisa ditangani oleh MCS51 antara lain mencakup      : pemberian nilai pada data biner 1 bit, perpindahan data 1 bit,      operasi logika 1 bit meliputi operasi AND,      OR      dan NOT, pengujian nilai data biner 1 bit. 
Pemberian nilai data biner
Untuk keperluan ini disediakan 2 instruksi, yakni SETB      (Set Bit) dipakai memberi nilai ‘1’ pada data biner      1 bit, dan CLR (Clear Bit) dipakai memberi      nilai ‘0’ pada data biner 1 bit.
Contoh pemakaian instruksi ini sebagai berikut :
            SETB      ACC.0
      SETB $E0
      CLR  P1.1
      CLR  $90
Instruksi SETB ACC.0      di atas membuat bit 0 dari akumulator (ACC.0)      bernilai ‘1’,  tapi      mengingat nomor bit dari bit 0 akumulator adalah $E0      (lihat Gambar 6), maka hasil kerja kedua instruksi SETB di      atas adalah sama. 
Demikian pula dengan kedua instruksi CLR      berikutnya, instruksi-instruksi ini akan mengakibatkan P1.1      bernilai ‘0’. Di samping itu perlu pula diingat, P1.1      terhubung ke kaki  IC MCS51, jadi hasil      kerja operasi SETB maupun CLR pada      P0,      P1,      P2      dan P3 bisa langsung terukur dengan volt meter, atau operasi-operasi      ini bisa langsung dipakai men-on/off-kan rangkaian di luar IC MCS51.
Perpindahan data biner
Dalam operasi bit, bit Carry di dalam Program Status      Word (PSW, nomor $D0) diperlakukan      sebagai akumulator.
256 data dalam level bit dalam MCS51, bisa dipindahkan dari      satu posisi ke posisi yang lain, permindahan ini dilakukan dengan bantuan      bit Carry yang mempunyai sifat sebagai ‘akumulator bit’.
Contoh permindahan data level bit ini bisa dilakukan sebagai      berikut :
      MOV C,P1.1
      MOV P1.0,C
2 instruksi di atas akan meng-copy-kan tegangan pada kaki      Port 1 bit 1 ke kaki Port 1 bit 0, dengan demikian tegangan      pada kedua kaki IC MCS51 itu akan sama. Seluruh 256 bit data yang dibahas      di atas, bisa dipindah-pindahkan dengan instruksi ini.
Operasi logika
Operasi logika pada umumnya mencakup empat hal, yaitu operasi      AND, operasi OR, operasi EX-OR      dan operasi NOT. MCS51 hanya bisa melaksanakan tiga      jenis operasi logika yang ada, yakni intruksi ANL (AND Logical)      untuk operasi AND instruksi ORL      (OR Logical) untuk operasi OR, CPL (Complement      bit) untuk operasi NOT.
Bit Carry pada PSW diperlakukan      sebagai ‘akumulator bit’, dengan demikian operasi AND      dan operasi OR dilakukan antara bit yang tersimpan pada      bit Carry dengan salah satu dari 256 bit data yang dibahas di atas.      Contoh dari instruksi-instruksi ini adalah :
            ANL      C,P1.1
      ANL C,/P1.2
Instruksi ANL C,P1.1      meng-AND-kan nilai pada bit Carry dengan nilai Port      1 bit 1 (P1.1), dan hasil operasi tersebut ditampung      pada bit Carry. Instruksi ANL C,/P1.1      persis sama dengan instruksi sebelumnya, hanya saja sebelum di-AND-kan,      nilai P1.1 dibalik (complemented) lebih      dulu, jika nilai P1.1=‘0’ maka      yang di-AND-kan dengan bit Carry adalah ‘1’,      demikian pula sebaliknya. Hal serupa berlaku pada instruksi ORL.
Instruksi CPL dipakai untuk membalik      (complement) nilai semua 256 bit data yang dibahas di atas. Misalnya      :
CPL      C
CPL P1.0
CPL C      akan membalik nilai biner dalam bit Carry (jangan lupa bit Carry      merupakan salah satu bit yang ada dalam 256 bit yang dibahas di atas, yakni      bit nomor $E7 atau PSW.7).
Pengujian nilai Boolean
Pengujian Nilai Boolean dilakukan dengan instruksi JUMP      bersyarat, ada 5 instruksi yang dipakai untuk keperluan ini, yakni instruksi      JB      (JUMP if bit set), JNB (JUMP if bit Not Set),      JC      (JUMP  if Carry Bit set), JNC      (JUMP if Carry Bit Not Set) dan JBC (JUMP if  Bit Set and Clear Bit).
Dalam instruksi JB dan JNB, salah      satu dari 256 bit yang ada akan diperiksa, jika keadaannya (false atau      true) memenuhi syarat, maka MCS51 akan menjalankan instruksi yang tersimpan      di memori-program yang dimaksud. Alamat memori-program dinyatakan dengan bilangan      relatip terhadap nilai Program Counter saat itu, dan cukup dinyatakan      dengan angka 1 byte. Dengan demikian instruksi ini terdisi dari 3 byte, byte      pertama adalah kode operasinya ($29 untuk      JB dan $30 untuk JNB),      byte kedua untuk menyatakan nomor bit yang harus diuji, dan byte ketiga adalah      bilangan relatip untuk instruksi tujuan.
Contoh pemakaian instruksi JB dan JNB      sebagai berikut :
            JB  P1.1,$
      JNB P1.1,$
Instruksi-instruksi di atas memantau kedaan kaki IC MCS51      Port 1 bit 1. Instruksi pertama memantau P1.1,      jika P1.1 bernilai ‘1’ maka MCS51      akan mengulang instruksi ini, (tanda $ mempunyai arti      jika syarat terpenuhi kerjakan lagi instruksi bersangkutan). Instruksi berikutnya      melakukan hal sebaliknya, yakni selama P1.1 bernilai      ‘0’ maka MCS51 akan tertahan pada instruksi      ini.
Bit Carry merupakan bit yang banyak sekali dipakai      untuk keperluan operasi bit, untuk menghemat pemakaian memori-program disediakan      2 instruksi yang khusus untuk memeriksa keadaan bit Carry, yakni      JC dan JNC. Karena bit akan diperiksa sudah      pasti, yakni bit Carry, maka instruksi ini cukup dibentuk dengan      2 byte saja, dengan demikian bisa lebih menghemat memori program.
            JC      Periksa
      JB PSW.7,Periksa
Hasil kerja kedua instruksi di atas sama, yakni MCS51 akan      JUMP ke Periksa      jika ternyata bit Carry bernilai ‘1’ (ingat bit      Carry sama dengan PSW bit 7). Meskipun sama tapi instruksi      JC      Periksa      lebih pendek dari instruksi JB PSW.7,Periksa,      instruksi pertama dibentuk dengan 2 byte dan instruksi yang kedua 3 byte.
Instruksi JBC sama dengan instruksi JB,      hanya saja jika ternyata bit yang diperiksa memang benar bernilai ‘1’,      selain MCS51 akan JUMP ke instruksi lain yang dikehendaki MCS51 akan      me-nol-kan bit yang baru saja diperiksa.
Pemakaian Instruksi operasi bit
Dengan ingtruksi-instruksi operasi bit yang ada, MCS51 bisa      dipakai untuk mengimplementasi fungsi Boolean secara langsung, sebagai contoh      persamaan Boolean berikut diimplementasikan dengan instruksi-instruksi MCS51.
Q      = ( U· ( V + W )) + ( X·/Y ) + /Z
(Catatan : /Y artinya not Y dan /Z artinya not Z).
Misalkan U V W      X      Y      dan Z masing-masing adalah besaran Boolean yang dimasukkan      ke kaki Port 1 bit 0 sampai dengan 5, sedangkan Q      merupakan besaran Boolean yang ditampilkan di Port 3 bit 0, seperti terlihat      dalam Gambar 7 berikut.
Dalam Potongan Program baris 1 sampai dengan 7, P1.0      P1.1      dan lainnya dinyatakan sebagai data bit dengan nama U, V      dan selanjutnya, penamaan ini menggunakan perintah khusus untuk assembeler      (Assembler Directive) BIT, hanya nama-nama      yang dibentuk dengan assembler-directive BIT      yang bisa dipakai untuk operasi bit.


0 komentar:
Posting Komentar