RAM dan Register dalam AT89Cx051
Bagi mereka yang sudah terbiasa memakai komputer,  kapasitas      Random Access Memory (RAM) yang dimiliki AT89Cx051 ‘mengerikan’  karena sangat      sedikit, hanya 256 byte! Itupun tidak semuanya bisa dipakai sebagai  memori      penyimpan biasa, lebih dari setengahnya merupakan memori dengan  keperluan      khusus yang biasa dikenal sebagai register. Meskipun  demikian      bagi mikrokontroler kapasitas itu sudah mencukupi.
Dalam pengertian  MCS51,      Random Access Memory dalam chip AT89Cx051 adalah memori-data,       yaitu memori yang dipakai untuk menyimpan data, sedangkan Flash  PEROM      merupakan memori penampung program pengendali AT89Cx051, dikenal      sebagai memori-program.
Karena kedua memori itu  memang dibedakan      dengan tegas, maka kedua memori itu mempunyai penomoran yang  terpisah.      Memori-program dinomori sendiri,  pada AT89C2051 mulai      dari nomor $0000 sampai $07FF.       Sedangkan memori-data yang hanya 256 byte dinomori  dari nomor      $00      sampai $FF.
Seperti terlihat dalam denah memori-data Gambar  3, memori-data      dibagi menjadi dua bagian, memori nomor $00 sampai $7F       merupakan memori seperti RAM selayaknya meskipun beberapa bagian  mempunyai      kegunaan khusus, sedangkan memori nomor $80 sampai $FF       dipakai sangat khusus yang dinamakan sebagai Special Function       Register (akan dibahas tersendiri dibagian lain). 
Memori-data nomor $00 sampai $7F       bisa dipakai sebagai memori penyimpan data biasa, dibagi menjadi 3  bagian:
 ·              Memori nomor $00 sampai $18       selain sebagai memori-data biasa, bisa pula dipakai sebagai Register  Serba      Guna (General Purpose Register).
 ·              Memori nomor $20 sampai $2F       selain sebagai memori-data biasa, bisa dipakai untuk menyimpan  informasi dalam      level bit. 
 ·              Memori nomor $30 sampai $7F       (sebanyak 80 byte) merupakan memori-data biasa, bisa dipakai untuk  menyimpan      data maupun dipakai sebagai Stack.
