Special Function Register (SFR) AT89Cx051
Random Access Memory (RAM) dalam AT89Cx051 hanya  256 byte,      hanya setengahnya yang dipakai sebagai memori-data biasa,  setengahnya lagi      dipakai untuk register-register 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 dipakai untuk menyimpan  data seperti      layaknya memori-data. Meskipun demikian, dalam hal penulisan program  SFR diperlakukan      persis sama dengan memori-data. 
Nomor  memori-data yang      disediakan untuk Special Function Register mulai dari $80       sampai dengan $FF, area sebanyak 128 byte ini  tidak semuanya      dipakai, hal ini digambarkan dalam Denah Special Function Register,  Gambar      5. Masing-masing register dalam Special Function Register  mempunyai      nomor dan nama.
Dianjurkan agar nomor-nomor  yang tidak      dipakai jangan dipergunakan, karena bisa mengakibatkan terjadinya  sesuatu      yang tidak terduga.
Sebagian register dalam Special Function  Register      sudah dibicarakan sebagai Register Dasar, merupakan piranti dasar  untuk penulisan      program. Register-register dasar tersebut antara lain       adalah Akumulator (ACC), Stack Pointer       Register (SP),      Program Status Register (PSW),  Register      B, Data Pointer High Byte (DPH)       dan Data Pointer Low Byte (DPL).       Di dalam area Special Function Register. Register-register ini diperlakukan sebagai memori dengan  nomor yang      sudah tertentu.
Akumulator menempati memori-data       nomor $E0, Stack Pointer Register  menempati      memori-data nomor $81, Program Status  Register      ada di $D0, Register B di $F0,  DPL      di $82      dan DPH di $83.
Kemampuan MCS51 untuk menomori memori-data dalam  level bit,      dipakai juga dalam Special Function Register. Secara  keseluruhan      nomor bit yang disediakan dalam MCS51 sebanyak 256, nomor bit 0  sampai 127      sudah dipakai untuk  nomor bit memori-data       nomor $20 sampai $2F, sisanya sebanyak      128 nomor dipakai di Special Function Register.
Special Function Register yang bisa  dinomori dengan      nomor bit, adalah yang mempunyai nomor memori dengan digit  heksadesimal kedua      adalah 0 atau 8, misalnya nomor $80, $88,  $90,       $98..$F0      dan $F8.
Akumulator merupakan Special Function  Register      dengan nomor $E0, sehingga semua bit dalam Akumulator       bisa di-nomor-i satu per satu.  Dalam      penulisan program bit 0 Akumulator bisa dituliskan sebagai A.0, bit 1 Akumulator ditulis sebagai A.1  dan seterusnya.      Instuksi SETB A.0 mengakibatkan      bit 0 dari Akumulator menjadi ‘1’ sedangkan      bit-bit lainnya tidak terpengaruh. Instruksi CLR       A.6      mengakibatkan bit 6 dari Akumulator menjadi ‘0’  tapi      tidak memengaruhi bit-bit yang lain.
Pengelompokan SFR
Selain register yang berfungsi sebagai  register dasar      yang sudah dibicarakan diatas, register-register dalam SFR       dipakai untuk mengatur Input/Output dari MCS51 yang dikelompokan menjadi :
 ·              Register Penampung Data Input/Output, misalnya  data      yang diisikan ke register P1 akan       diteruskan (di-output-kan) ke Port 1 yang terdapat di kaki IC  AT89Cx051. 
 ·              Register Pengatur Input/Output dan Register  Status Input/Output,      misalnya register SCON dipakai untuk      mengatur UART dan dipakai untuk memantau kondisi      UART,      register TCON dipakai untuk mengatur kerja Timer.
Uraian Singkat SFR
Berikut ini dibahas secara singkat fungsi dan  sifat masing-masing      register dalam Special Function Register, pembahasan secara  rinci akan      dilakukan dibagian lain.
P1 (Port 1, nomor $90,       bisa dinomori dengan nomor bit): merupakan sarana  input/output      port 1, masing-masing bit dalam register ini setara dengan salah  satu kaki      IC AT89Cx051. Misalnya bit 3 dari register P1  terhubung      ke kaki P1.3 (kaki nomor 15 AT89Cx051), instruksi      SETB      P1.3      mengakibatkan kaki nomor 15 tersebut menjadi ‘1’  dan instruksi      CLR P1.3 akan membuatnya menjadi ‘0’.
P3 (Port 3, nomor $B0,       bisa dinomori dengan nomor bit): merupakan sarana  input/output      port 3, masing-masing bit dalam register ini setara dengan salah  satu kaki      IC AT89Cx051. Misalnya bit 5 dari register P3  terhubung      ke kaki P3.5 (kaki nomor 9 AT89Cx051), instruksi      SETB      P3.5      mengakibatkan kaki nomor 9 tersebut menjadi ‘1’  dan instruksi      CLR P3.5 akan membuatnya menjadi ‘0’.
SBUF (Serial Buffer, nomor  $99):      Register Serial Buffer (SBUF) dipakai untuk  mengirim data      dan menerima data dengan UART yang terdapat  dalam IC AT89Cx051.      Angka yang disimpan ke SBUF akan dikirim keluar secara  seri      lewat kaki TXD (kaki nomor 3 IC AT89Cx051).  Sebaliknya      data seri yang diterima di kaki RXD (kaki nomor      2 IC AT89Cx051) bisa diambil di register SBUF. Jadi SBUF       akan berfungsi sebagai port output pada saat register ini diisi  data, dan      SBUF      akan menjadi port input kalau isinya diambil.
SCON (Serial Control, nomor  $98,      bisa dinomori dengan nomor bit):  register      SCON      dipakai untuk mengatur perilaku UART di dalam IC  AT89Cx051, hal-hal      yang diatur meliputi penentuan kecepatan pengiriman data seri (baud  rate);      mengakitpkan fasilitas penerimaan data seri (fasilitas pengiriman  data seri      tidak perlu di atur), disamping itu register ini dipakai pula untuk  memantau      proses pengiriman data seri dan proses penerimaan data seri.
TL0/TH0 (Timer 0 Low/High, nomor  $8A/$8C):      Kedua register ini bersama membentuk Timer 0, yang merupakan  pencacah naik      (count up counter). Perilaku kedua register ini diatur oleh register  TMOD       dan register TCON. Hal-hal yang bisa diatur  antara lain      adalah sumber clock untuk pencacah, nilai awal pencacah, bilamana  proses pencacahan      mulai atau berhenti,  dan lain sebagainya.
 TL1/TH1 (Timer      1 Low/High, nomor $8B/$8D): Kedua  register ini bersama      membentuk Timer 1, yang merupakan pencacah naik (count up counter).  Perilaku      kedua register ini diatur oleh register TMOD dan      register TCON. Hal-hal yang bisa diatur antara lain  adalah sumber      clock untuk pencacah, nilai awal pencacah, bilamana proses  pencacahan mulai      atau berhenti,  dan lain sebagainya.
