ARSITEKTUR MIKROKONTROLER AT89C51/52/55 A. Pendahuluan Mikrokontroler merupakan lompatan teknologi mikroprosesor dan mikrokomputer. Mikrokontroler diciptakan tidak semata-mata hanya memenuhi kebutuhan kalangan industri, namun juga para konsumen untuk pembuatan alat-alat bantu dan mainan yang lebih canggih. Aplikasi lain dari mikrokontroler adalah dalam bidang pengukuran jarak-jauh / telemetri. Sistem telemetri ini jelas memerlukan sistem akuisi data sekaligus sistem pengiriman data secara serial (melalui transmiter), yang semua itu bisa diperoleh dari mikrokontroler yang digunakan. Sedikit berbeda dengan sistem komputer (yang dapat menangani berbagai macam program aplikasi), mikrokontroler hanya bisa digunakan untuk aplikasi tertentu saja (hanya satu program saja yang dapat disimpan). Perbedaan lainnya terletak pada perbandingan memori ROM & RAM-nya. Pada sistem komputer perbandingan memori ROM & RAM-nya besar, artinya program-program yang sedang digunakan disimpan dalam RAM yang kapasitasnya relatif besar, sedang rutin-rutin interface hardware disimpan dalam ROM yang kapasitasnya kecil. Untuk mikrokontroler perbandingan memori ROM & RAM-nya yang besar, artinya program kontrol disimpan dalam ROM (bisa Masked ROM atau Flash PEROM) yang ukurannya relatif besar, sedangkan RAM digunakan sebagai tempat penyimpan sementara, termasuk register-register yang dipakai pada mikrokontroler yang bersangkutan. B. Pengenalan Mikrokontroler AT89C51 Mikrokontroler, sebagai suatu terobosan teknologi mikroprosesor dan mikrokomputer, hampir memenuhi kebutuhan pasar dan teknologi baru. Teknologi baru, di sini pengertiannya adalah teknologi semikonduktor dengan kandungan transistor yang lebih banyak namun membutuhkan ruang yang kecil serta dapat diproduksi secara massal sehingga harganya menjadi lebih murah. Mikrokontroler hadir untuk memenuhi selera industri dan para konsumen akan kebutuhan dan keinginan alat-alat bantu dan mainan yang lebih baik atau canggih. Ada perbedaan yang cukup penting antara mikroprosesor dengan mikrokontroler. Jika mikroprosesor merupakan CPU (Central Processing Unit) tanpa memori dan I/O pendukung dari sebuah komputer, maka mikrokontroler umumnya terdiri atas CPU, memori, I/O tertentu, dan unit pendukung lainnya, misalnya Analog to Digital Converter (ADC) yang sudah terintegrasi di dalam mikrokontroler tersebut. Kelebihan mikrokontroler adalah telah tersedianya RAM dan peralatan I/O pendukung. Terdapat berbagai jenis mikrokontroler dari berbagai vendor yang digunakan secara luas di dunia ini. Di antaranya yang terkenal adalah dari Intel, Maxim, Motorola, dan ATMEL. 2.1.1 Komponen Dasar Mikrokontroler Mikrokontroler umumnya terdiri dari dari CPU, memori, I/O tertentu dan unit pendukung lainnya seperti ADC (Analog Digital Converter) yang sudah terintegrasi didalamnya. 1. Cental Processing Unit (CPU) CPU terdiri atas dua bagian, yaitu unit pengendali (control unit) serta unit aritmatika dan logika (ALU). Fungsi utama unit pengendali adalah mengambil, mengkodekan, dan melaksanakan urutan instruksi sebuah program yang tersimpan dalam memori. Unit pengendali menghasilkan dan mengatur sinyal pengendali yang diperlukan untuk menyerempakan operasi, aliran, dan instruksi program. Unit aritmatika dan logika berfungsi untuk melakukan proses perhitungan yang diperlukan selama program dijalankan serta mempertimbangkan suatu kondisi dan mengambil keputusan yang diperlukan untuk instruksiinstruksi berikutnya. 2. Bus Alamat Bus alamat berfungsi sebagai sejumlah lintasan saluran pengalamatan antara alat dengan sebuah komputer. Pengalamatan ini harus ditentukan terlebih dahulu untuk menghindari terjadinya kesalahan pengiriman sebuah instruksi dan terjadinya ketidaksesuaian antara dua buah alat yang bekerja secara bersamaan. 3. Bus Data Bus data merupakan sejumlah lintasan saluran keluar-masuknya data dalam suatu mikrokontroler. Pada umumnya saluran data yang masuk sama dengan saluran data yang keluar. 4. Bus Kontrol Bus kontrol atau bus pengendali ini berfungsi untuk menyerempakan operasi mikrokontroler dengan operasi rangkaian luar. 5. Memori Di dalam sebuah mikrokontroler terdapat suatu memori yang berfungsi untuk menyimpan data atau program. Ada beberapa jenis memori, di antaranya adalah RAM dan ROM. Ada beberapa tingkatan memori, di antaranya adalah register internal, memori utama, dan memori massal. Register internal adalah memori di dalam ALU. Waktu akses register ini sangat cepat, umumnya kurang dari 100 ns. Memori utama adalah memori yang ada pada suatu sistem. Waktu aksesnya lebih lambat dibanding register internal, yaitu antara 200 sampai 1000 ns. Memori massal dipakai untuk penyimpanan berkapasitas tinggi, biasanya berbentuk disket, pita magnetik, atau kaset. 6. Random Access Memory (RAM) RAM merupakan memori yang dapat dibaca dan ditulis. RAM biasanya digunakan untuk menyimpan data sementara atau sering disebut dengan memori data saat program bekerja. Data yang ada pada RAM akan hilang bila catu daya dari RAM dimatikan sehingga RAM hanya dapat digunakan untuk menyimpan data sementara. Teknologi RAM dapat dibagi menjadi dua, yaitu statik dan dinamik. RAM dinamik tersusun oleh sel-sel yang menyimpan data sebagai muatan listrik pada kapasitor. Ada-tidaknya muatan yang ada pada kapasitor dijadikan oleh RAM dinamik sebagai bilangan biner 1 atau 0. Oleh karena kapasitor memiliki kecendrungan alami untuk mengosongkan muatan, RAM dinamik memerlukan pengisian muatan secara periodik untuk memelihara penyimpanan data. Pada RAM statik, nilai biner disimpan menggunakan konfigurasi gate logika flip-flop. RAM statik akan menyimpan data selama aliran daya diberikan padanya. 7. Read Only Memory (ROM) ROM merupakan memori yang hanya dapat dibaca. Data yang disimpan di ROM tidak akan hilang meskipun tegangan catu daya dimatikan. Berdasar sifat itu maka ROM sering dipakai untuk menyimpan program. Ada beberapa jenis ROM, diantaranya ROM, PROM, EPROM, dan EEPROM. ROM merupakan memori yang sudah diprogram oleh pabrik. PROM dapat diprogram oleh pemakai tapi hanya dapat ditulis sekali saja. UV-EPROM merupakan PROM yang dapat diprogram atau ditulis beberapa kali dan dapat dihapus dengan sinar ultraviolet. Flash PEROM adalah PROM yang dapat ditulis ulang beberapa kali dan dapat dihapus secara elektrik atau dengan tegangan listrik. UV-EPROM harganya lebih mahal dari Flash PEROM, karena itu Flash PEROM lebih populer dan diminati programmer mikrokontroler. 2.1.2 Mikrokontroler AT89C51 Mikrokontroler AT89C51 adalah mikrokomputer CMOS 8 bit dengan 4KB Flash Programmable dan Erase Read Only Memory (PEROM) yang termasuk dalam keluarga Atmel. Mikrokontroler jenis ini merupakan Chip yang menggunakan teknologi memori non-volatile, mikrokontroler AT89C51 ini kompatibel dengan mikrokontroler standar industri MCS-51 (seperti mikrokontroler 8031 yang terkenal dan banyak digunakan beberapa waktu lalu). AT89C51 mempunyai memori yang terdiri atas : RAM internal sebesar 128 byte dengan alamat 00H-7Fh, dan dapat diakses menggunakan RAM address register. RAM internal ini terdiri atas Register Banks dengan 8 buah register (R0-R7). Memori lain, yaitu 21 buah Special Function Register dimulai dari alamat 80H-FFH. RAM ini beda lokasi dengan Flash PEROM dengan alamat 000H-7FFH. Tabel 1. Alamat RAM Internal Special Function Register RAM Internal Untuk sekedar perbandingan kapasitas memori, Tabel 2 berikut memperlihatkan kapasitas memori dari mikrokontroler seri AT89XXX. Tabel 2. Kapasitas Memori Mikrokontroler seri AT89XXX. 2.1.3 Type RAM Flash Memory EEPROM AT89C51/S51 8 x 128 byte 4 Kbyte Tidak AT89C52/S52 8 x 256 byte 4 Kbyte Tidak AT89C55 8 x 256 byte 4 Kbyte Tidak AT89S53 8 x 256 byte 4 Kbyte Tidak AT89S8252 8 x 256 byte 4 Kbyte 4 Kbyte Arsitektur Mikrokontroler AT89C51 Sebuah mikrokontroler dapat bekerja bila di dalam mikrokontroler tersebut terdapat sebuah program yang berisi instruksi-instruksi yang akan digunakan untuk menjalankan sistem mikrokontroler tersebut. Pada prinsipnya program pada mikrokontroler dijalankan secara bertahap, jadi pada program itu sendiri terdapat beberapa set instruksi dan tiap instruksi itu dijalankan secara bertahap atau berurutan. Beberapa fasilitas yang dimiliki oleh mikrokontroler AT89C51 adalah sebagai berikut: a. Sebuah CPU 8 bit. b. Osilator internal dan rangkaian pewaktu. c. RAM internal 128 byte. d. Flash memori 4 Kbyte. e. Lima buah jalur interupsi (dua buah interupsi eksternal dan tiga buah interupsi internal). f. Empat buah programable port I/O yang masing-masing terdiri dari delapan buah jalur I/O. g. Sebuah port serial dengan kontrol serial full duplex UART. h. Kemampuan untuk melaksanakan operasi aritmatika dan logika. i. Kecepatan dalam melaksanakan instruksi per siklus 1 mikrodetik pada frekuensi 12 MHz. Berdasarkan susunan kaki yang terdapat pada Gambar 2 mikrokontroler AT89C51 di atas dapat dijelaskan sebagai berikut: a. VCC Vcc digunakan sebagai catu daya (+) yang dibutuhkan mikrokontroler AT89C51. b. GND GND digunakan sebagai ground . Gambar 1. Mikrokontroler seri AT89C51 c. RST (Reset) Berfungsi sebagai masukan reset. Kondisi high selama 2 siklus mesin selama osilator bekerja akan me-reset mikrokontroler yang bersangkutan. d. ALE/PROG Keluaran ALE atau Address Latch Enable akan menghasilkan pulsa-pulsa untuk mengunci byte rendah (low byte) alamat selama mengakses memori eksternal. Kaki ini juga berfungsi sebagai masukan pulsa program (the program pulse input) atau PROG selama pemrograman flash. Pada operasi normal, ALE akan berpulsa dengan laju 1/6 dari frekuensi kristal dan dapat digunakan sebagai pewaktuan (timing) atau pendetakan (clocking) rangkaian eksternal. Jika dikehendaki, operasi ALE bisa dimatikan dengan cara mengatur bit 0 dari SFR lokasi 8Eh. Jika isinya ‘1’(hight), ALE hanya akan aktif selama dijumpai instruksi MOVX atau MOVC. Selain itu, kaki ini akan secara lemah di-pulled high. Mematikan bit ALE tidak akan ada efeknya jika mikrokontroler mengeksekusi program secara eksternal. e. Port 0 Port 0 merupakan port paralel 8 bit dua arah. Posisi Least Significant Bit (LSB) terletak pada kaki 39 dan Most Significant Bit (MSB) terletak pada kaki 32. Gambar 2. Bit Port 0 Port 0 juga merupakan port keluaran/masukkan (I/O) bertipe open drain bidirectional, dan sebagai port keluaran, masing-masing kaki dapat menyerap arus (sink) delapan masukkan TTL (sekitar 3,8 mA). Pada saat ‘1’ dituliskan ke kaki-kaki Port 0 ini, maka kaki-kaki Port 0 dapat digunakan sebagai masukan berimpedansi tinggi. Port 0 juga dapat dikonfigurasi sebagai bus alamat/data bagian rendah (low byte) selama proses pengaksesan memori data dan program eksternal. Jika digunakan dalam mode ini Port 0 memiliki pull-up internal. Port 0 juga menerima kode- kode yang dikirimkan kepadanya selama proses pemrograman dan mengeluarkan kode-kode selama proses verifikasi program yang telah tersimpan dalam flash. Dalam hal ini dibutuhkan pull-up eksternal selama proses verifikasi program. f. Port 1 Port 1 merupakan port paralel 8 bit dua arah. Posisi LSB terletak pada kaki 1 dan MSB terletak pada kaki 8. Gambar 3. Bit Port 1 Port 1 merupakan port I/O dua arah yang dilengkapi dengan pull-up internal. Penyangga keluaran Port 1 mampu memberikan / menyerap arus empat masukan TTL (sekitar 1,6mA). Jika ‘1’ dituliskan ke kakikaki Port 1, maka masing-masing kaki akan di-pulled high dengan pullup internal sehingga dapat digunakan sebagai masukan. Apabila kakikaki Port 1 dihubungkan ke ground (di-pulled low), maka masing- masing kaki akan memberikan arus (source) karena di-pulled high secara internal. Port 1 juga menerima alamat bagian rendah (low byte) selama pemrograman dan verifikasi flash. g. Port 2 Port 2 merupakan port paralel 8 bit dua arah. Port ini mengirim byte alamat-alamat bila dilakukan pengaksesan memori eksternal. LSB terletak pada kaki 21 dan MSB terletak pada kaki 28. Gambar 4. Bit Port 2 Penyangga keluaran Port 2 mampu memberikan/menyerap arus empat masukan TTL (sekitar 1,6 mA). Jika ‘1’ dituliskan ke kaki- kaki Port 2, maka masing-masing kaki akan di-pulled high dengan pullup internal sehingga dapat digunakan sebagai masukan. Apabila kaki-kaki Port 2 dihubungkan ke ground (di-pulled low), maka masing-masing kaki akan memberikan arus (source) karena di-pulled high secara internal. Port 2 akan memberikan byte alamat bagian tinggi (high byte) selama pengambilan instruksi dari memori program eksternal dan selama pengaksesan memori data eksternal yang menggunakan perintah dengan alamat 16 bit (misalnya: MOVX @ DPTR). Dalam aplikasi ini, jika ingin mengirimkan ‘1’, maka digunakan pull-up internal yang sudah disediakan. Selama pengaksesan memori data eksternal yang menggunakan perintah dengan alamat 8 bit (misalnya: MOVX @Ri), Port 2 akan mengirimkan isi dari SFR P2. Port 2 juga menerima alamat bagian tinggi selama pemrograman dan verifikasi flash. h. Port 3 Port 3 merupakan port paralel 8 bit dua arah. LSB terletak pada kaki 10 dan MSB terletak pada kaki 17. Port ini mempunyai beberapa fungsi khusus yaitu: Tabel 3. Fungsi khusus kaki-kaki pada port 3 KAKI PORT 3 FUNGSI KHUSUS P3.0 RXD (port input serial) P3.1 TXD (port output serial) P3.2 INT0 (interrupt eksternal 0) P3.3 INT1 (interrupt eksternal 1) P3.4 T0 (input eksternal timer 0) P3.5 T1 (input eksternal timer 1) P3.6 WR (perintah write pada memori eksternal) P3.7 RD (perintah read pada memori eksternal) Port 3 merupakan port I/O dua arah dengan dilengkapi pull-up internal. Penyangga keluaran Port 3 mampu memberikan / menyerap arus empat masukan TTL (sekitar 1,6 mA). Gambar 5. Bit Port 3 Jika ‘1’ dituliskan ke kaki-kaki Port 3, maka masing-masing kaki akan di-pulled high dengan pull-up internal sehingga dapat digunakan sebagai masukan. Apabila kaki-kaki Port 3 dihubungkan ke ground (dipullup low), maka masing-masing kaki akan memberikan arus (source) karena di-pulled high secara internal. i. PSEN (Program Store Enable) Merupakan sinyal baca untuk memori program eksternal. Saat mikrokontroler keluarga 51 menjalankan program dari memori eksternal, PSEN akan diaktifkan dua kali per siklus mesin, kecuali dua aktivasi PSEN dilompati (diabaikan) saat mengakses memori data eksternal. Gambar 6. Diagram blok AT89C51 j. EA/Vpp (External Access Enable) EA harus selalu dihubungkan ke ground, jika mikrokontroler akan mengeksekusi program dari memori eksternal lokasi 0000h hingga FFFFh. Selain dari itu, EA harus dihubungkan ke Vcc agar mikrokontroler mengakses program secara internal. k. XTAL 1 XTAL1 berfungsi sebagai masukan dari rangkaian osilator. l. XTAL 2 XTAL 2 berfungsi sebagai keluaran dari rangkaian osilator.