BAB II
MIKROKONTROLER AT89C51

2.1. PERANGKAT KERAS MIKROKONTROLER
Perbedaan antara mikrokomputer, mikroprosesor,dan mikrokontroler adalah sebuah mikroprosesor tersusun dari beberapa bagian salah satunya adalah CPU (Central Processing Unit) dari sebuah komputer, tanpa memori, I/O dan antarmuka yang dibutuhkan suatu sistem komputer yang lengkap. Untuk dapat bekerja mikroprosesor tersebut memerlukan perangkat pendukung yang berupa memori (RAM dan ROM).
Mikrokontroler terdiri atas prosesor, memori (RAM dan ROM), dan Port I/O, yang dibuat dalam bentuk sebuah chip atau IC (Intergrated Circuit), yang menghasilkan Single  Chip Microcomputer (SCM) untuk membedakan dengan mikrokomputer. Untuk selanjutnya SCM dapat disebut dengan mikrokontroler.
Perbedaan yang nyata antara mikrokomputer dengan mikrokontroler yaitu pada mikrokomputer masih diperlukan perangkat pendukung lainnya seperti memori dan perangkat antarmuka I/O sedangkan pada mikrokontroler sudah terdapat RAM dan interface I/O pendukung dalam satu chip, sehingga mikrokontroler tidak memerlukan perangkat pendukung lainnya.
2.1.1. Arsitektur Mikrokontroller AT89C2051
 Mikrokontroler AT89C2051 merupakan penyederhanaan dari mikrokontroller MCS-51komponen  dasar yang membentuk sebuah sistem mikrokontroler yang fleksibel. Berikut dapat diuraikan komponen yang merupakan komponen dasar sebuah mikrokontroler. Adapun komponen mikrokontroler AT89C51 yaitu:
1.  CPU (Central Processing Unit)
Unit pengolah pusat (Cental processing Unit) merupakan bagian penting untuk memproses dan mengendalikan seluruh kinerja dari mikrokontroler. CPU terbagi menjadi dua bagian utama, yaitu Unit Pengendali (Control Unit) serta Unit Arithmatika dan Logika (Arithmatic Logic Unit). Fungsi utama Unit Pengendali adalah mengambil, mengkode dan mengendalikan serta melaksanakan urutan instruksi sebuah program yang tersimpan dalam memori. Unit ini juga mengendalikan dan mengatur sinyal pengendali yang diperlukan untuk menyerempakkan operasi, juga aliran dan instruksi program. Sedangkan Unit Arithmatika dan Logika berfungsi untuk memproses semua perintah aritmatika dan logika yang masuk ke dalam CPU.
2.  Bus Alamat (Address Bus)
Mikrokontroler  alamat yang difungsikan untuk mengalamati setiap alat yang terpasang pada mikrokontroler. Alamat diperlukan untuk menghindari terjadinya dua alat yang bekerja secara bersamaan dalam satu waktu sehingga memungkinkan terjadinya kesalahan atau kerusakan. Memori yang terpasang pada mikrokontroler, baik RAM maupun ROM, juga mempunyai alamat. RAM 8 Kbyte memiliki 8 x 1024 alamat, dimana setiap alamat dapat disi data 1 byte.
3. Data
CPU mikrokontroker AT89C51 adalah prosesor 8 bit. Lebar bus data adalah 8 bit sehingga memerlukan 8 pena (D0…D7). Pena untuk bus data dimultipleks dengan alamat A0…A7 pada port 0. Karena itu port 0 sering kali ditulis sebagai AD0…AD7. 
4. Pengendali
Bus alamat dan bus data pada mikrokontroler AT89C51 dilengkapi dengan bus kendali (Control Bus). Guna pengendali ini adalah menyerempakan operasi mikrokontroler dengan operasi rangkaian luar.
5.  ROM (Read Only Memory)
Pada mikrokontroler tempat menyimpan program adalah ROM / EPROM. Memori untuk mikrokontroler AT89C51 terbagi menjadi 3 bagian yaitu register internal, memori utama dan memori massal (Mass Memory). Register internal adalah memori yang terdapat di dalam ALU. Waktu akses register sangat cepat, umumnya kurang dari 100 ns. Memori utama adalah memori suatu sistem. Ukurannya berkisar antara 4 Kb sampai 64 Kb. Waktu aksesnya lebih lambat dibanding register internal, yaitu antara 200 sampai 1000 ns. Memori massal dipakai untuk penyimpanan berkapasitas tinggi, biasanya berbentuk disket, pita maknetik atau kaset.
6.  RAM (Random Access Memory)
RAM (Random Access Memory) adalah memori yang dapat dibaca atau ditulis. Data dalam RAM akan terhapus (Volatile) bila catu daya dimatikan. Karena sifat RAM yang volatile ini, maka program mikrokontroler tidak disimpan dalam RAM, tapi digunakan untuk menyimpan data sementara.

