Ide dasar dari semua memori adalah kemampuan untuk menyimpan informasi. Tentu saja informasi yang disimpan dapat dipanggil atau diolah kembali bila diperlukan. Sebagai analogi, memori dimisalkan sebagai sekelompok kotak surat dalam suatu apartemen yang besar. Seseorang dapat meletakkan informasi dalam suatu kotak surat dengan nomor tertentu yang tertera. Jika pemilik ingin mengambil informasi tersebut, pemilik dapat melihat ke kotak suratnya dengan nomor yang tepat dan mengambil informasinya.
Dalam CPU 8 bit, setiap kotak surat dalam analogi di atas terdiri dari delapan set saklar on-off. Data atau informasi yang diberikan merupakan kondisi dari setiap saklar. Setiap saklar hanya ada dua kondisi yaitu on dan off, sehingga informasi yang terkandung di dalamnya adalah kombinasi on-off. Dalam delapan saklar tersebut, setiap saklar mewakili satu digit biner (bit). Bit satu mewkili saklar on dan bit nol mewakili saklar off. Setiap satu set 8 saklar mempunyai alamat spesifik sehingga penulisan dan pembacaan data dapat dilakukan dengan tepat dan benar.
Dalam analogi, apartemen dapat memiliki nomor kotak surat 100-175 untuk lantai pertama dan 200-275 untuk lantai kedua. Angka desimal ini menggambarkan jumlah orang yang memiliki kotak surat. Karena komputer bekerja dengan sistem biner, maka jumlah alamat dari data di memori merupakan kelipatan dua dari jalur alamat. Misalkan suatu komputer mempunyai empat jalur alamat, maka dia mempunyai 24 atau 16 alamat karena empat bit biner mempunyai kombinasi 16 buah. Komputer ini akan memetakan 16 alamat dari $0 sampai $F.
Dalam mikrokontroler MC68HC05 terdapat sepuluh jalur alamat sehingga didapatkan 1024 lokasi memori. Sedangkan mikrokontroler MC68HC11 memiliki 16 jalur alamat sehingga dapat mengalamati 65536 lokasi memori.Komputer 8-bit dengan sepuluh jalur alamat akan mempunyai peta memori dengan 1024 alamat dan masing-masing alamat memiliki 8 bit data. Alamat pertama dari lokasi memori adalah 00 0000 00002 dan alamat akhir 11 1111 11112. Sepuluh bit alamat tersebut pada umumnya dinyatakan dalam heksadesimal, sehingga jangkauan alamat memori tersebut menjadi $0000 sampai $03FF.Komputer menentukan lokasi memori mana yang akan digunakan dengan meletakkan kombinasi biner pada 10 jalur alamat kemudian mengirimkan sinyal read atau write. Hasilnya, informasi yang diinginkan pada alamat memori tertentu di atas akan muncul dalam delapan jalur data.
Jenis-jenis Memori
Komputer menggunakan beberapa jenis informasi sehingga membutuhkan beberapa jenis memori yang berbeda. Instruksi-instruksi yang mengontrol operasi dari mikrokontroler disimpan dalam memori non-volatile sehingga jika sistem tidak perlu diprogram ulang jika daya sistem hilang. Variabel dan hasil sementara bisa disimpan dalam memori yang dapat ditulis dengan mudah dan cepat saat operasi sedang berlangsung. Tidaklah penting untuk terus mengingat informasi yang ditulis saat tidak ada daya (volatile).
RAM (Random Access Memory) adalah suatu bentuk memori volatile yang dapat dibaca dan ditulis oleh CPU. Seperti definisinya, lokasi RAM dapat diakses dalam berbagai urutan (random). Memori jenis ini adalah yang paling umum digunakan oleh komputer pribadi. RAM membutuhkan area chip yang lebih lebar dibandingkan dengan ROM, sehingga RAM yang diikutsertakan dalam sistem mikrokontroler hanyalah sebagian kecil saja.
ROM (Read Only Memory) diisi saat proses produksinya. Informasi yang dituliskan harus dipesan oleh pelanggan sebelum chip diberikan. Dalam sistem mikrokontroler, informasi ini dapat dibaca oleh CPU tetapi tidak dapat dirubah. ROM adalah memori yang paling sederhana, kecil, dan murah.
PROM (Programmable ROM) mirip dengan ROM kecuali bahwa dia dapat diprogram setelah proses pembuatah chip. Beberapa variasi dari PROM adalah EPROM, OTP, dan EEPROM.
EPROM (Erasable PROM) dapat dihapus dengan menyinarinya dengan cahaya ultraviolet. Mikrokontroler yang EPROM-nya bisa dihapus memiliki jendela kecil tempat proses penyinaran dilakukan. Jumlah proses penghapusan yang diijinkan terbatas tergantung pada beberapa tipe. Prosedur khusus digunakan untuk meprogram informasi ke dalam memori EPROM. Kebanyakan mikrokontroler yang memiliki EPROM menggunakan tegangan +12 volt DC saat operasi penulisan EPROM. CPU tidak dapat menulis data ke lokasi EPROM seperti halnya penulisan yang dilakukan pada RAM. Beberapa mikrokontroler memiliki rangkaian penulis EPROM yang built-in.
OTP (One Time Programming) adalah EPROM yang tidak dilengkapi dengan jendela untuk penyinaran ultraviolet. Walaupun isi dari OTP adalah sama dengan EPROM yang memiliki jendela penghapusan, OTP tidak dapat dihapus karena tidak menyediakan jendela. OTP dipasarkan karena harganya lebih murah daripada EPROM yang berjendela.
EEPROM (Electrically EPROM) dapat dihapus secara elektris dengan perintah yang ada dalam mikrokontroler. Agar dapat diprogramkan harga baru ke lokasi memori ini, pertama proses penghapusan harus dilakukan kemudian baru dilaksanakan beberapa langkah pemrograman. Walaupun mirip dengan RAM, tetapi EEPROM tetap memiliki sifat non-volatile dari ROM yang tidak hilang datanya walaupun daya hilang.
I/O Sebagai Tipe Memori
Informasi status dan kontrol dari I/O adalah suatu tipe dari lokasi memori yang mengijinkan sistem komputer untuk mendapatkan informasi dari dan ke dunia luar. Tipe lokasi memori ini tidak seperti memori pada umumnya karena informasi yang ada dapat berubah karena pengaruh selain dari CPU.
Jenis paling sederhana dari lokasi memori I/O adalah port input dan port output sederhana. Dalam mikrokontroler 8-bit, port input sederhana terdiri dari delapan kaki yang dapat dibaca oleh CPU. Port output sederhana terdiri dari delapan kaki yang dapat dikontrol oleh CPU. Dalam kenyataannya, port output sederhana diimplementasikan dengan delapan latch dan jalur feedback yang memungkinkan CPU untuk membaca kembali apa yang sebelumnya ditulis ke port output.
Gambar di bawah memperlihatkan rangkaian ekuivalen dari satu bit RAM, satu bit port input, dan satu bit port output yang umum dan memiliki kemampuan membaca kembali. Dalam mikrokontroler nyata, rangkaian ini ada delapan untuk membentuk delapan bit RAM, port input, dan port output. Saat snyal clock high, data dari input D menuju output Q. Saat input clock low, data ditahan pada kaki output Q.

