Instruksi MCS-51 Mikrokontroller AT89S51

Gambar 2.5 Susunan Pin pada Mikrokontroller AT89S51 Keterangan fungsi-fungsi masing-masing pin adalah sebagai berikut : Pin 40 Vcc, Masukan catu daya +5 volt DC Pin 20 Gnd, Masukan catu daya 0 volt DC Pin 32-39 P0.0-P0.7, Port inputoutput delapan bit dua arah yang juga dapat berfungsi sebagai bus data dan bus alamat bila mikrokontroler menggunakan memori luar eksternal. Pin 1-8 P1.0-P1.7, Port inputoutput dua arah delapan bit dengan internal pull up. Pin 10-17 P3.0-P3.7Port inputoutput delapan bit dua arah, selain itu Port 3 juga memiliki alternativef fungsi sebagai : RXD pin 10 Port komunikasi input serial TXD pin 11 Port komuikasi output serial INT0 pin 12 Saluran Interupsi eksternal 0 aktif rendah INT1 pin 13 Saluran Interupsi eksternal 1 aktif rendah T0 pin 14 Input Timer 0 T1 pin 15 Input Timer 1 WR pin 16 Berfungsi sebagai sinyal kendali tulis, saat prosesor akan menulis data ke memori IO luar. RD pin 17 Berfungsi sebagai sinyal kendali baca, saat prosesor akan membaca data dari memori IO luar. Pin 9 RESET, Pin yang berfungsi untuk mereset mikrokontroller AT89S51 ke keadaan awal. Pin 30 ALE Address Latch Enable, berfungsi menahan sementara alamat byte rendah pada proses pengalamatan ke memori eksternal. Pin 29 PSEN Program Store Enable, Sinyal pengontrol yang berfungsi untuk membaca program dari memori eksternal. Pin 31 EA, Pin untuk pilihan program, menggunakan program internal atau eksternal. Bila ‘0’, maka digunakan program eksternal. Pin 19 X1, Masukan ke rangkaian osilator internal. Sumber osilator eksternal atau quartz crystal kristal dapat digunakan. Pin 18 X2, Masukan ke rangkaian osilator internal, koneksi quartz crystal atau tidak dikoneksikan apabila digunakan eksternal osilator.

2.4.2 Instruksi MCS-51