2.1.2. Arsitektur Mikrokontroler AT89C51
Mikrokontroler AT89C51 adalah mikrokontroler 8 bit menggunakan desain PEROM (Programmable Erasable Read Only Memory) dari keluaran Intel MCS-51. Mikrokontroler AT89C51 memiliki beberapa kelebihan, yaitu :
1.	CPU 8 bit dengan register-register A dan B.
2.	Program Counter (PC) dan Data Pointer (DPTR) 16 bit.
3.	Program Status Word (PSW) 8 bit.
4.	Stack Pointer (SP) 8 bit.
5.	ROM internal atau EPROM internal (8751) dengan kapasitas mulai dari 0 (8031) sampai 4K (8051).
6.	RAM internal dengan kapasistas 128 byte, yang terdiri dari:
-	4 register bank, masing-masing bank terdiri atas 8 register.
-	16 byte yang dapat dipetakan dalam bit level.
-	80 byte general purpose data memori.
7.	32 pena input/output yang terbagi dalam 4 port 8 bit (P0…P3).
-	8 pena P0.0  sampai P0.7
-	8 pena P1.0 sampai P1.7
-	8 pena P2.0 sampai P2.7
-	8 pena P3.0 sampai P3.7
8.	2 buah timer /counter 16 bit yaitu Timer 0 dan Timer 1.
9.	Full Duplex serial data receiver/transmitter : SBUF.
10. Register-register kendali: TCON, TMOD, SCON, PCON, IP dan IE.
11. Eksternal dan internal sumber interupsi.
12. Oscillator dan rangkaian detak.
Adapun diagram blok mikrokontroler AT89C51 diperlihatkan pada gambar 2.1. Untuk konfigurasi kaki-kaki mikrokontroler AT89C51 diperlihatkan pada gambar 2.2. Berikut ini penjelasan tentang kaki-kaki mikrokontroler AT89C51:
1.	Pena 1 sampai 8 (PORT 1) 
Terdiri dari 8 bit I/O dengan pull-up internal, keluaran dapat mensuplai 4 gerbang TTL masukkan, bila port 1 ditulis dengan FFH (1 semua), maka impendasi tinggi. Sebagai port masukan internal pull-up, maka secara internal bisa ditarik ke bawah dengan arus sumber, port ini dapat menerima alamat orde bawah selama pemrograman dan vertifikasi flash.
2.	Pena 9 (RESET) 
Adalah masukan reset (aktif tinggi). Pulsa transmisi dari rendah ke tinggi akan mereset mikrokontroler AT89C51. Pena ini dihubungkan dengan rangkaian power on reset.
3.	Pena 10 sampai 17 (PORT 3) 
Adalah port parallel 8 bit dua arah yang memiliki fungsi pengganti. Fungsi pengganti meliputi TxD (Transmitted Data), RxD (Received Data), INT0 (Interrupt 0), INT1 (Interrupt 1), T0 (Timer 0), T1 (Timer 1), WR (Write) dan RD (Read). Bila fungsi pengganti tidak dipakai, pena-pena ini dapat dipakai sebagai port parallel 8 bit serbaguna.
4.	Pena 18 (XTAL1) 
Adalah pena masukan ke rangkaian osilator internal. Sebuah osilator kristal atau sumber osilator luar dapat digunakan.
5.	Pena 19 (XTAL2) 
Adalah pena keluaran ke rangkaian osilator internal. Pena ini dipakai dengan menggunakan osilator kristal.
6.	Pena 20 (GROUND) dihubungkan ke Vss (Ground).
7.	Pena 21 sampai 28 (PORT 2) 
Terdiri 8 bit port masukan/keluaran dua arah I/O dengan internal pull-up, dapat dibebani 4 gerbang TTL, port 2 berfungsi sebagai alamat orde tinggi selama proses pengambilan program dari memori eksternal dan selama mengakses eksternal data memori dengan alamat 16 bit.
8.	Pena 29 (PSEN) 
Adalah Program Strobe Enable, strobe baca pada eksternal program memori. 
9.	Pena 30 (ALE) 
Adalah Address Latch Enable, prinsip kerja seperti ALE pada beberapa jenis mikroprosesor Intel yaitu digunakan untuk proses demultipleksing alamat dan data. Address Latch Enable dipergunakan untuk menempatkan alamat rendah selama mengakses memori eksternal (pin bit tinggi). Apabila bit rendah, akan mengfungsikan pulsa program selama flash programming. Pada operasi normal, ALE berjalan konstan pada kecepatan 1/6 frekuensi osilator sehingga dapat pula digunakan untuk external timer atau fungsi-fungsi clock. Catatan: bahwa ada sebuah pulsa ALE yang tidak digunakan selama mengakses data eksternal.
10.	Pena 31 (EA) 
Adalah External Access Enable, *EA aktif rendah digunakan untuk mengambil kode dari eksternal pada program memori mulai alamat 0000H-FFFFH. *EA harus diletakkan pada Vpp apabila menggunakan internal program execution.