Output Port with Read-Back
Saat CPU menyimpan informasi ke dalam RAM dalam gambar (a), sinyal WRITE diaktifkan untuk menahan data dari jalur data bus ke dalam flip-flop [1]. Latch ini akan terus mengingat data yang telah diberikan sampai terjadi proses penulisan kembali atau jika daya dihilangkan. Saat CPU membaca data dalam RAM ini, sinyal READ diaktifkan, yang kemudian mengaktifkan multiplekser [2]. Multiplekser ini membuat data dari output latch muncul kembali ke jalur data bus.
Saat CPU membaca data dari port input seperti pada gambar (b), sinyal READ diaktifkan, yang akan mengaktifkan multiplekser [3]. Multiplekser ini akan mengirimkan data yang ada dalam buffer ke jalur data bus. Sinyal write tidak mempunyai pengaruh dalam rangkaian ini.
Saat CPU menyimpan data ke port output seperti pada gambar (c), sinyal WRITE diaktifkan untuk menahan data dari data bus menuju ke flip-flop [4]. Output dari latch ini, yang di-buffer oleh buffer driver [5], muncul sebagai harga digital pada kaki output. Saat CPU akan membaca data dari port output, sinyal READ diaktifkan, yang akan mengaktifkan multiplekser [6]. Multiplekser ini akan menyalurkan data dari output flip-flop ke jalur data bus.
Register Kontrol dan Status Internal
Register kontrol dan status internal adalah lokasi memori I/O yang spesial. Di samping aksi sensor dan pengontrolan kaki eksternal, register ini juga melakukan aksi sensor dan pengontrolan sinyal level logika internal. Lihat gambar dan bandingkan antara RAM dengan port output. Perbedaan yang tampak hanyalah bahwa port output memiliki buffer untuk menghubungkan state dari flip-flop ke kaki eksternal. Dalam kasus bit kontrol internal, output dari buffer terhubung dengan sinyal kontrol internal tertentu. Suatu bit status internal mirip dengan bit port input tetapi bit status ini hanya melakukan aksi sensor terhadap sinyal register internal.
Mikrokontroler M68HC05 memiliki kaki-kaki I/O paralel. Arah jalur dari setiap kaki dapat diprogram dengan bit kontrol melalui software. Gambar di bawah menggambarkan I/O dua arah (bi-directional) dengan latch output dan bit kontrol arah data. Kaki suatu port dikonfigurasi sebagai output jika bit DDR (Data Direction Register) yang bersesuaian diset menjadi logika satu. Suatu kaki dikonfigurasi sebagai input jika bit DDR yang bersesuaian diset menjadi logika nol. Saat pertama kali dihidupkan atau saat reset, semua bit DDR dinolkan, sehingga konfigurasi semua kaki port adalah sebagai input. DDR ini dapat ditulis dan dibaca oleh prosesor.
Peta Memori
Karena terdapat ribuan dan bahkan lebih lokasi memori dalam suatu sistem mikrokontroler, menjadi penting untuk memiliki cara yang enak untuk menangani alamat masing-masing data dalam memori. Suatu peta memori adalah penggambaran yang mewakili semua spasi dalam memori mikrokontroler. Gambar di bawah adalah peta memori umum yang menggambarkan memori dalam MC68HC705K1.
Empat digit heksadesimal yang terletak pada bagian kiri dari gambar di bawah adalah alamat yang dimulai pada $0000 di atas dan terus bertambahsampai $03F di bagian bawah. Alamat $0000 berhubungan dengan awal lokasi memori sedangkan alamat $03FF berhubungan dengan lokasi memori akhir. Sedangkan ketrangan dalam kotak menunjukkan macam tipe dari memori dan isinya (RAM, EPROM, register I/O, dan sebagainya). Beberapa daerah, seperti register I/O, perlu dijelaskan lebih detail karena penting untuk mengetahui nama dari setiap lokasi. Setiap lokasi memori sebanyak 1024 ini memiliki delapan bit data seperti pada gambar di bawah.
Lokasi memori 256 pertama ($0000-$00FF) dapat diakses oleh komputer dengan cara khusus yang sebut dengan mode pengalamatan langsung (direct addressing mode). Register I/O on-chip dan 32 byte RAM terletak dalam area $0000-$00FF.
I/O dan Struktur Memori
Mikrokontroler 89C51 adalah mikrokontroler dengan arsitektur MCS51 seperti 8031 dengan memori Flash PEROM (Programmable and Erasable Read Only Memory).

