BAB  II
MIKROKONTROLLER
AT89C2051

2.1 Tinjauan Umum
Komponen pengendali yang digunakan di dalam rangkaian ini adalah mikrokontroller AT89C2051 keluaran ATMEL. Mikrokontroller AT89C2051 digunakan untuk mengatur jalannya alat ini secara otomatis. Pada dasarnya mikrokontroller ini memiliki persamaan dengan mikroprosesor  yaitu tersusun atas beberapa bagian yaitu  Central Processing Unit ( CPU ), Program Counter  ( PC ), Stack Pointer ( SP ), register, jalur interupsi, dan untai pewaktu, tetapi di dalam  mikrokontroller masih terdapat bagian lain yaitu Read Only Memory ( ROM )  dan Random Acces Memory (RAM ) dan komponen Input Output I/O. Dalam sistem mikroprosesor ketiga bagian tersebut harus ditambahkan. Untuk lebih jelasnya di bawah ini akan dijelaskan bagian yang ada dalam mikrokontroller yaitu Central Processing Unit ( CPU ), Read Only Memory ( ROM ), Random Acces memory          ( RAM ) dan Port Input / Output ( I/O ).
2.1.1 Central Processing Unit ( CPU ) 
Di dalam Central Processing Unit ( CPU ) tersusun atas unit kendali, unit arithmatika dan logika  ( ALU ) dan register. Unit kendali digunakan untuk mengatur cara kerja dari mikrokontroller tersebut. Unit arithmatika dan logika digunakan untuk mengerjakan operasi arithmatika dan logika, sedangkan register digunakan sebagai tempat penyimpan sementara data yang akan dikerjakan . 
2.1.2 Read Only Memory ( ROM )
Read Only memory ( ROM ) adalah  jenis memori yang hanya dapat dibaca. Dalam perkembangannya ada beberapa jenis Read Only Memory ( ROM ) yaitu  Programmable ROM (PROM), Erasable Programmable ROM ( EPROM ), Electrically Erasable Programmable ROM ( EEPROM ) dan di dalam mikrokontroller AT89C2051 terdapat Flash Programmable and Erasable Read Only Memory              ( PEROM ) yang fungsinya sama dengan jenis – jenis ROM yaitu untuk menyimpan program. Hanya yang membedakannya adalah kemudahan dalam hal pengisian dan penghapusan program yang ada di dalamnya. Isi PEROM dapat dihapus dan diisi dengan menggunakan Universal programmer atau dengan menggunakan Flash PEROM programmer yang diberikan oleh pabriknya, hal ini adalah ATMEL sebagai pabrik pembuatnya.
2.1.3 Random Acces Memory ( RAM )
Random Acces Memory ( RAM ) adalah jenis memory yang dapat dibaca dan ditulis dan digunakan untuk penyimpanan data. Jika aliran listrik terputus maka data di dalam Read Acces Memory ( RAM ) akan hilang.
2.1.4 Port Input  Output ( I / O )
Port Input Output ( I / O ) adalah interface yang dimiliki oleh mikrokontroller yang digunakan untuk berhubungan dengan peralatan  luar yaitu sebagai masukan dan keluaran dari mikrokontroller.

2.2 Arsitektur Mikrokontroller  AT89C2051
Mikrokontroller AT89C2051 merupakan penyederhanaan dari mikrokontroller MCS-51 sehingga dalam hal pemrograman tidak jauh berbeda. Mikrokontroller AT89C2051 menggunakan Flash PEROM untuk menyimpan program dengan kapasitas 2 kilo byte. Mikrokontroller AT89C2051 memiliki kaki sebanyak 20 pin, sedangkan mikrokontroller MCS-51 memiliki  kaki sebanyak 40 pin. 20 pin tersebut merupakan penyederhanaan dari MCS-51, penyerderhanaan dilakukan dengan jalan mengurangi jalur untuk Port Input / Output parallel, tetapi kemampuan yang lain tidak mengalami pengurangan. Penyederhanaan ini 