11.	Pena 32 sampai 39 (PORT 0) 
Tersusun 8 bit Open Drain Bidirectional I/O, apabila semua data pada port ini diset 1, maka pin-pin tersebut dapat digunakan sebagai masukan berimpedansi tinggi, dapat dikonfirmasikan sebagai bus alamat/data orde rendah termultipleks untuk mengakses program/data pada memori eksternal. Pada mode ini port 0 memiliki rangkaian pull-up internal.
12.	Pena 40 (VCC) dihubungkan ke Vcc (+5 volt).     

PORT 0
DRIVERS

PORT 2
DRIVERS

PORT 0
LATCH

PORT 2
LATCH

FLASH

RAM

RAM ADDRESS REGISTER

REGISTER

ACC

TMP2

STACK
POINTER

TMP1

PROGRAM
ADDRESS
REGISTER

BUFFER

INCREMENT

PROGRAM COUNTER

DPTR

INTERUPT SERIAL
PORT AND TIMER
BLOCK

PORT 3
LATCH

PORT 1
LATCH

PORT 1
DRIVERS

PORT 3
DRIVERS

TIMING
AND
CONTROL

INSTRUCTION
REGISTER

PSW

OSC

ALU

P0.0 – P0.7

P2.0 – P2.7

P1.0 – P1.7

P3.0 – P3.7

                                                            

Gambar 2.1. Blok Diagram Mikrokontroler AT89C51

Gambar 2.2. Susunan Pena (Kaki) Mikrokontroler AT89C51
2.1.3. Organisasi Memori AT89C51
Semua produk mikrokontroler Flash AT89C51 dari Atmel memiliki ruang alamat memori data dan program yang terpisah, sebagaimana ditunjukan pada gambar 2.4 Pemisahan memori program dan data tersebut membolehkan memori data diakses dengan alamat 8-bit, sehingga dapat dengan cepat dan mudah disimpan dan dimanipulasi oleh CPU 8-bit. Namun demikian, alamat memori data 16-bit bisa juga dihasilkan memlalui register DPTR.

Gambar 2.3. Blok diagram inti Dari AT89C

Gambar 2.4 . Struktur memori AT89C51