Pengalamatan adalah pengelompokkan berdasarkan orientasi lokasi memori, tipe- tipe instruksi adalah pengelompokkan berdasarkan fungsi instruksi. Beberapa fungsi pada instruksi MCS-51 yang akan digunakan yaitu Aritmatika, Transfer data,dll. Pada table- tabel perlu dijelaskan arti dari simbol-simbol yang digunakan pada mnemonics sebagai berikut : Rn Register serbaguna R0 sd R7 di register bank yang diseleksi oleh PSW. Direct 8 bit alamat internal RAM 0-127 atau SFR 128-255 Rn lokasi internal RAM yang alamatnya ditunjukkan oleh R0 atau R1 pengalamatan tak langsung dengan R0 sd R7. Perhatikan; tidak untuk R2, R3, R4, R5, R6, dan R7 Data konstanta 8 bit Data 16 konstanta 16 bit Addrl1 alamat 11 bit untuk akses memori hingga 2K Addr16 alamat 16 bit untuk akses memori hingga 64K Rel 8 bit offset relative bertanda 2’S complement, digunakan untuk SJMP, lompat dalam jangkauan 128 mundur hingga +127 maju Instruksi-instruksi diperlihatkan disajikan pada table 2.5, yang menunjukkan ragam pengalamatan yang dapat digunakan dengan masing-masing instruksi. Tabel 2.1 Instruksi Aritmatika Mnemonic Diskripsi ADD A, source A=A+source ADDC A, source A=A+source+C SUBB A, source A=A-source-C INC A A=A+1 INC source source=source+1 DEC A A=A-1 DEC source source=source-1 INC DPTR DPTR=DPTR+1 MUL AB AB = A X B DIV AB A = Hasil AB; B = sisa AB DA A Decimal Adjust Source sumber adalah operand dengan ragam pengalamatan; register direct, indirect atau immediate. Contoh program penjumlahan pada ragam pengalamatan untuk instruksi aritmatika seperti berikut ini : ADD A, 7FH ;a diisi dengan a+isi dri memori lokasi 7FH ;pengalamatan langsung ADD A, R1 ;a diisi dengan a+isi dari memori yang alamatnya ; disimpan di R1 pengalamatan tak langsung ADD A, R7 ;a diisi dengan a+isi dari R7 ADD A, 127 ;a diisi dengan a+127 pengalamatan segera Untuk penggunaan kristal 12 MHz, kebanyakan instruksi aritmatik dieksekusi dalam 1 µs kecuali instruksi INC DPTR yang memerlukan waktu 2 µs dan instruksi- instruksi perkalian dan pembagian yang memerlukan waktu 4 µs. Data didalam memori internal dapat dinaikkan atau diturunkan increment atau decrement, tanpa melalui akumulator , demikian juga pada DPTR yang digunakan untuk menghasilkan pengalamatan 16 bit di memori eksternal. Instruksi MUL AB mengalikan dengan data yang ada pada register B dan meletakkan hasil 16 bit ke dalam register A dan B. Register A berisi lo-byte dan register B berisi hi-byte. Bila hasilnya lebih besar dari 255 0FFh, maka bit OV set, sedangkan bit C selalu akan diclearkan ‘0’. Instruksi DIV AB membagi isi akumulator dengan data dalam register B dan meletakkan hasil bagi quotient 8 bit dalam akumulator, dan sisanya remainder 8 bit dalam register B. Operasi DIV akan membuat bit-bit CY dan OV menjadi ‘0’. MOV adalah proses move pindahkan data dari sumber ke tujuan yang sebenarnya adalah proses mengcopy, artinya data di sumber tidak berubah. Proses data transfer yang lain adalah PUSH dan POP, XCH dan XCHD seperti yang diperlihatkan pada tabel 2.6. Tabel 2.2 Data Transfer Mnemonic ARTI MOV dest,source dest=source, memori int MOV DPTR,data 16 Dptr = data16 MOVC A,A+base- reg A = isi dilokasi A+base-reg MOVX dest,source dest=source,data mem PUSH direct Simpan data ke memori stack POP direct Ambil data dari memori stack MOVdest,source adalah copy data dari source ke destination, atau sumber ke tujuan, semua memori internal dan SFR dapat berlaku sebagai source dan sebagian besar dapat berlaku sebagai destination. Ragam pengalamatan dari kedua operand bisa semua kombinasi, berikut contoh proses transfer data. ;keadaan awal isi RAM dengan alamat 30h adalah ;40h, lokasi 40h berisi 10h, P1 berisi 11001010b Mov R0,30h ;R0 berisi 30h Mov A,R0 ;A berisi 40h Mov R1,A ;R1 berisi 40h Mov B,R1 ;B berisi 10h Mov R1,P1 ;RAM lokasi 40h berisi 11001010b Mov P2,P1 ;P2=P1=11001010b Program asembler bersifat sekuensial, seperti pada program basic klasikawal mula basic, dan biasanya diperlukan pencabangan untuk tujuan tertentu, yaitu lompat ke lokasi instruksi dengan alamat tertentu. Pencabangan ini terdiri dari: pelaksanaan subrutin, pencabangan tanpa syarat dan bersyarat. Subrutin adalah penggal program yang sering digunakan, tanpa harus menulis ulang perintahnya. Proses ACALL dan LCALL menggunakan memori stack untuk menyimpan data-data alamat yang ditinggalkan sebelum melaksanakan subrutin, agar apabila kembali melaksanakan subrutin, mikrokontroller ingat lokasinya kembali. Berikut tabel pencabangan program. Tabel 2.3 Pencabangan Program Mnemonic ARTI ACALL addr11 dest=source, memori int LCALL addr16 Dptr = data16 RET A = isi dilokasi A+base-reg SJMP rel Lompat maju atau mundur sejauh rel JMP A+DPTR Lompat ke alamat a+dptr CJNE dest-byte,scr- byte,rel Bila destsource lompat sejauh rel CJNE A,data,rel Bila Adata lompat sejauh rel DJNZ direct, rel Direct= direct-1,bila 0 lompat sejauh rel NOP No Operation, tidak ada operasi Pencabangan bersyarat adalah lompat ke alamat tertentu bila persyaratan terpenuhi. Secara umum perintahnya adalah : CJNE dest-byte,src-byte, rel; artinya Compare destination byte dan source byte, Jump if Not Equal along relactive. Source byte adalah A, yang dibandingkan dengan destination byte berupa direct memory atau immediate constant. Source dapat juga berupa direct Rn atau indirect Rn yang dibandingkan dengan immediate constant. START : CJNE A,040h, LABEL1 ;bandingkan dengan 40h, jika tak ;sama lompat ke LABEL1 CJNE A,P1,LABEL1 ;bandingkan a dengan P1, jika tak ;sama lompat ke LABEL1 CJNE R1,040h,LABEL1 ;bandingkan R1 dengan 40h, jika ;tak sama lompat ke LABEL1 CJNE R1,0CCh,LABEL1 ;bandingkan indirect R1 dengan ;CCh,jika tak sama lompat ke ;LABEL1 LABEL1: ----- ----- Instruksi DJNZ direct, rel, adalah : Decrement Jump if Not Zero, artinya kurangi satu dahulu data di direct, kemudian bila isinya nol, maka lomatlah ke rel. Biasanya instruksi ini digunakan untuk pencacah. Berikut contoh penggunaan instruksi tersebut ; START : Mov R0,5 ;isi R0 dengan 5 Mov R1,40h ;isi R1 dengan 40h LOOP: Mov R1,0AAh ;isi memori di R1 dengan AAh Inc R1 ;R1=R1+1 DJNZ R0,LOOP ;R0=R0-1, jika belum 0 kembali ke LOOP Sjmp :usai Perintah diatas adalah mengisi memori lokasi 40h,41h,42h,43h dan 44h dengan data AAh, disini R0 digunakan sebagai pencacah sebanyak 5 kali, sedangkan R1 digunakan sebagai pointer memori dengan alamat awal 40h. Perintah SJMP memerintahkan mikrokontroller untuk melompat ke tempat yang sama, artinya looping ditempat. Instruksi NOP adalah tidak memerintahkan MCU mengerjakan apa-apa, proses ini hanya menunda kerja mikrokontroller, karena satu instruksi NOP memakan 1 mikrodetik, sehingga beberapa perintah NOP bisa digunakan untuk proses penundaan atau delay.

2.4.3 Register Fungsi Khusus Special Function Register