dimaksudkan untuk membentuk  mikrokontroller yang bentuk fisiknya lebih kecil tetapi memiliki kemampuan yang sama dengan  MCS-51. 
Dibawah ini adalah karakteristik dari mikrokontroller  AT89C2051.
a.	Setara dengan MCS-51. 
b.	Memiliki flash memory 2 kilo byte.
c.	Tegangan kerja  dari 2.7 V sampai dengan 6 V.
d.	RAM Internal 128  * 8 bit.
e.	Mempunyai 15 jalur I / O. 
f.	Mempunyai 2 timer / counter 16 bit.
g.	Mempunyai 6 interupsi. 
h.	Terdapat Kanal Programmable Serial UART.
i.	Terdapat komparator analog internal. 

Gambar  2.1  Arsitektur AT89C2051

2.2.1 Keterangan Pin pada  Mikrokontroller AT89C2051
a.	Vcc  adalah jalur untuk tegangan AT89C2051
b.	Port 1 adalah port I / O dua arah ( biderectional ) 8 bit. Port P1.2 sampai dengan P1.7 menyediakan internal pull-ups. P1.0 dan P1.1 memerlukan external pull-ups. P1.0 dan P1.1 juga dapat digunakan sebagai masukan positif ( AIN0 ) dan masukan negatif  ( AIN1 ), pembanding, untuk masukan  komparator internal.
c.	Port 3, pin P3.0 sampai P3.5, P3.7 adalah tujuh port I/O dua                 ( biderectional ) 8 bit. Dengan internal pull-ups. P3.6 merupakan jalur input ke output komparator internal dan tidak dapat digunakan sebagai Port I/O serbaguna. Buffers keluaran port P3 sebesar 20 MA. Port P3 juga dapat difungsikan untuk kegunaan lain. Adapun fungsi – fungsi lain yang dimiliki oleh port P3 adalah seperti yang ditunjukkan pada tabel 2.1
Tabel 2.1 Fungsi alternatif port P3.
Port pin	Fungsi Alternatif	
P3.0	RXD ( Masukan untuk port serial )	
P3.1	TXD ( Masukan untuk port serial )	
P3.2	INT0 ( Masukan untuk external interuppt 0 )	
P3.3	INT1 ( Masukan untuk external interrupt 1 )	
P3.4	T0 ( Masukan untuk Timer 0 external )	
P3.5	T1 ( Masukan untuk Timer 1 external )	

d.	RST adalah jalur yang digunakan untuk reset.
e.	XTAL1 adalah jalur masukan inverting amplifier dan masukan internal clock.
f.	XTAL2 adalah jalur keluaran dari inverting oscilator amplifier.

2.3 Organisasi Memori
	Mikrontroller AT89C2051 memiliki memori data internal. Ruang memori dibagi  menjadi 3 bagian blok yaitu bagian rendah 128 byte, tinggi 128 byte dan Special Function Register ( SFR ).
	Data memori internal terbagi 3 bagian. Setiap bagian memori memiliki fungsi yang berbeda. Untuk ruang alamat memori data internal bagian tinggi 128 byte digunakan hanya untuk proses pengalamatan langsung, ruang alamat tersebut dimulai dari 80H sampai dengan FFH. Sedangkan ruang alamat internal rendah 128 byte digunakan untuk mengakses data dengan pengalamatan langsung dan tak langsung, lebar alamat tersebut dimulai dari 00H sampai dengan 7FH dan untuk ruang alamat terakhir, ruang alamat tersebut sama dengan ruang alamat untuk pengalamat langsung dan terletak pada daerah memori yang yang sama, yaitu 80H sampai dengan FFH, tetapi difungsikan untuk Special Function Register ( SFR ) yaitu yang berisikan status port, pengendali bit, timer, register penunjuk stack, akumulator. Ketiga blok alamat tersebut berkapasitas 128 byte.
	Sebanyak 32 byte paling bawah dikelompokan dalam 4 bank ( 8 register ) yaitu R0 sampai dengan R7. Dua bit dalam  Program Status Word ( PSW ) yang digunakan untuk memilih register bank yang digunakan .
Program Status Word ( PSW ) berisi beberapa bit status yang mencerminkan  adanya keadaan yang sedang terjadi pada CPU, PSW, yang ditunjukan pada blok tabel 2.2, berada di ruang Special Function Register ( SFR ). Program Status Word Berisi bit carry, carry tambahan ( digunakan untuk operasi BCD ), dua bank register, Overflow flag, bit parity, dan flag status yang didefinisikan pemakai.
	Bit carry yang lain selain digunakan sebagai fungsi bit carry dalam operasi arithmatika juga difungsikan sebagai “akumulator pengumpul” untuk sejumlah operasi boolean.
	Program Status Word berisi beberapa bit status yang mencerminkan keadaan mikrokontoller. Definisi dari bit – bit dalam Program Status Word ( PSW )  seperti pada tabel 2.2.