Memori program hanya dapat dibaca, tidak dapat ditulis karena tersimpan dalam EPROM. Memori program sebesar 64 K dapat dimasukan dalam EPROM eksternal. Dan semua mikrokontroler yang termasuk dalam jenis MCS-51 memiliki pembagian ruang (Address Space) untuk program dan data. Pemisahan memori program dan memori data memperbolehkan memori data untuk diakses oleh alamat 8 bit. Sekalipun demikian alamat data memori 16 bit dapat dihasilkan melalui register DPTR (Data Ponter Register).
Sinyal PSEN mengijinkan pembacaan data dari program eksternal. Memori data terletak pada ruang alamat yang terpisah dari memori program. RAM eksternal 64 K dapat dialamati dalam ruang memori data eksternal. Mikrokontroler AT89C51 memiliki 5 ruang alamat yaitu :
1.	Ruang alamat kode (Code Address Space) sebanyak 64 K, yang seluruhnya merupakan ruang alamat kode eksternal (off chip).
2.	Ruang alamat data internal yang dapat dialamati secara langsung, yang terdiri atas RAM sebanyak 128 byte dan register perangkat keras (Hardware Register) sebanyak 128 byte.
3.	Ruang alamat data internal yang dialamati secara tidak langsung sebanyak 128 byte, seluruhnya dialamati dalam pengalamatan tidak langsung.
4.	Ruang alamat data eksternal sebanyak 64 Kbyte (off chip) yang dapat ditambahkan oleh pemakai.
5.	Ruang alamat bit. Dapat diakses dengan pengalamatan langsung.
A.   Memori Program
Setelah direset CPU memulai eksekusi dari lokasi 0000H. Setiap ditempatkan pada sebuah lokasi tertentu didalam program memori. Interupsi menyebabkan CPU melompat ke lokasi tersebut, ketika interupsi mulai mengeksekusi routine layanan. Sebagai contoh interupsi eksternal 0 ditempatkan pada alamat atau lokasi 0003H. Jika interupsi eksternal 0 akan digunakan, routine layanan harus memulai pada alamat 0003H. Lokasi-lokasi layanan interupsi memerlukan interval ruang sebanyak 8 byte : 0003H untuk interupsi eksternal 0, 000BH untuk timer 0, 0013H untuk interupsi eksternal 1, 001BH untuk timer 1 dan sebagainya. Jika sebuah layanan interupsi cukup pendek, maka interupsi dapat menempati seluruh interval sebanyak 8 byte. Routine layanan yang lebih panjang menggunakan sebuah instruksi loncat untuk melewati lokasi interupsi yang berikut jika interupsi lain sedang digunakan. 
Pada gambar 2.5 ditujukan pemetaan bagian bawah dari memori program. Setelah reset maka CPU segera mengerjakan program mulai dari lokasi 0000h.

Gambar 2.5. Memori program
Sebagaimana ditunjukan pada gambar 2.5, masing-masing interupsi disimpan pada lokasi yang sudah tetap dalam memori program. Sebuah interupsi menyebabkan CPU melompat ke lokasi interupsi yang bersangkutan, yaitu letak yang disubrutin layanan interupsi tersebut. Misalnya, External Interrupt 0 disimpan pada lokasi 0000h, jika interupsi ini digunakan maka layanan rutin interupsi ini harus dituliskan pada lokasi ini, jika tidak maka loksi tersebut bisa dipakai sebagai memori program serbaguna (untuk keperluan lainnya).   
	Lokasi-lokasi layanan interupsi tersebut menempati lokasi-lokasi dengan jarak 8-byte : 0003h untuk External Interrupt 0, 000Bh untuk Timer 0, 0013h untuk External Interrupt 1, 001Bh untuk Timer 1 dan seterusnya. Jika suatu rutin layanan interupsi sangat pendek (kurang dari 8-byte) , maka seluruh rutin dapat disimpan pada lokasi yang bersangkutan (sesuai dengan interupsi yang digunakan). Jika terlalu panjang (lebih atau sama dengan 8-byte), maka harus digunakan suatu perintah lompat ke lokasi rutin interupsi yang sebenarnya (di lokasi lain dalam memori program).
	Alamat-alamat yang paling bawah dari memori program dapat berada dalam Flsh on-Chip maupun memori eksternal (perhatikan gambar 2.5). Untuk melakukan hal ini lakukan pengkabelan pada pin EA atau External Acces ke Vcc (akses internal) atau GND (akses eksternal) sesuai dengan kebutuhan. Misalnya , dalam AT89C51 dengan Flash on-Chip sebesar 4 Kbyte. Jika EA disambungkan ke Vcc, pengambilan (fetching) intruksi pada lokasi 0000h hingga 0FFFh untuk memori internal. Sedangkan pengambian instruksi untuk memori eksternal pada lokasi 1000h hingga FFFFh. 
	Jika EA = GND, maka pengambilan semua intruksi langsung dilakukan pada memori eksternal. Tanda baca ke memori eksternal, PSEN digunakan untuk semua pengambilan program ekstertnal. Sedangkan pengaksesan intruksi pada memori internal tidak melibatkan PSEN. Suatu konfigurasi perngkat keras untuk eksekusi program eksternal ditunjukan pada gambar 2.6. Terlihat bahwa 16 jalus I/O (melalui port 0 dan 2) didedikasikan sebagai bus data maupun alamat. Port 0 (P0 pada gambar 2.1) sebagai bus alamat/data yang dimultipleks, yang mengirimkan byte rendah dari pencacah program PCL (Program Counter Low) sebagai suatu alamat kemudian berubah dalam kondisi mengambang (float) selama menunggu datang byte kode dari memori program (eksternal). Saat byte rendah pada pencacah program sah di P0, sinyal ALE (Addares Latch Enable) meng-clock byte ini kesuatu pengunci alamat (Addres Latch), sementara itu, Port 2 (P2 dalam gambar 2.1) mengirimkan byte tinggi dari pencacah program PCH (Program Counter High). Kemudian PSEN memberikan tanda pada memori eksternal dan mikrokontroler membaca byte tersebut.