Mikrokontroler 89C51
Deskripsi Pin
| Nomor Pin | Nama Pin | Alternatif | Keterangan |
|-------------------------|-----------------------------------------|-------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 20 | GND | | Ground |
| 40 | VCC | | Power Supply |
| 32…39 | P0.7…P0.0 | D7…D0 & A7…A0 | Port 0 dapat berfungsi sebagai I/O biasa, low order multiplex address/data ataupun menerima kode byte pada saat Flash Programming Pada fungsi sebagai I/O biasa port ini dapat memberikan output sink ke delapan buah TTL Input atau dapat diubah sebagai input dengan memberikan logika 1 pada port tersebut Pada fungsi sebagai low order multiplex address/data port ini akan mempunyai internal pull up Pada saat Flash Programming diperlukan external pull up Terutama pada saat verifikasi program |
| 1…8 | P1.0…P1.7 | | Port 1 berfungsi sebagai I/O biasa atau menerima low order address bytes selama pada saat Flash Programming Port ini mempunyai internal pull up dan berfungsi sebagai input dengan memberikan logika 1 Sebagai output port ini dapat memberikan output sink ke empat buah input TTL |
| 21…28 | P2.0…P2.7 | A8…A15 | Port 2 berfungsi sebagai I/O biasa atau high order address, pada saat mengakses memory secara 16 bit (Movx @Dptr) Pada saat mengakes memory secara 8 bit, (Mov @Rn) port ini akan mengeluarkan isi dari P2 Special Function Register Port ini mempunyai internal pull up dan berfungsi sebagai input dengan memberikan logika 1 Sebagai output port ini dapat memberikan output sink Ke empat buah input TTL |
| 10…17 | | Port 3 | Sebagai I/O biasa Port 3 mempunyai sifat yang sama dengan Port 1 maupun Port 2 Sedangkan sebagai fungsi spesial port-port ini mempunyai keterangan sebagai berikut |
| 10 11 12 13 14 15 16 17 | P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7 | RXD TXD INT0 INT1 T0 T1 WR RD | Port Serial Input Port Serial Output Port External Interrupt 0 Port External Interrupt 1 Port External Timer 0 Input Port External Timer 1 Input External Data Memory Write Strobe External Data Memory Read Strobe |
| 9 | RST | | Reset akan aktif dengan memberikan input high selama 2 cycle |
| 30 | ALE | PROG | Pin ini dapat berfungsi sebagai Address Latch Enable (ALE) |
| | | | yang me-latch low byte address pada saat mengakses |
| | | | memori eksternal Sedangkan pada saat Flash Programming (PROG) berfungsi sebagai pulse input untuk Pada operasi normal ALE akan mengeluarkan sinyal clock sebesar 1/16 frekwensi oscillator kecuali pada saat mengakses memori eksternal Sinyal clock pada pin ini dapat pula didisable dengan men-set bit 0 dari Special Function Register di alamat 8EH ALE hanya akan aktif pada saat mengakses memori ekster- nal (MOVX & MOVC) |
| 29 | PSEN | | Pin ini berfungsi pada saat mengeksekusi program yang ter- letak pada memori eksternal. PSEN akan aktif dua kali setiap cycle |
| 31 | EA | VP | Pada kondisi low maka pin ini akan berfungsi sebagai EA yaitu mikrokontroler akan menjalankan program yang ada pada memori eksternal setelah sistem direset Apabila berkondisi high maka pin ini akan berfungsi untuk menjalankan program yang ada pada memori internal Pada saat Flash Programming pin ini akan mendapat te- gangan 12 Volt (VP) |
| 19 | XTAL1 | | Input Oscillator |
| 18 | XTAL2 | | Output Oscillator |
Struktur Memori
Memori dari 89C51 terbagi menjadi:
RAM Internal
- Register Bank
- Bit addressable RAM
- General Purpose RAM
Register Fungsi Khusus (Special Function Register)
Flash PEROM
Memori Eksternal
RAM Internal & Register Fungsi Khusus