Tabel 2.2 Bit – bit dalam PSW
CY	AC	FO	RS1	RS0	OV	-	P	

Keterangan :
Simbol	Fungsi	Fungsi dan Arti	
CY	PSW.7	Carry flag	
AC	PSW.6	Auxilary carry flag	
FO	PSW.5	Flag 0 untuk kegunaan umum	
RS1	PSW.4	Bit pemilih bank register	
RS0	PSW.3	Bit pemilih bank register	
OV	PSW.2	Overflow carry	
-	PSW.1	Flag yang didefinisikan oleh user	
P	PSW.0	Parity flag, set / clear oleh perangkat keras setiap siklus intruksi untuk menunjukan jumlah bit 1 dalam akumulator, ganjil atau genap. 	

RS0 dan RS1 digunakan untuk memilih bank register. Delapan register ini merupakan register serbaguna, lokasinya pada awal 32 byte RAM didalamnya memiliki alamat dari 00H sampai dengan 1FH. Register ini dapat diakses melalui symbol assembler ( R0, R1, R2, R3, R4, R5, R6, R7 ). Pemilihan bank diperlihatkan pada tabel 2.3.

Tabel 2.3 Pemilihan bank
RS1	RS0	Bank	Lokasi Memori	
0	0	0	00H – 07H	
0	1	1	10H – 0FH	
1	0	2	10 H – 17H	
1	1	1	18H – 1FH	

Register R0 dan register R1 dapat digunakan untuk pengalamatan tak langsung pada RAM internal, sisa register lainya tidak dapat digunakan untuk pengalamatan tak langsung.

2.4  Special Function Register ( SFR )
	Special Function Register ( SFR ) merupakan memori internal yang  berisikan status port, pengendali bit, timer, register penunjuk stack, akumulator dengan kapasitas 128 byte alamat dimulai dari 80H sampai dengan FFH. Untuk lebih jelasnya dapat dilihat tabel 2.4 pemetaan alamat pada Special Function Register.

Tabel 2.4  Pemetaan alamat pada SFR

Nomor memori data yang disediakan untuk Special Function Register mulai dari 80H sampai dengan FFH, area sebanyak 128 byte tetapi tidak semuanya dipakai, seperti yang terlihat pada tabel 2.4 dalam denah pemetaan alamat Special Function Register. Masing-masing register dalam Special Function Register mempunyai nomor memori dan nama register.
Untuk nomor-nomor memori pada Special Function Register yang tidak dipakai tidak perlu dipergunakan, karena akan mengakibatkan terjadinya suatu kesalahan. 
Register dalam Special Function Register 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.

2.5 Fasilitas Mikrokontroller
1.	Port Masukan dan Keluaran Peralel
Mikrokontroller AT89C2051 mempunyai port paralel masukan dan keluaran sebanyak 2 buah. Jika sebuah port digunakan sebagai port keluaran data maka data yang dikeluarkan diletakkan dalam Special Function Register    ( SFR ), yang bersesuaian data dikeluarkan dikirimkan ke sebuah latch yang akan melanjutkannya untuk menyalurkan sinyal setelah operasi ditulis lengkap.
Jika port masukan dan keluaran digunakan sebagai port masukan maka harus diberi nilai FFH, kemudian beberapa masukan dari pena yang bertegangan rendah akan dikenal sebagai sebuah bit 0, dan port dapat melakukan pembacaan nilai Special Function Register ( SFR ) yang bersesuaian.
2.	Pewaktu
Mikrokontroller AT89C2051 memiliki oscilator internal yang dapat digunakan sebagai sumber clock bagi CPU, untuk menggunakan oscillator internal diperlukan sebuah kristal atau resonator keramik antara pin XTAL1 dan pin XTAL2 dan dua buah kapasitor ke ground. Seperti yang terlihat pada gambar Gambar 2.2. 