Gambar 2.6. Eksekusi dari memori Program eksternal
	Alamat memori program panjangnya selalu 16-bit, walaupun demikian, jumlah memori program yang digunakan bisa kurang dari 64 Kbyte. Eksekusi program eksternal mengorbankan dua port 8-bit (P0 dan P2), karena kedua port tersebut berfungsi sebagai jalur pengalamatan dan atau pengiriman intruksi dari memori eksternal.
b.    Memori Data
Bagian kanan dari gambar 2.4 menampilkan ruang-rung memori data internal dan eksternal yang tersedia  pada mikrokontroler Flash dari Amtel. Pada gambar 2.7 ditunjukan suatu konfigurasi perangkat keras untuk mengakses RAM hingga 2 Kbyte. Dalam hal ini, CPU mengeksekusi intruksi pada Flash internal. Port 0 bertindak sebagai bus alamat/data yang termultipleks ke RAM dan 3 jalur pada port 2 digunakan untuk menghalamani RAM. CPU menghasilkan sinyal-sinyal RD dan WR sesuai kebutuhan selama pengaksesan RAM eksternal.
Memori data eksternal dapat ditentukan hingga 64 Kbyte. Alamat memori data eksternal bisa 1 atau 2 byte. Alamat satu-byte sering digunakan membantu satu atau lebih jalur I/O dalam penghalamanan RAM, sebagaimana ditunjukan pada gambar 2.7. Alamat dua-byte dapat dipakai dalam kasus jika byte alamat tinggi dikirim melalui port 2.
Memori data internal ditunjukan pada gambar 2.8. Ruang memori dibagi menjadi tiga blok, yang dikenal sebagai 128 bawah (lower 128), 128 atas (upper 128) dan Register Fungsi Khusus (Special Function Register = SFR).
	
Gambar 2.7 . Pengaksesan memori data eksternal

Jika memori programnya internal, maka P2 bisa digunakan sebagai jalur I/O.

Gambar 2.8.  Memori Data Internal

Alamat memori data internal selalu 8-bit atau 1-byte, yang konsekuesinya hanya mampu mengalamati hingga 256 byte saja. Namaun demikaian, mode-mode pengalamatan RAM internal faktanya bisa mengakomodasi hingga 384 byte. Pengaksesan langsung (Direct Addressing) dengan alamat diatas 7Fh mengakses suatu memori, sedangkan pengaksesan tak langsung (Indirect Addressing) dengan alamat diatas 7Fh mengakses ruang memori lain yang berbeda (perhatikan gambar 2.9). Sehingga memperlihatkan 128 atas dan SFR menempati blok yang sama 80h hingga FFh, walaupun secara fisik terpisah
Pada gambar 2.9 ditunjukan bagaimana bagian RAM 128 byte bawah dipetakan. 32 byte bawah dikelompokan menjadi 4 bank dan 8 register (R0 hingga R7). Dua bit pada PSW (Program Satus Word) digunakan untuk memilih kelompok register mana yang digunakan. Arsitektur ini membolehkan penggunaan ruang kode secara lebih efisien, karena instruksi-instruksi register lebih pendek daripada instruksi-instruksi yang menggunakan pengalamatan langsung. 16 byte berikutnya, diatas bank-bank register (lihat gambar 2.9), membentuk suatu blok ruang memori yang bisa teralamati per-bit (Bit Addressable). Kumpulan instruksi mikrokontroler ini memiliki berbagai pilihan instrksi-instruksi bit-tunggal dan instruksi-instruksi ini mampu sacara langsung mengalamati 128 bit dalam area ini. Alamat-alamat bit ini adalah 00h hingga 7Fh.