ram internal & register fungsi khusus
Accumulator (ACC)
- Terletak pada alamat E0H
- Operasi Aritmatik (Add A,#05H)
- Operasi Logika (Anl A,#05H)
- Akses Memori Eksternal (Movx A,@DPTR)
- Untuk fungsi umum.
Register B
- Terletak pada alamat B0H
- Fungsi umum
- Digunakan bersama Acc untuk operasi Aritmatik (Mul AB).
Program Status Word (D0H)

PSW
Port
- Port 0 (80H)
- Port 1 (90H)
- Port 2 (A0H)
- Port 3 (B0H)

Data Pointer (DPTR)
- Terdiri dari dua register yaitu o DPH (82H) o DPL (83H)
- Untuk akses data atau source code di memori Flash PEROM atau Memori Eksternal.

Stack Pointer
Flash PEROM
Kapasitas 4 Kb
Alamat 000H hingga FFFH - Diakses bila:
- Pin EA/VP 89C51 berlogika high
- Ada perintah untuk memanggil instruksi di alamat tersebut - Dapat diproteksi dengan:
- Lock Bit 1, tidak dapat dibaca oleh program yang berada di memori eksternal
- Lock Bit 2, tidak dapat dibaca oleh peralatan Programmer o Lock Bit 3, sama sekali tidak dapat mengakses/diakses oleh/dari memori eksternal.
External Memory
- Dibutuhkan untuk: o Memori berkapasitas besar o Emulasi Program
- Sistem pengalamatan Multiplex Addressing.
Multiplex Addressing
Pengalamatan 89C51 ke memori eksternal dipisah menjadi;

Low byte address bus dimultiplex dengan data bus oleh D Latch.

Control Bus
Akses Memori Eksternal terdiri dari:
- Pembacaan Data
- Pembacaan Program (Kode)
- Penulisan Data/Kode
Proses Pembacaan
Proses pembacaan dapat dianalogikan sebagai proses membaca dari halaman tertentu dari sebuah buku di mana pada proses tersebut dibutuhkan:
- Halaman dari tulisan yang akan dibaca = Alamat Memori
- Perintah untuk membaca = Sinyal Read untuk Data dan Sinyal PSEN untuk kode.
Pembacaan Data dari Memori Eksternal
Instruksi:
MOV DPTR,#[address] ; Penentuan lokasi data yang akan dibaca
MOVX A,@DPTR ; Perintah pembacaan data sekaligus meng-
; ambil data tersebut dan disimpan ke Aku-
; mulator A
Timing

Timing Diagram Pembacaan Data dari External Memory (Diambil dari Data Sheet AT89C51)
Pembacaan Kode dari Memori Eksternal

Timing Diagram Pembacaan Kode dari External Memory (diambil dari Data Sheet AT89C51)
Penulisan Data ke Memori Eksternal
Proses penulisan dapat dianalogikan dengan menuliskan suatu tulisan ke halaman tertentu dalam buku di mana dibutuhkan.
- Tulisan yang akan ditulis = Data
- Halaman yang akan ditulisi = Alamat
- Perintah menulis = Sinyal Write

Gambar 1.11 Timing Diagram Penulisan Data ke External Memory diambil dari Data Sheet AT89C51)