Gambar 2.2 Hubungan oscilator.
Nilai kapasitor yang digunakan untuk kristal berukuran 30 Pf  dan untuk resonator keramik menggunakan kapasitor berukuran 40 Pf. Jadi sumber clock yang  diperoleh CPU berasal dari sinyal yang diberikan oleh sebuah kristal. Untuk kristal dapat digunakan frekuensi dari 6 MHz sampai dengan 12 MHz.
3.	Serial Port
Mikrokontroller AT89C2051 dilengkapi dengan UART ( Universal Asynchronous Receiver / Transmitter ) yang biasa digunakan untuk komunikasi data secara serial. Jalur untuk komunikasi data serial ( RXD dan TXD ) diletakkan berhimpitan dengan P1.0 dan P1.1 yaitu di kaki nomor 2   dan 3, sehingga jika sarana UART dipakai maka P1.0 dan P1.1 tidak boleh digunakan sebagai masukan dan keluaran parallel.
Port serial dalam mikrokontroller AT89C2051 memiliki sifat full duplex yang berarti dapat melakukan komunikasi / hubungan dua arah dalam waktu yang bersamaan, yaitu melakukan pengiriman data dan dapat melakukan  penerimaan data secara bersamaan.  Register penerima dan pengirim pada port serial diakses pada SBUF ( Serial Buffer ). Register pengontrol  kerja port ini adalah  SCON ( Serial Control ).
Sedangkan bit – bit  status menunjukkan akhir adalah sebagai berikut :
Tabel 2.5 Bit – bit status 
   MSB                                                                                   LSB       
SM0	SM1	SM2	TB8	RB8	T1	R1	

Keterangan bit – bit: 
Bit	Symbol	Alamat	Keterangan	
SCON.7	SM0	9FH	Bit mode 0 port serial	
SCON.6	SM1	9EH	Bit mode 1 port serial	
SCON.5	SM2	9DH	Bit mode 2 port serial mengaktifkan komunikasi multi-prosessor dalam mode 2 dan 3 R1 tidak aktif jika bit ke 9 yang diterima 0	
SCON.4	REN	9CH	Receiver enable harus diset untuk menerima karakter.	
SCON.3	TB8	9BH	Transmit bit 8. bit ke 9 dikirim dalam mode 2 dan 3. diset dan cleared oleh perangkat lunak	
SCON.2	RB8	9AH	Receiver bit 8. bit ke 9 diterima.	
SCON.1	T1	99H	Transmit interrupt flag diset pada akhir pengiriman karakter dan dicleared oleh perangkat lunak 	
SCON.0	R1	98H	Receiver interrupt flag diset pada akhir penerimaan karakter. Dicleared oleh perangkat lunak	

4.	Timer 
Mikrokontroller AT89C2051 mempunyai 2 buah timer/counter 16 bit yang dapat diatur dengan melalui perangkat lunak, yaitu timer/counter0 dan timer/counter1. Timer/counter0 dan timer/counter1 adalah untaian pencacah biner 16 bit (  16 bit binery counter ) yang digunakan sebagai sarana masukan dan keluaran yang bekerja menurut fungsi waktu. Clock penggerak untaian pencacah ini berasal dari oscillator kristal atau clock yang diumpan dari luar lewat T0 dan T1. T0 dan T1 berhimpit dengan P3.4 dan P3.5, sehingga P3.4 dan P3.5 tidak dapat digunakan sebagai jalur masukan dan keluaran paralel kalau T0 dan T1 dipakai sebagai jalur interupsi
Timer/counter diaktifkan pada frekuensi waktu sekali setiap 1 mikrodetik secara independen atau tidak tergantung pada pelaksanaan suatu perintah. Satu siklus pencacah waktu dibuat dengan siklus pelaksanaan perintah, sedangkan satu siklus dilaksanakan dalam waktu 1 mikrodetik. Bila dimisalkan satu urutan perintah telah selesai dilaksanakan dalam waktu 5 mikrodetik.
Jika perioda waktu telah dilampaui, timer/counter segera menginterupsikan mikrokontroller untuk memberitahukan bahwa perhitungan perioda telah selesai dilaksanakan. Perioda waktu timer/counter secara umum ditentukan oleh persamaan berikut :
a.	Sebagai timer / counter 8 bit
T = ( 255 – TLx ) * 1s
Dimana TLx adalah isi register TL0 atau TL1
b.	Sebagai timer / counter 16 bit
T = ( 255 – THx TLx ) * s
THx adalah isi register TH0 atau TH1
TLx adalah isi register TL0 atau TL1
Pengontrol kerja dari timer/counter tersebut adalah sebuah register yang disebut dengan register timer control atau timer control ( TCON ). Adapun definisi dari bit – bit timer control adalah sebagai berikut :