Gambar 2.9. 128 Byte rendah dari RAM Internal

2.1.4.  PSW (Program Status Word)
Program Status Word atau PSW berisi bit-bit status yang berkaitan dengan kondisi CPU saat itu. PSW, sebagaimana ditunjukan pada gambar 1.10, berada dalam ruang SFR. Status yang tersimpan dalam PSW meliputi : Carry bit, the auxiliary carry (untuk oerasi BCD), dua bit pemilih bank register, overflow flag, sebuah bit paristas dan dua buah flag status yang bisa didefinisikan sendiri (User Definable).
Carry bit, selain sebagai status bit sisa (carry) pada operasi-operasi aritmatika, juga bisa digunakan sebagai “akumulator” untuk beberapa operasi Boolean. Bit-bit RS0 dan RS1 digunakan untuk memilih salah satu dari empat bank register, sebagaimana ditunjukan pada gambar 2.10. Beberapa instruksi merujuk lokasi-lokasi RAM ini sebagai R0, R1, R2, hingga R7, status dari RS0 dan RS1 menentukan bank register mana yang digunakan selama eksekusi progaram yang bersangkutan.

Gambar 2.10. Register PSW dalama Mikrokontroler AT89C51 Atmel

Bit paritas (Parity Bit) menentukan cacah logic “1” dalam akumulator, jika cacah logic “1” ganjil maka bit paritasnya sama dengan 1 (P=1), sebaliknya jika cacahnya genap maka P=0. Dengan demikian cacah logic  “1”  dalam akumulator ditambah dengan bit paritas, P , akan selalu berjumlah genap, maka bit paritas ini di namakan sebagai bit paritas genap atau even parity bit (karena tugasnya selalu menjaga agar cacah logic “1” selalu genap). Dua bit sisanya (PSW.1 dan PSW.5) tidak terikat (bebas) serta dapat digunakan sebagai flag yang serbaguna dan fleksibel.
2.1.5. Timer / Counter 
Mikrokontroler AT89C51 mempunyai dua timer / counter 16 bit yang dapat diukur dan diatur melalui perangkat lunak yaitu Timer / Counter 0 dan Timer/Counter 1. Apabila timer / counter pada frekuensi kerja mikrokontroler AT89C51 12 Mhz, timer /counter akan melakukan perhitungan waktu sekali setiap 1 mikrodetik secara independen, tidak tergantung pada eksekusi suatu intruksi.satu siklus pencacah waktu sama dengan satu siklus eksekusi instruksi, sedangkan satu siklus diselenggarakan dalam waktu 1 mikrodetik. Apabila periode waktu tertentu telah dilampaui, timer / counter segera menginterupsi mikrokontroler untuk memberitahukan bahwa perhitungan perioda waktu telah selesai dilaksanakan. Periode waktu timer / counter secara umum ditentukan oleh persamaan berikut ini:
a. Sebagai timer / counter 8 bit
T = (255 – TLx)*1s
b. Sebagai timer / counter 16 bit
         T = (65535 – THxTLx)*1s
Keterangan :
THx = isi register TH0 dan TH1
TLx = isi register TL0 dan TL1
Pengontrolan kerja timer / counter adalah register Timer Control (TCON). TCON beralamat 88H, adapun definisi dari bit pada timer control adalah sebagai berikut:
TF1	TR1	TF0	TR0	IE1	IT1	IE0	IT0	

