Minggu, 13 Juni 2010

Mikrokontroler AT89C52

 
Mikrokontroler tipe AT89C52 buatan Atmel merupakan salah satu tipe mikrokontroler yang mempunyai arsitektur mikrokontroler 8051. Mikrokontroler dengan arsitektur 8051 merupakan salah satu jenis arsitektur mikrokontroler yang paling lama dan paling banyak digunakan di dunia karena bersifat low cost dan low performance. Arsitektur ini dikeluarkan pertama kali oleh Intel dan kemudian menjadi sangat populer. Pada Intel seri-seri mikrokontroler ber-arsitektur 8051 tergabung dalam
satu keluarga mikrokontroler yaitu keluarga MCS-51. Mikrokontroler
ber-arsitektur 8051 baik dari keluarga intel MCS-51 maupun dari vendor-vendor lain seperti Atmel, Phillips maupun Siemens memiliki beragam tipe dan fasilitas, namun semuanya memiliki arsitektur yang sama, serta set instruksi yang relatif tidak berbeda.
         Pada tabel dibawah ini akan ditunjukkan perbandingan antara mikrokontroler Atmel keluarga 51 yang mencakup tipe, kapasitas memori programnya, kapasitas memori datanya, jumlah pewaktu / timer 16 bit dan teknologi pembuatnya.

            Tabel 2.5 Perbandingan Antar Mikrokontroler Atmel Keluarga 51

Nama Piranti

Memori Program
Memori Data (byte)
Pewaktu / Timer 18 bit
Teknologi
AT89C1051
1K Flash
64 RAM
1
CMOS
AT89C051
2K Flash
128 RAM
2
CMOS
AT89C51
4K Flash
128 RAM
2
CMOS
AT89C52
8 K Flash
256 RAM
3
CMOS
AT89C55
16K Flash
256 RAM
3
CMOS



Fitur – fitur yang disediakan oleh mikrokontroler tipe AT89C52 adalah :
a. 8K Flash
b. 256 byte RAM
c. 4 buah 8 bit I/O (Input / Output) Port
d. 3 buah 16 bit timer
e. Pengantarmukaan komunikasi serial
            f. Port serial full duplex

          AT89C52 didisain dengan logika setatis untuk operasi frekuensi down to zero dan mendukung dua perangkat lunak mode saving power yang dapat dipilih. Mode idle berarti menghentikan kerja CPU sementara membiarkan RAM, timer, port serial dan sistem interupsi untuk terus bekerja. Mode power down menyimpan isi dari RAM tetapi menon-aktifkan oscillator sampai di-reset kembali.
    
