Program Counter dan Ruang ROM Pada MCS-51

| | Tidak ada komentar
Pada artikel ini akan dijelaskan tentang register Program Counter (PC) dalam proses menjalankan perintah pada program 8051. Disini juga akan dibahas tentang ruang (space) ROM untuk berbagai variant dari keluarga 8051.

Program Counter Pada 8051

Regsiter 8051 penting lainnya adalah PC (Program Counter). Program Couter adalah penunjuk lokasi alamat selanjutnya yang hendak dijalanakan. Setelah CPU membaca program dari ROM program, program Counter kemudian di-increment (ditambah satu bilangan) yang berarti menunjuk pada alamat byte selanjutnya dalam ROM Porgram. Program Counter pada 8051 termasuk ke dalam register 16-bit. Artinya 8051 dapat mengakses program mulai dari alamata 0000 s/d FFFFh, sehingga totalnya adalah 64 Kbytes. Namun tidak semua variant keluarga 8051 memiliki ROM program sebanyak itu di dalam chip-nya. Beberapa diantaranya hanya memiliki 2 Kbytes atau bahkan tidak sama sekali sehingga membutuhkan ROM program tambahan eksternal.

Mulai Dari Mana 8051 Bekerja Saat Pertama Dihidupkan

Pertanyan yang harus kita tanyakan mengenai setiap mikrokontroler (mikroprosesor) adalah pada lokasi mana dari ROM program, sebuah CPU mememulai tugas-tugasnya saat kita mulai menyalakannya. Setiap mikroprosesor berbeda-beda, namun pada keluarga 8051 siapapun pabrik pembuat atau penjualnya, lokasi pertama yang dijalankan oleh 8051 saat pertama dihidupkan adalah lokasi 0000. Menghidupkan atau menyalakan yang dimaksudkan disini adalah dengan memeberikan tegangan sebesar Vcc pertama kali sesuai kebutuhan pin Vcc mikrokontroler tersebut. Atau penerapan perubahan kondisi pin Reset pada mikrokontroler. Dengan kata lain, saat 8051 pertama dihidupkan Program Counter akan selalu bernilai 0000. Yang berarti bahwa pada lokasi ini opcode pertama akan dijalankan. Untuk alasan inilah setiap program dalam 8051 harus dimulai dari lokasi 0000 dan dituliskan ke dalam ROM program juga dimulai dari alamat 0000. Kita dpat memastika agar assembler memulai penyusuan kode program dari alamat tersebut dengan memberikan direvative ORG dalam program kita.

Menempatkan Program Dalam ROM Program

Untuk lebih memahami tentang peran Program Counter dalam mengambil dan mejalankan sebuah program, kita akan mengkaji aksi dari Program Counter ini. Pertama, kita mengkaji sekali lagi file List dari program contoh pada artikel sebelumnya dan melihat bagaiaman kode tersebut ditempatkan pada ROM yang terdapat dalam chip 8051. Seperti yang kita lihat, bahwa opcode dan operand untuk setiap instruksi ditampilkan pada bagian sebelah kiri file tersebut.
0000               ORG   0H       ;Mulai program di alamat 0
0000  7D25         MOV   R5,#25H  ;Isikan 25H ke dalam R5
0002  7F34         MOV   R7,#34H  ;Isikan 34H ke dalam R7
0004  7400         MOV   A,#0     ;Isikan 0 ke dalam A
0006  2D           ADD   A,R5     ;Jumlahkan isi R5 dengan A (A=A+R5)
0007  2F           ADD   A,R7     ;Jumlahkan isi R7 dengan A (A=A+R7)
0008  2412         ADD   A,#12KH  ;Jumlahkan A dengan 12H (A=A+12H)
000A  80FE  HERE:  SJMP  HERE     ;Program berputar disini
000C               END            ;Akhir dari file sumber
Setelah program ditulis (burned) ke dalam ROM internal pada keluarga 8051 (misalnya AT89C51 atau DS5000), Opcode dan operand ditempatkan pada lokasi memori ROM yang beralamat 0000 seperti yang terlihat pada daftar dibawah ini.

Alamat ROM, opcode, dan assembly