Gambar 2.11. Bit Timer Control (TCON)
Adapun keterangan dari bit-bit timer kontrol yaitu pada tabel 2.3.
Tabel 2.1. Timer Control
Bit	Posisi	Fungsi	
7	TF1	Timer / Counter overflow flag. Di-set oleh perangkat keras saat Timer / Counter menghasilkan limpahan (overflow). 	
6	TR1	Bit untuk menjalankan Timer 1. Di-set / clear oleh perangkat lunak untuk membuat Timer on atau off. 	
5	TF0	Timer 0 overflow flag. Di-set oleh perangkat keras.	
4	TR0	Bit untuk menjalankan Timer 0. Di-set / clear oleh perangkat lunak untuk membuat Timer on atau off.	
3	IE1	External interrupt 1 edge flag	
2	IT1	Interrupt 1 type control byte. Set / clear oleh perangkat lunak untuk menspesifikasi sisi turun / level rendah trigger dari interupsi eksternal.	
1	IE0	External interrupt 0 edge flag	
0	IT0	Internal 0 type control bit.	
Pengontrolan pemilih mode operasi timer/counter adalah Register Timer Mode (TMOD) yang beralamat  39H difinisi bit-bitnya adalah sebagai berikut:
MSB                                                                                                              LSB
GATE	C/T	M1	M0	GATE	C/T	M1	M0	

Gambar 2.12. Bit Register Timer Mode (TMOD)
Keterangan dari bit-bit TMOD dapat dilihat pada tabel 2.4.
Tabel 2.2. Timer Mode
Bit	Posisi	Fungsi	
7	GATE	Saat TRx  dalam TCON diset 1 dan GATE = 1, timer/counter x akan berjalan ketika TRx = 1 (Timer dikontrol oleh perangkat lunak).	
6	C/T	Pemilih fungsi timer/counter. Clear (0) untuk operasi timer dengan masukan dari system clock internal. Set (1) untuk operasi counter dengan masukan dari pena T0 dan T1.	
5	MI	Bit pemilih mode	
4	M0	Bit pemilih mode	
3	GATE	Saat TRx  dalam TCON diset 1 dan GATE = 1, timer/counter x akan berjalan ketika TRx = 1 (Timer dikontrol oleh perangkat lunak).	
2	C/T	Pemilih fungsi timer/counter. Clear (0) untuk operasi timer dengan masukan dari system clock internal. Set (1)untuk operasi counter dengan masukan dari pena T0 dan T1.	
1	M1	Bit pemilih mode	
0	MO	Bit pemilih mode	