Register Serba Guna
Register Serba Guna (General Purpose       Register) menempati memori-data nomor $00  sampai $18,      memori sebanyak 32 byte ini dikelompokkan menjadi 4 Kelompok Register       (Register Bank), 8 byte memori dari masing-masing  Kelompok itu      dikenali sebagai Register 0, Register 1 .. Register       7 (R0,      R1,      R2,      R3,      R4,      R5,      R6      dan R7). 
Dalam penulisan program  memori-memori ini      bisa langsung disebut sebagai R0, R1,  R2,       R3,      R4,      R5,      R6      dan R7, tidak lagi dengan nomor memori. Dengan  cara ini instruksi yang terbentuk bisa lebih  sederhana dan      bekerja lebih cepat. Pengertian ini bisa diperjelas dengan contoh 2  instruksi      berikut :
MOV A,$04
MOV A,R4
Instruksi pertama mempunyai makna isi memori-data  nomor 4      di-copy-kan ke Akumulator A, sedangkan instruksi  kedua artinya      isi R4 di-copy-kan ke Akumulator A.       Karena R4 menempati memori-data nomor 4, jadi kedua  instruksi      itu berakibat sama bagi Akumulator A.     
Tapi saat diterjemahkan ke kode mesin, intruksi  pertama dirubah      menjadi E5 04      (heksadesimal) dan instruksi kedua menjadi E6  (heksadesimal),      jadi instruksi kedua lebih sederhana dari instruksi pertama.
Selain itu, khusus untuk Register 0 dan Register       1 (R0      dan R1) masih punya mempunyai kemampuan lain, kedua  register      ini bisa dipakai sebagai register penampung alamat yang dipakai  dalam penyebutan      memori secara tidak langsung (indirect memori  addressing),      hal ini akan dibicarakan lebih lanjut di belakang.
Empat kelompok Register Serba Guna itu  tidak      bisa dipakai secara bersamaan, saat setelah reset yang aktip dipakai  adalah      Kelompok Register 0 (Register Bank 0). 
Kalau yang diaktipkan adalah Kelompok Register  1,      maka yang dianggap sebagai R0 bukan lagi  memori-data nomor 0      melainkan memori-data nomor 8, demikian pula kalau yang diaktipkan Kelompok       Register 3 maka memori-data nomor 18h yang menjadi R0.
Kelompok Register yang aktip dipilih dengan cara  mengatur      bit RS0 dan RS1 yang ada di dalam  Register PSW      (Program Status Word), hal ini akan dibicarakan lebih lanjut  di bagian      lain.
Memori level Bit
Memori-data nomor $20  sampai      $2F bisa dipakai menampung informasi dalam level       bit. Setiap byte memori di daerah ini bisa dipakai menampung  8 bit      informasi yang masing-masing dinomori tersendiri, dengan demikian  dari 16      byte memori yang ada bisa dipakai untuk menyimpan 128 bit (16 x 8  bit) yang      dinomori dengan bit nomor $00 sampai $7F.
Informasi dalam level bit tersebut masing-masing  bisa di-‘1’-kan,  di - ‘0’-kan  dengan      instruksi.
Pengertian di atas bisa dipikirkan  seolah-olah MCS51      mempunyai jenis memori yang lain, tapi sesungguhnya kedua jenis  memori itu      tetap sama, hanya saja cara penyebutannya saja yang berlainan. 
Instruksi SETB       $00      mengakibatkan memori-bit nomor 0 menjadi ‘1’,  atau      sama dengan membuat bit nomor 0 dari memori-data nomor  $20       menjadi ‘1’, sedangkan bit-bit lainnya dalam memori nomor  $20       tidak berubah nilai.
Sedangkan instruksi CLR $7F       mengakibatkan memori-bit nomor $7F menjadi ‘0’,       satau sama dengan membuat bit nomor 7 dari memori-data  nomor      $2F      menjadi ‘0’, sedangkan bit-bit lainnya dalam memori nomor  $2F       tidak berubah nilai.
Pengertian ini dipertegas dengn  intsruksi-instruksi berikut:
MOV  $21,#$0F
Sama dengan hasil kerja instruksi-instruksi  berikut :
SETB $08
SETB $09
SETB $0A
SETB $0B
CLR  $0C
CLR  $0D
CLR  $0E
CLR  $0F
Instruksi MOV $21,#$0F       mempunyai makna mengisi memori-data nomor $21       dengan nilai $0F (atau bilangan biner 00001111),  berarti      mengisi memori-bit nomor $0F sampai $08       dengan bilangan biner 00001111 yang bisa dinyatakan dengan 8 baris  instruksi      berikutnya.
Special Function Register (SFR)
Register Khusus (SFR  - Special      Function Register) adalah satu daerah       RAM dalam IC keluarga MCS51 yang dipakai untuk mengatur  perilaku MCS51      dalam hal-hal khusus, misalnya tempat untuk berhubungan dengan port  paralel      P1      atau P3, dan sarana input/output lainnya, tapi tidak  umum      dipakai untuk menyimpan data seperti layaknya memori-data.
Meskipun demikian, dalam hal penulisan program SFR       diperlakukan persis sama dengan memori-data. Untuk mengisi  memori-data nomor      $60      dengan bilangan $0F, instruksi yang dipergunakan  adalah      :
MOV  $60,#$0F
Sedangkan untuk memenyimpan $0F  ke Port 1      yang di SFR menempati memori-data nomor $90,       instruksi yang dipergunakan adalah :
MOV $90,#$0F
Membandingkan kedua instruksi di atas bisa  dimengerti dalam      segi penulisan program SFR diperlakukan persis sama  dengan      memori-data.
Meskipun demikian, dalam menyebut memori-data       bisa dipakai dua cara, yakni penyebutan nomor memori secara       langsung (direct memory addressing) dan penyebutan  nomor      memori secara tidak langsung (indirect memory  addressing)      lewat bantuan R0 dan R1. Tapi untuk      SFR hanya bisa      dipakai penyebutan nomor memori secara langsung  (direct      memory addressing) saja. Hal ini akan dibahas lebih lanjut di  bagian lain.
Register Dasar MCS51
Untuk keperluan penulisan program, setiap  mikroprosesor/mikrokontroler      selalu dilengkapi dengan Register Dasar. Ada beberapa macam register  merupakan      register baku yang bisa dijumpai disemua jenis mikroprosesor/  mikrokontroler,      ada register yang spesifik  pada masing-masing  prosesor.
Yang termasuk Register Baku antara lain Program  Counter,      Akumulator, Stack Pointer Register, Program Status  Register.      MCS51 mempunyai semua register baku ini.
Sebagai register yang khas MCS51, antara lain  adalah Register      B, Data Pointer High Byte dan Data Pointer Low  Byte.      Semua ini digambarkan dalam Gambar 4.
Di samping itu MCS51 masih mempunyai Register  Serba      Guna R0..R7 yang sudah disebut dibagian  atas.
Dalam mikroprosesor/mikrokontroler yang  lain, register-register      dasar biasanya ditempatkan ditempat tersendiri dalam inti prosesor,  tapi      dalam MCS51 register-register itu ditempatkan secara terpisah. 
 ·              Program Counter ditempatkan ditempat  tersendiri      di dalam inti prosesor
 ·              Register Serba Guna R0..R7  ditempatkan di salah satu bagian dari memori-data
 ·              Register lainnya ditempatkan dalam Special  Function      Register (SFR).