Alamat dan opcodeDaftar tersebut menunjukkan alamat 0000 berisi 7D, dimana opcodenya adalah untuk mengisikan sebuah nilai ke register R5, dan alamat 0001 berisi operand (dalam daftar, terlihat 25h) yang diisikan ke dalam R5. Sehingga instruksi "MOV R5,#25h" memiliki kode mesin "7D25" dimana 7D adalah opcode dan 25 adalah operand. Hal yang sama juga terlihat pada kode mesin 7F34 yang berlokasi di alamat 0002 dan 0003, dimana ini merupakan representasi dari instruksi "MOV R7,#34h". Termasuk juga untuk kode mesin 7400 yang berada pada alamat 0004 dan 0005 adalah representasi dari instruksi "MOV A,#0". Lokasi memori 0006 memiliki opcode 2D, dimana itu adalah opcode untuk instruksi  "ADD  A,R5" dan lokasi memori 0007 berisi 2F yang merupakan opcode untuk instruksi "ADD A,R7". Opcode dari intstruksi "ADD A,#12h" berlokasi pada alamat 0009. memory lokasi 000A berisi opcode dari instruksi SJMP. Sedangkan alamat target dari opcode SJMP tersebut berada pada alamat 000B.

Menjalankan Program Byte Demi Byte

Anggaplah program di atas telah ditulis ke dalam ROM dari Chip 8051, berikut ini adalah penjelasan langkah-langkah dari kejadian dalam 8051 setelah catu daya dipasang.
  1. Ketika 8051 dinyalakan, PC (Program Counter) memiliki nilai 0000 dan mulai membaca opcode pertama, yaitu 7D, dimana kode tersebut berarti mengisikan operand ke dalam R5. Setelah menjalankan opcode tersebut, CPU dengan bantuan PC kembali membaca lokasi ROM program berikutnya, yaitu  25, dan selanjutnya menjalankan tugasnya yakni memindahkan nilai 25 pada R5. Sekarang 1 instruksi sudah selesai. Selanjutnya Program Counter di-increment ke lokasi opcode berikutnya (ke alamat 0002). PC = 0002, dimana berisi opcode 7F, yang berarti opcode untuk instruksi "MOV R7,…".
  2. Setelah menjalankan opcode 7F, nilai 34h lalu dipindahkan ke register R7. Kemudian Program Counter di-increment ke 0004.
  3. Alamat ROM 0004 berisi opcode untuk instruksi "MOV A,#0". Instruksi ini dijalankan dan sekarang PC bernilai 0006. Perlu diingat, bahwa instruksi diatas merupakan instruksi 2-byte, yang berarti instruksi tersebut menempati dua alamat memori.
  4. Sekarang PC = 0006 yang menunjuk pada alamat opcode dari instruksi "MOV ADD A,R5". Ini adalah instruksi 1-byte. Setelah menjalankan instruksi ini, PC bernilai 0007.
  5. Alamat 0007 berisi opcode 2F, dimana opcode ini adalah milik instruksi "ADD A,R7". Ini juga termasuk dalam instruksi 1-byte. Setelah CPU menjalankan instruksi tersebut, maka PC akan di-increment lagi menjadi 0008. Hal ini terus terjadi sampai semua instruksi dilaksanakan. Faktanya bahwa PC berisi lokasi alamat dari instruksi yang akan dieksekusi. Hal tersebutlah yang menyebabkan mengapa mikroprosesor sekelas X86 menyebut program counter ini sebagai instruction pointer.

Peta Memori ROM Pada Keluaraga 8051

Seperti yang kita ketahui, beberapa dari keluarga 8051 memiliki jumlah ROM program internal hanya sebesar 4Kb, seperti 8751 dan AT89C51. Beberapa di antaranya memiliki ukuran yang lebih besar, misalnya AT89C52 yang memiliki ROM program sebanyak 8Kb. Dallas Semiconductor’s DS5000-32 memiliki ROM program internal sebesar 32Kb, ada pula yang memiliki ukuran sebesar 64Kb. Perlu diingat, karena PC pada keluarga 8051 selebar 16-bit, maka jumlah memori Program ataupun data yang bisa dialamati hanya sampai sebatas 64Kb.

Gambar rentang alamat ROM pada chip 8051
Gambar rentang alamat ROM pada chip 8051

Sumber:
1. Mazidi, Muhammad Ali., The 8051 Microcontroller and Embedded Systems - Using Assembly and C.

Tidak ada komentar

Posting Komentar