Kombinasi M0 dan M1 terdapat pada tabel 2.3.
Tabel 2.3. Kombinasi M0 dan M1
M1	M0	Mode	Operasi	
0	0	0	Timer 13 bit	
0	1	1	Timer / Counter 16 bit	
1	0	2	Timer auto reload 8 bit (pengisian otomatis	
1	1	3	TL 0 adalah Timer / Counter 8 bit dan dikontrol oleh kontrol bit Timer 1	

Timer/counter 0 dan 1 memiliki empat mode yaitu:
1.	Mode 0
Dalam mode 0 register timer disusun sebagai register 13 bit. Setelah semua perhitungan selesai, mikrokontroler akan men-set Timer Interupt Flag (TF1). Dengan membuat GATE = 1, timer dapat dikendalikan oleh masukan luar INT1, untuk fasilitas pengukuran lebar pulsa.
2.	Mode 1
Dalam mode 1 register timer disusun sebagai register 16 bit, setelah semua perhitungan selesai, mikrokontroler akan men-set Timer Interrupt Flag (TF1). Dengan membuat GATE = 1, timer dapat dikendalikan oleh masukan luar INT1, untuk fasilitas pengukuran lebar pulsa.
3.	Mode 2
Mode 2 menyusun register timer sebagai 8 bit counter. Limpahan (overflow) dari TL1 tidak hanya men-set TF1 tetapi juga mengisi TL1dengan isi TH1 yang diatur secara software. Pengisian tidak mengubah TH1.
4.	Mode 3
Timer dalam mode 3 semata-mata memegang hitungan. Mode 3 diperlukan untuk aplikasi yang membutuhkan timer/counter ekstra 8 bit. Saat timer 0 dalam mode 3, timer 1 dapat dihidupkan atau dimatikan atau dapat digunakan oleh port sebagai pembangkit Baud Rate.
2.1.6. Port I/O (Input/Output)
Mikrokontroler AT89C51 mempunyai port I/O 4 buah. Sebuah port digunakan sebagai port keluaran, data yang dikeluarkan diletakkan dalam SFR yang bersesuaian jika dibawa ke sebuah latch yang akan melanjutkannya untuk mengakses sinyal atau tanda setelah operasi ditulis lengkap. 
2.1.7. Baud Rate
Port serial pada mode 0 mempunyai baud rate yang tetap, yaitu 1/12 frekuensi osilator. Untuk menjalankan mode ini tidak ada timer/counter yang dibutuhkan untuk menyetel register SCON yang diperlukan.
Port serial pada mode 1 memiliki baut rate yang dapat diubah. Baut rate dapat dihasilkan oleh timer 1 dan digunakan dalam mode 2 (Auto Reload).
     (K x Frekuensi Oscilator)
Baud Rate      = 
         (32x12[256 – TH1])

Nilai K ditentukan oleh bit SMOD dalam power Control Register (PCON). Bila SMOD = 0 maka K = 1, bila SMOD = 1 maka K = 2. Bila diketahui baud rate, nilai TH dapat dicari melalui persamaan berikut ini:
             256 – (F x Frekuensi Oscilator)
TH   = 
              (384 x Baud Rate) 

Nilai TH1 harus dalam bentuk integer. Pembuatan nilai TH1 pada nilai integer terdekat tidak akan menghasilkan baud rate yang dikehendaki. Dalam hal ini pemakai dapat mengganti frekuensi kristal. Karena PCON tidak dapat dialamati per bit, untuk men-set PCON dilakukan dengan pengiriman perintah: ORL  PCON,#80H.
Pada port serial mode 2, baud rate memiliki nilai tetap yaitu 1/32 atau 1/64 dari frekuensi osilator, tergantung pada nilai SMOD dalam register PCON. Pada mode ini tidak ada timer yang digunakan. Bila SMOD = 1 baud rate-nya 1/32 frekuensi osilator. Pada port serial mode 3, baud rate dapat diatur seperti dalam mode 1.
2.1.8. Interupsi
Apabila CPU pada mikrokontroler AT89C51 sedang melaksanakan suatu program maka dapat dihentikan pelaksanaan program tersebut secara sementara dengan meminta interupsi. Apabila CPU mendapat permintaan intrupsi Program Counter (PC) akan diisi alamat dari vector interupsi. CPU kemudian melaksanakan rutin pelayanan interupsi mulai dari alamat tersebut. Bila rutin pelayanan interupsi selesai dilaksanakan, Mikrokontroler AT89C51 kembali kepelaksanaan program utama yang ditinggalkan.
Pada mikrokontroler Intel 89C51 terdapat beberapa saluran interupsi. Interupsi ini dibedakan menjadi dua jenis yaitu:
1.	Interupsi yang tidak dapat dihalangi oleh perangkat lunak (Non Maskable Interrupt).
2.	Interupsi yang dapat dihalangi oleh perangkat lunak (Maskable Interrupt). Jenis interupsi ini seperti INT0 dan INT1 (external) serta timer/counter 0, timer/counter 1 dan interupsi dari port serial (internal).
Tabel 2.4 Alamat Awal Layanan Rutin Interupsi
Nama	Alamat	Alat Interupsi	
Reset	00H	Power on Reset	
INT0	03H	INT0	
Timer 0	0BH	Timer 0	
INT1	13H	INT1	
Timer 1	1BH	Timer 1	
Sint	23H	Port I/O Serial	

2.1.9. Untai Pewaktu dan Osilator
Mikrokontroler AT89C51 memiliki osilator internal (on chip oscilator) yang dapat digunakan sebagai sumber clock bagi CPU. Untuk menggunakan osilator internal diperlukan sebuah kristal atau kapasitor keramik letak pena XTAL1 dan pena XTAL2 dan sebuah kapasitor ke ground. Kristal dengan frekuensi 12 Hz sampai 12 Mhz dan kapasitor dapat bernilai antara 27 pF sampai 33 pF. Kaki XTAL1 merupakan keluaran suatu penguat yang besar sebagai masukan sebuah kristal dan XTAL2 dengan memberikan umpan balik dan penggeseran fase yang diperlukan untuk osilasi. Jika kaki XTAL1 digunakan oleh sumber frekuensi luar maka kaki XTAL2 tidak dihubungkan.