Kegunaan dan pemakaian register-register dasar  tersebut antara      lain sebagai berikut:
Program Counter
Program Counter (PC)       dalam AT89C2051 merupakan register dengan kapasitas 11 bit (dalam  AT89C51      atau keluarga MCS51 lainnya kapasitas PC       adalah 16 bit). Di dalam PC      dicatat nomor memori-program yang menyimpan instruksi berikutnya  yang akan      diambil (fetch) sebagai instruksi untuk dikerjakan (execute).
Saat setelah reset PC       bernilai 0000h, berarti MCS51 akan segera mengambil isi  memori-program nomor      0 sebagai instruksi. Nilai PC      otomatis bertambah 1 setelah prosesor mengambil instruksi 1 byte.  Ada instruksi      yang hanya 1 byte, ada instruksi yang sampai 4 byte, dengan demikian  pertambahan      nilai PC      setelah menjalankan instruksi, tergantung pada jumlah byte instruksi  bersangkutan.
Akumulator
Sesuai dengan namanya, Akumulator adalah  sebuah register      yang berfungsi untuk menampung (accumulate) hasil hasil pengolahan  data dari      banyak instruksi MCS51. Akumulator bisa menampung data 8 bit (1  byte) dan      merupakan register yang paling banyak kegunaannya, lebih dari  setengah instruksi-instruksi      MCS51 melibatkan Akumulator.
Instruksi-instruksi berikut memperjelas  pengertian di atas      :
MOV A,#$20
ADD A,#$30
Instruksi pertama menyimpan nilai $20  ke Akumulator, instruksi kedua menambahkan      bilangan $30      ke Akumulator, hasil penjumlahan sebesar $50  ditampung di Akumulator.
Stack Pointer Register
Salah satu bagian dari memori-data dipakai  sebagai Stack, yaitu      tempat yang dipakai untuk menyimpan sementara nilai PC  sebelum prosesor menjalankan sub-rutin, nilai      tersebut akan diambil kembali dari Stack dan dikembalikan  ke PC saat prosesor      selesai menjalankan sub-rutin.
Stack      Pointer      Register      adalah register yang berfungsi untuk mengatur kerja stack, dalam Stack       Pointer      Register      disimpan nomor memori-data yang dipakai untuk operasi Stack berikutnya.
Program Status Word
Program Status Word (PSW)  berfungsi      mencatat kondisi prosesor setelah melaksanakan instruksi. Pembahasan  tentang      PSW secara rinci      akan dilakukan dibagian lain.
Register B
Merupakan register dengan kapasitas 8 bit,  merupakan register      pembantu Akumulator saat menjalankan instruk perkalian dan  pembagian.
DPH dan DPL
Data Pointer High Byte (DPH)  dan      Data Pointer Low Byte (DPL)      masing-masing merupakan register dengan kapasitas 8 bit, tapi dalam  pemakaiannya      kedua register ini digabungkan menjadi satu register 16 bit yang  dinamakan      sebagai Data Pointer Register (DPTR).
Sesuai dengan namanya, Register ini dipakai untuk  mengalamati      data dalam jangkauan yang luas.

0 komentar:
Posting Komentar