1. Fungsi Pin Mikrokontroler AT89C52
          Mikrokontroler AT89Cxx (keluaran 51 mempunyai 40 kaki, 32 kaki diantaranya digunakan sebagai Port pararel. Satu Port pararel terdiri sari 8 kaki, dengan demikian 32 kaki tersebut membentuk 4 buah Port pararel, yang masing-masing dikenal sebagai Port 0, Port 1, Port 2 dan Port 3, nomor dari masing-masing jalur (kaki) dari Port pararel mulai dari 0 sampai 7, jalur (kaki) pertama Port 0 disebut sebagai P0.0 dan jalur terakhir untuk Port 3 adalah P3.7.


Di bawah ini adalah penjelasan fungsi tiap pin pada mikrokontroler AT89C52 :
a. Port 0
Port 0 merupakan salah satu port yang berfungsi sebagai general purpose I/O dengan lebar 8 bit. Port 0 terdiri dari P0.0, P0.1, hingga P0.7. Selain sebagai jalur I/O, port 0 juga berfungsi sebagai multiplexed address/data bus.
Port 0 juga dapat menerima kode-kode yang dikirimkan kepadanya selama proses pengisian program dan mengeluarkan kode-kode selama proses verifikasi program yang telah tersimpan dalam flash. Dalam hal ini dibutuhkan pullup eksternal selama proses verifikasi berlangsung.

b. Port 1
Port 1 merupakan salah satu port yang berfungsi sebagai general purpose I/O dengan lebar 8 bit. Port 0 terdiri dari P1.0, P1.1, hingga P1.7. Port 1 tidak memiliki fungsi lain.

c. Port 2
Port 2 merupakan salah satu port yang berfungsi sebagai general purpose I/O dengan lebar 8 bit. Port 2 terdiri dari P2.0, P2.1, hingga P2.7. Selain sebagai jalur I/O, port 2 juga berfungsi sebagai high byte address bus. 

d. Port 3
Port 3 merupakan salah satu port yang berfungsi sebagai general purpose I/O dengan lebar 8 bit. Port 3 terdiri dari P3.0, P3.1, hingga P3.7. Selain sebagai jalur I/O, port 0 juga berfungsi sebagai jalur penerimaan/pengiriman data pada komunikasi serial, external interrupt, timer/counter, dan external data memory write/read strobe.

e. PSEN
Program Store Enable (PSEN) merupakan jalur kontrol untuk mengakses external program memory. PSEN umumnya dihubungkan dengan output enable pada external memory. PSEN akan bernilai low pada saat pembacaan program dari external memory. PSEN akan bernilai high pada saat pembacaan program dari internal memory.

f. ALE
Address Latch Enable (ALE) berfungsi sebagai demultiplexer pada saat port 0 bekerja sebagai multiplexed address / data bus.

g. EA
External Access (EA) merupakan pin yang berfungsi sebagai input kontrol. Jika EA bernilai low, maka program hanya akan dijalankan dari external program memory. Jika EA bernilai high, maka program akan dijalankan dari internal program memory.

h. RST
Pin ini berfungsi sebagai input untuk melakukan reset terhadap MCS-51. Jika RST bernilai high selama minimal 2 machine cycle, MCS-51 akan di-reset dan nilai internal register akan dikembalikan seperti keadaan awal pada saat MCS-51 baru mulai bekerja.

i. On-Chip Oscillator
Koneksi dengan on-chip oscillator terdiri dari dua pin yaitu XTAL1 dan XTAL2. Pin XTAL1 merupakan input bagi inverting oscillator amplifier yang terdapat dalam IC MCS-51. Pin XTAL2 merupakan output dari inverting oscillator amplifier tersebut. On-Chip Oscillator dapat bekerja jika di-drive menggunakan kristal. Tambahan kapasitor diperlukan untuk menstabilkan sistem. Kecepatan maksimum pelaksanaan instruksi per siklus adalah 0,5 μs pada frekuensi clock 24 MHz. Apabila frekuensi clock mikrokontroler yang digunakan adalah 12 MHz, maka kecepatan pelaksanaan instruksi persiklus adalah 1 μs. On-Chip Oscilator terdapat pada pin18-19.

j. VCC
Digunakan untuk suplai tegangan.

k. GND
Ground atau pentanahan.

Masing-masing Port 0, Port 1, Port 2 dan Port 3 memiliki rangkaian internal tersendiri yang berbeda satu sama lain. Namun semua port memiliki latch yang diwakili oleh flip-flop tipe D. Clock flip-flop ini akan memasukkan nilai dari internal bus ke dalam port latch saat ada sinyal dari CPU untuk menuliskan data ke latch.

2 Register Fungsi Khusus
Secara umum, semua mokrokontroler Atmel memiliki alamat-alamat SFR yang sama dalam ruang SFR, hanya pada AT89C52 memiliki beberapa SFR tambahan. 16 alamat dalam ruang SFR dapat diakses baik secara byte maupun bit.

Berikut ini akan dijelaskan secara singkat tentang SFR beserta fungsinya :
a. Akumulator
Register Accumulator (ACC) banyak digunakan dalam berbagai instruksi. ACC bersama dengan register B dalam proses perkalian dan pembagian. ACC akan menyimpan hasil perkalian 8 bit terbawah (low byte) dan hasil bagi. Selain itu register ACC juga merupakan general purpose register selebar 8 bit yang dapat digunakan untuk aplikasi user. Menempati lokasi E0h.

b. Register B
Register B digunakan bersama dengan Accumulator dalam proses perkalian dan pembagian. Register B akan menyimpan hasil perkalian 8 bit teratas (high byte) dan sisa pembagian. Selain itu register B juga merupakan general purpose register selebar 8 bit yang dapat digunakan untuk aplikasi user. Menempati lokasi F0h.

c. Program Status Word ( PSW )
Register PSW mempunyai lokasi D0h mengandung informasi status program yang berkaitan dengan kondisi CPU saat itu. Status yang tersimpan ke dalam PSW meliputi Carry Flag (CY), Auxilary Carry (AC), Register Bank Select 1 (RS1), Register Bank Select 0 (RS0), Flag 0 (F0), Overflow Flag (OV) dan Parity Flag (P).

d. Stack Pointer
Stack Pointer (SP) merupakan register 8 bit yang berisi lokasi dimana data alamat stack teratas disimpan. Instruksi PUSH, LCALL, proses interrupt, dan sejenisnya akan menambah nilai pada SP. Sedangkan instruksi POP, RET, RETI, dan sejenisnya akan mengurangi nilai pada SP.

e. Data Pointer
Data Pointer (DPTR) merupakan register 16 bit yang terdiri dari 8 bit Data Pointer High (DPH) dan 8 bit Data Pointer Low (DPL). DPTR umumnya digunakan untuk mengakses alamat pada memori eksternal.

f. Port Register
Port Register merupakan register yang mewakili alamat port. Register input/output ini meliputi P0, P1, P2 dan P3 menempati lokasi 80h, 90h, A0h dan B0h yang digunakan untuk menyimpan data yang akan dibaca atau ditulis dari / ke port untuk masing – masing port 0, port 1, port 2 dan port 3.

g. Timer Register
Timer Register merupakan register yang digunakan untuk mengatur operasi timer. Register ini meliputi Timer 1 High Byte (TH1), Timer 0 High Byte (TH0), Timer 1 Low Byte (TL1), Timer 0 Low Byte (TL0), Timer Mode (TMOD), dan Timer Control (TCON).
Pasangan register ( TH0, TL0 ) dilokasi 8ch dan 8Ah, (TH1, TL1) dilokasi 8Dh dan 8Bh serta (TH2, TL2) diloksai CDh dan CCh merupakan register-register pencacah 16 bit untuk masing-masing timer 0, timer 1, dan timer 2.

h. Serial Port Registers
Serial Port Register merupakan register yang digunakan dalam proses komunikasi serial. Register ini meliputi Serial Data Buffer (SBUFF) dan Serial Port Control (SCON).

i. Interrupt Registers
Interrupt Register merupakan register yang digunakan untuk mengatur proses interrupt. Register ini meliputi Interrupt Enable (IE) dan Interrupt Priority (IP).

3. Perangkat Instruksi Mikrokontroller AT 89CXX
1. ACALL (Absolute Call)
Instruksi ini digunakan untuk memanggil sub-sub rutin program.
   Format : ACALL (alamat kode)

2. CJNE (Compare Indirect Address to Immediate Data)
Instrksi ini akan membandingkan data langsung dengan lokasi memori yang dialamati oleh register R atau Akumulator A. apabila tidak sama maka instruksi akan menuju ke alamat kode.
Format : CJNE R,#data,Alamat kode atau CJNE A,#data,Alamat kode

3. CLR (Clear Accumulator)
Instruksi ini akan mereset data akumulator menjadi 00H.
    Format : CLR A

4. DEC (Decrement Indirect Address)
Instruksi ini akan mengurangi isi lokasi memori yang ditujukan oleh  register R dengan 1, dan hasilnya disimpan pada lokasi tersebut.

5. DJNZ (Decrement Register And Jump Id Not Zer)
Instruksi ini akan mengurangi nilai register dengan 1 dan jika hasilnya sudah 0 maka instruksi selanjutnya akan dieksekusi. Jika belum 0 akan menuju ke alamat kode.
Format : DJNZ Rr,Alamat Kode

6. INC (Increment Indirect Address)
Instruksi ini akan menambahkan isi memori dengan 1 dan menyimpannya
pada alamat tersebut.
Format : INC Rr

7. JB (Jump if Bit is Set)
Instruksi ini akan membaca data per satu bit, jika data tersebut adalah 1 maka akan menuju ke alamat kode dan jika 0 tidak akan menuju ke alamat kode.
      Format : JB alamat bit,alamat kode

8. JNB (Jump if Bit is Not Set)
Instruksi ini akan membaca data per satu bit, jika data tersebut adalah 0 maka akan menuju ke alamat kode dan jika 1 tidak akan menuju ke alamat kode.
      Format : JNB alamat bit,alamat kode

9. JMP (Jump to sum of Accumulator and Data Pointer)
Instruksi untuk memerintahkan loncat kesuato alamat kode tertentu.
Format : JMP alamat kode.

10. MOV
Instruksi ini untuk memindahkan isi akumulator/register atau data dari nilai luar atau alamat lain.
      Format :
- MOV a,#data (Memindahkan data ke accumulator)
- MOV R,A (Memindahkan Accumulator ke Register)
- MOV Pp,Pp (Memindahkan data port ke port)

11. RET (Return from subroutine)
Intruksi untuk kembali dari suatu subrutin program ke alamat terakhir subrutin tersebut di panggil.
Format : RET

12. SETB (Set Bit)
Instruksi untuk mengaktikan atau memberikan logika 1 pada  sebuat bit data.
Format :
- SETB A.1 (memberikan logika 1 pada accumulator bit ke 1)
- SETB P1.1 (memberikan logika 1 pada Port 1 bit ke 1)

13. CLR (Clear Bit)
Instruksi untuk memberikan logika 0 pada sebuat bit data.
Format :
- CLRB A.1 (memberikan logika 0 pada accumulator bit ke 1)
            - CLRB P1.1 (memberikan logika 0 pada Port 1 bit ke 1)