Pada umumnya mikrokontroller 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.
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 SETBACC.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 ANLC,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.1persis sama dengan instruksi sebelumnya, hanya saja sebelum di-AND-kan, nilai P1.1dibalik (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 diatas. Misalnya :
CPL C
CPL P1.0
CPLC 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 bias lebih menghemat memori program.
JC Periksa
JB PSW.7,Periksa
Hasil kerja kedua instruksi di atas sama, yakni MCS51 akan JUMP ke Periksajika ternyata bit Carry bernilai ‘1’ (ingat bit Carry sama dengan PSW bit 7). Meskipun sama tapi instruksi JCPeriksa lebih pendek dari instruksi JBPSW.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).
Dalam Potongan Program baris 1 sampai dengan 7, P1.0P1.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