BAB II : DASAR TEORI
2.11 Mikrokontroler AT89S52
2.11.3 Software Mikrokontroler AT89S52
Sebuah mikrokontroler tidak akan bekerja bila tidak diberikan program kepadanya. Program tersebut daftar apa yang harus dilakukan oleh mikrokontroler. Sebuah mikrokontroler yang telah bekerja baik dengan suatu program belum tentu akan bekerja seperti semula jika programnya diganti.
Operand dan Ekspresi
Bentuk umum semua instruksi dalam assembler MCS 51 dapat dituliskan sebagai berikut :
Jumlah operand tergantung pada tipe Mnemonic.
Simbol Assembler Khusus
Assembler telah menyediakan beberapa symbol untuk menunjukkan register tertentu sebagai operand. Tabel berikut menunjukkan simbol assembler khusus.
Simbol khusus Arti
A Akumulator R0 sampai R7 Register Serbaguna
DPTR Data pointer. Register 16 bit
PC
Program counter. Register 16 bit yang berisi alamat instruksi berikutnya yang akan dijalankan.
C Carry flag
AB
Akumulator/register B. Pasangan register untuk perkalian dan pembagian.
Tabel 2.6 Simbol Assembler Khusus
Pengalamatan Langsung
Pengalamatan langsung dilakukan dengan memberikan nilai ke suatu register secara langsung. Untuk melaksanakan hal tersebut digunakan tanda #.
MOV A,#01H : Isi akumulator dengan bilangan 01H. MOV DPTR,#$19AB : Isi register DPTR dengan bilangan 19ABH.
Pengalamatan Bit
Pengalamatan bit adalah penunjukan alamat lokasi bit baik dalam RAM internal (byte 32 sampai 47) atau bit perangkat keras. Untuk melakukan pengalamatan bit digunakan symbol titik (.), misalnya FLAGS.3, 40.5, 21H.5, dan ACC.7.
Perintah DIV AB
Bilangan biner 8 bit dalam Akumulator A dibagi dengan bilangan biner 8 bit dalam
registerB. 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.
Penambahan Satu (INC)
Proses inkremen merupakan proses penambahan satu pada sisi suatu register atau memori.
INC A : (A) ← (A) + 1
Pemakaian instruksi inkremen menghemat pemakaian memori karena instruksi INC merupakan instruksi 1 byte (tidak memakai operand).
Logika AND (ANL)
Instruksi ini melakukan proses logika AND antara suatu register dengan register, register dengan data, carry flag dengan isi suatu alamat bit, dan lain – lain. 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.
Logika NOT (Komplemen, CPL)
Instruksi ini melakukan proses logika NOT pada suatu register, carry flag, atau isi suatu alamat bit. Sebagai contoh, misalnya akumulator berisi (0101 1100)B. Instruksi CPL A
Instruksi JB / JNB / JBC
Instruksi JB (Jump on Bit Set), instruksi JNB (Jump on not Bit Set) dan instruksi JBC
(Jump on Bit Set Then Clear Bit) merupakan instruksi Jump bersyarat yang memantau nilai- nilai bit tertentu. Bit-bit tertentu bisa merupakan bit-bit dalam register status maupun kaki input mikrokontroler MCS51.
CJNE (Compare Jump If Not Equal)
Instruksi ini akan membandingkan isi register, atau isi memori dengan suatu data. Bila sama, instruksi selanjutnya yang akan dituju. Bila tidak sama, instruksi yang ditunjuk oleh label yang akan dilaksanakan. Sebagai contoh :
CJNE R0,#02H, Tak_Sama
Berarti jika R0 tidak sama dengan 02H maka instruksi akan menuju ke alamat dengan lebel Tak_Sama.
DJNZ (Decrement and Jump If Not Zero)
Instruksi ini akan mengurangi isi register atau memori dengan satu. Bila sudah 0, instruksi selanjutnya yang akan dilaksanakan. Bila belum 0, instruksi dilanjutkan ke label. Sebagai contoh :
DJNZ R1, Ulangi
Berarti jika R1 tidak sama dengan nol, setelah dikurangi 1, pelaksanaan instruksi harus melompat ke tabel ulangi.
JB (Jump If Bit Is Set)
Instruksi ini akan menguji suatu bit. Bila isinya 1, instruksi akan menuju label. Bila isinya 0, instruksi selanjutnya yang akan dieksekusi. Sebagai contoh, dalam instruksi.
JB P1.0,Ulangi
JNB (Jump If Bit Is Not Set)
Instruksi ini menguji suatu alamat bit. Bila isinya 0, eksekusi akan menuju alamat kode. Jika isinya 1, instruksi selanjutnya yang akan dilaksanakan.
JNZ (Jump If Accumulator Is Not Zero)
Instruksi ini menguji akumulator. Bila tidak sama dengan 0, eksekusi menuju alamat kode. Jika sama dengan 0, instruksi selanjutnya yang akan dilaksanaka.
Percabangan Tanpa Syarat
Instruksi ini meliputi SJMP (Short Jump) dan LJMP (Long Jump). Sebagai contoh, dalam isntruksi
SJMP Awal
Eksekusi program akan menuju label awal tanpa syarat apa pun.
Kelompok Instruksi untuk sub-rutin
Instruksi-instruksi untuk membuat dan memakai sub-rutin/modul program, selain melibatkan Program Counter, melibatkan pula Stack yang diatur oleh Register Stack Pointer.
Sub-rutin merupakan suatu potong program yang karena berbagai pertimbangan dipisahkan dari program utama. Bagian-bagian di program utama akan ‘memanggil’ (CALL) sub-rutin, artinya mikrokontroler sementara meninggalkan alur program utama untuk mengerjakan instruksi-instruksi dalam sub-rutin, selesai mengerjakan sub-rutin mikrokontroler kembali ke alur program utama.
Satu-satunya cara membentuk sub-rutin adalah memberi instruksi RET pada akhir
potongan program sub-rutin. Program sub-rutin di-’panggil’ dengan instruksi ACALL atau
LCALL.
Agar nantinya mikrokontroler bisa meneruskan alur program utama, pada saat menerima instruksi ACALL atau LCALL, sebelum mikrokontroler pergi mengerjakan sub- rutin, nilai Program Counter saat itu disimpan dulu ke dalam Stack (Stack adalah sebagian
kecil dari memori-data yang dipakai untuk menyimpan nilai Program Counter secara otomatis, kerja dari Stack dikendalikan oleh Register Stack Poiner).
Selanjutnya mikrokontroler mengerjakan instruksi-instruksi di dalam sub-rutin sampai menjumpai instruksi RET yang berfungsi sebagai penutup dari sub-rutin. Saat menerima instruksi RET, nilai asal Program Counter sebelum mengerjakan sub-rutin yang disimpan di dalam Stack, dikembalikan ke Program Counter sehingga mikrokontroler bisa meneruskan pekerjaan di alur program utama.
Instruksi ACALL dipakai untuk me-‘manggil’ program sub-rutin dalam daerah
memori-program 2 KiloByte yang sama, setara dengan instruksi AJMP yang sudah dibahas di atas. Sedangkan instruksi LCALL setara dengan instruksi LCALL, yang bisa menjangkau
seluruh memori-program mikrokontroler MCS51 sebanyak 64 KiloByte. (Tapi tidak ada instrusk SCALL yang setara dengan instruksi SJMP).
Program untuk AT89C1051 dan AT89C2051 tidak perlu memakai instruksi LCALL.
Instruksi RET dipakai untuk mengakhiri program sub-rutin, di samping itu masih ada pula instruksi RETI, yakni instruksi yang dipakai untuk mengakhiri Program Layanan Interupsi (Interrupt Service Routine), yaitu semacam program sub-rutin yang dijalankan mikrokontroler pada saat mikrokontroler menerima sinyal permintaan interupsi.
Catatan : Saat mikrokontroler menerima sinyal permintaaan interupsi, mikrokontroler
akan melakukan satu hal yang setara dengan intruksi LCALL untuk menjalankan Program Layanan Interupsi dari sinyal interupsi bersangkutan. Di samping itu, mikrokontroler juga me-‘mati’-kan sementara mekanisme layanan interupsi, sehingga permintaan interupsi berikutnya tidak dilayani. Saat menerima instruksi RETI, makanisme layanan interusi kembali
BAB III