TMOD (Timer Mode, nomor $89):       register TMOD dipakai untuk mengatur mode  kerja Timer      0 dan Timer 1, lewat register ini masing-masing  timer bisa      diatur menjadi timer 16-bit, timer 13-bit, timer 8-bit yang bisa isi  ulang      secara otomatis,  atau 2 buah timer      8 bit yang terpisah. Di samping itu bisa diatur agar proses proses  pencacahan      timer bisa dikendalikan lewat sinyal dari luar IC AT89Cx051, atau  timer dipakai      untuk mencacah sinyal-sinyal dari luar IC.
TCON (Timer Control, nomor $88,       bisa dinomori dengan nomor bit): register TCON       dipakai untuk memulai atau menghentikan proses pencacahan timer dan  dipakai      untuk memantau apakah terjadi limpahan dalam proses pencacahan.  Disamping      itu masih tersisa 4 bit dalam register TCON yang tidak  dipakai untuk mengatur      Timer, melainkan dipakai untuk mengatur sinyal interupsi yang  diterima      di INT0 (kaki nomor 6) atau INT1       (kaki nomor 7), dan dipakai untuk memantau apakah ada permintaan  interupsi      pada kedua kaki itu.
IE (Interrupt Enable, nomor $A8,       bisa dinomori dengan nomor bit): register ini  dipakai untuk      mengaktipkan atau me-non-aktipkan sarana interupsi,  bit  0 sampai bit 6 dari register IE      (IE.0..IE.6)      dipakai untuk mengatur masing-masing sumber interupsi (sesungguhnya IE.6       tidak dipakai) sedangkan IE.7 dipakai untuk  mengatur sistem      interupsi secara keseluruhan, jika IE.7 =’0’  akan      sistem interupsi menjadi non-aktip tidak mempedulikan keadaan IE.0..      IE.6.
IP (Interrupt Priority, nomor $B8,       bisa dinomori dengan nomor bit): register ini  dipakai untuk      mengatur perioritas dari masing-masing sumber interupsi.  Masing-masing sumber      interupsi bisa diberi perioritas tinggi dengan memberi nilai ‘1’       pada bit bersangkutan dalam register ini. Sumber interupsi yang  perioritasnya      tinggi bisa menginterupsi proses interupsi dari sumber interupsi  yang perioritasnya      lebih rendah. 
PCON (Power Control, nomor $87):       Register PCON dipakai untuk mengatur pemakaian daya IC  AT89Cx051,      dengan cara ‘menidurkan’ IC tersebut sehingga memerlukan arus kerja  yang sangat      kecil. Satu satu bit dalam register ini dipakai untuk menggandakan  kecepatan      pengiriman data seri (baud rate) dari UART di dalam      AT89Cx051.
Variasi dari SFR
Seperti sering disebut, MCS51 merupakan satu  keluarga IC      mikrokontroler yang terdiri dari ratusan macam IC, ratusan macam IC  tersebut      umumnya mempunyai fasilitas input/output yang berlainan. Keragaman  ini ditampung      dalam Special Function Register.
Register baku dalam keluarga MCS51, ada yang  tidak dimiliki      oleh keluarga AT89Cx051, register-register tersebut antara lain  adalah :
P0 (Port 0, nomor   $80, bisa dinomori      dengan nomor bit): merupakan sarana input/output port 0,  masing-masing      bit dalam register ini setara dengan salah satu kaki IC AT89C51.  Sifat Port      0 mirip sekali dengan sifat Port 1 dan Port 3  milik AT89Cx051.
P2 (Port 2, nomor $A0,       bisa dinomori dengan nomor bit): merupakan sarana  input/output      port 2, masing-masing bit dalam register ini setara dengan salah  satu kaki      IC AT89C51. Sifat Port 2 mirip sekali dengan sifat Port 1  dan      Port 3 milik AT89Cx051
Kaki IC AT89Cx051 hanya 20, hanya setengah dari  jumlah kaki      AT89C51, berkurangnya kaki ini mengakibatkan AT89Cx051 tidak punya Port       0 dan Port 2 dan dengan demikian juga tidak punya  register P0      dan register P2.
Di samping dipakai sebagai port input/output, Port  0      dan Port 2 bisa pula dipakai untuk saluran-data (data       bus) dan saluran-alamat (address bus)  yang      diperlukan AT89C51 untuk bisa menambah memori diluar chip.