Tabel 2.6 Bit – bit timer kontrol

TF1	TR1	TF0	TR0	IE1	IT1	IE0	IT0	

Keterangan bit – bit :
Bit	Symbol	Alamat	keterangan	
TCON.7	TF1	8FH	Timer1 overflow flag. Diset oleh perangkat keras saat timer menghasilkan overflow. Diclear oleh perangkat lunak atau perangkat keras ketika prosesor menunjuk ke ISR.	
TCON.6	TR1	8EH	Timer1 run control bit diset /diclear oleh perangkat lunak untuk menghidupkan atau mematikan.	
TCON.5	TF0	8DH	Timer0 overflow flag.	
TCON.4	TR0	8CH	Timer0 run control bit.	
TCON.3	IE1	8BH	External interrupt 1 egde flag. Diset oleh perangkat keras jika ada transisi turun yang terdeteksi pada INT1.	
TCON.2	IT1	8AH	External interrupt 1 type flag. Diset/diclear oleh perangkat lunak untuk transsi turun atau interrupt external aktif rendah.	
TCON.1	IE0	89H	External interrupt 0 egde flag.	
TCON.0	IT0	88H	External interrupt 0 type flag.	

5.	Interupsi
Mikrokontroller AT89C2051 mempunyai 5 pembangkit sumber interupsi, 2 diantaranya adalah sinyal interupsi yang diumpankan ke kaki INT0 dan INT1, kedua kaki ini berhimpitan dengan P3.2 dan P3.3 sehingga tidak dapat digunakan sebagai jalur masukan dan keluaran parallel pada saat P3.2 dan P3.3 digunakan sebagai INT0 dan INT1.
Tiga sumber interupsi yang lain berasal dari sarana komunikasi data serial dan sistem timer0 dan timer1.
Interupsi adalah kejadian atau kondisi yang menyebabkan penghentian sementara program pada saat kondisi tersebut dilayani oleh program lain. Interupsi memperbolehkan suatu sistem untuk menangggapi suatu kejadian sacara asinkron dan menanggapi kejadian tersebut pada saat program lain dieksekusi.
Program yang menanggapi sebuah interupsi disebut rutin layanan interupsi atau Interrupt Service Routine ( ISR ) atau Interrupt Handler. Interrupt Service Routine ( ISR ) mengeksekusi tanggapan terhadap interupsi dan biasanya menyajikan operasi masukan dan keluaran ke suatu piranti.
Ketika terjadi interupsi, program utama akan menghentikan eksekusi program sejenak dan melompat ke Interrupt Service Routine ( ISR ), ISR akan melaksanakan permintaan interupsi dan akan kembali ke program utama setelah mendapatkan perintah Return From Interrupt ( RETI ).
Ada 2 jenis interupsi pada mikrokontroller yaitu maskable interrupt dan nonmaskable interrupt. Maskable interrupt adalah jenis interupsi yang dapat dihalangi oleh perangkat lunak, contohnya adalah INT0, INT1, Timer/counter0 dan Timer/counter1. Nonmaskable interrupt adalah jenis interupsi yang tidak dapat dihalangi oleh perangkat lunak, contohnya adalah  reset.
Ada dua buah register yang digunakan untuk mengontrol interupsi. Register tersebut adalah IE ( Interrupt Enable ) digunakan sebagai sumber interupsi yang dapat diaktifkan ataupun dinonaktifakan secara individual         dengan mengatur  bit pada IE dalam Special Function Register ( SFR ). Register yang kedua adalah IP ( interrupt Prioritas ) digunakan sebagai sumber interupsi yang dapat diprogram secara individual menjadi 1 atau 2 tingkat prioritas yaitu dengan mengatur bit pada Special Function Register      ( SFR ) yang bernama IP.