SPECIAL FUNCTION REGISTER
AT89Cx051
Oleh: Budhy Susanto
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.

Gambar 5 Denah Special Function Register
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.