MEMORI PROGRAM (AT89S51)
Oleh : Sumarna, Jurdik Fisika, FMIPA, UNY E-mail : [email protected]
Memori program digunakan untuk menyimpan kode instruksi (perintah). Program memori pada keluarga Intel 8051 merupakan Mask-ROM atau PROM, pada Intel 8751 adalah EPROM, pada ATMEL AT89C51/52 merupakan EEPROM, dan pada Philips 8051 adalah Flash. Keluarga 8051 memuat 4 KB memori program internal, 0000h – 0FFFh, dan dapat diekspansi hingga 60 KB dengan memori program eksternal. Alamat memori program ditentukan lewat muatan (isi) dari pencacah program (PC = Program Counter). Peta memori program 8051 adalah sebagai berikut :
Jika kedua ROM internal dan eksternal digunakan, pin EA harus disambung ke high. Ketika isi pencacah program kurang dari 4095, CPU mengambil (fetches) suatu kode yang disimpan pada ROM internal, sebaliknya, CPU tersebut mengambil suatu kode yang tersimpan di ROM eksternal. Jika pin EA disambung ke ground, semua penjemputan program dilangsungkan ke ROM eksternal. Piranti yang tanpa ROM seperti 8031 harus memiliki pin ini yang secara eksternal dipertahankan (strapped) ke potensial ground yang mengijinkan (enable) mereka untuk mengeksekusi secara layak (properly). Piranti Maks ROM dapat juga digunakan sebagai piranti tanpa ROM 8051 jika ROM eksternal ditambahkan.
ROM Eksternal
60 KB
ROM Internal
4 KB FFFFh
0000h 1000h 0FFFh
EA = 1
64 KB
PC
ROM Eksternal
64 KB FFFFh
0000h
EA = 0 PC
64 KB
Sambungan ROM Eksternal
Untuk ekspansi (pengembangan) ROM eksternal, pin P SEN, ALE, P0, P2 dan sebuah pencantol (latch) alamat eksternal seperti SN-74373 harus digunakan. Gambar berikut menunjukkan persambungan EPROM yang dikembangkan menjadi 64 KB dan 8 KB. Berikut ini adalah gambar ekspansi memori program pada 8051.
IC-74373 berisi 8 D-Latch tiga-keadaan. Selama waktu byte rendah dari pencacah program valid pada P0, sinyal ALE mendetak byte ini ke dalam suatu alamat tercantol pada 74373. Meanwhile, P2 mengeluarkan byte tinggi dari pencacah program. Kemudian P SEN men-strobe EPROM dan suatu byte kode dibaca oleh CPU. Pada gambar 2-3-2 EPROM 64 K eksternal tersambung sedemikian jika pin EA dihubungkan ke ground. Pin EA yang ditunjukkan pada gambar 2-3-3 distrap ke Vcc untuk ekspansi EPROM 8 K, oleh karena itu total ruang memori program sebesar 12 KB. Karena serpih 27512 merupakan EPROM 64 KB dengan 16 jalur alamat, maka kedua jalur P0 dan P2 harus digunakan. IC- 2764 merupakan EPROM 8 KB dengan 13 jalur alamat, sehingga diperlukan P0 dan P2.0 – P2.4.
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 PSEN
EA/Vpp Vcc
Gnd RESET
X2
X1
MCS51 8k2
10 F - _ +
ALE
1D 1Q 2D 2Q 3D 3Q 4D 4Q 5D 5Q 6D 6Q 7D 7Q 8D 8Q
G OC 74373
Vcc : 20 Gnd : 10
A0 A1 A2 A3 A4 A5 A6 A7
O0 O1 O2 O3 O4 O5 O6 O7
A8 A9 A10 A11 A12 A13 A14 A15 CE
OE 12 M
20 pF -
[image:2.595.90.536.183.547.2]20 pF -
Gambar : 2-3-2 -
Vektor Interupsi
Setiap interupsi ditandai (assigned) dengan sebuah lokasi tetap pada bagian rendah memori program. Interupsi menyebabkan CPU melompat ke lokasi itu tempat ia commences execution dari suatu layanan routine (service routine). Lokasi layanan interupsi merupakan ruang dengan interval 8 byte. Jika sebuah routine layanan interupsi cukup pendek, seluruhnya dapat berada di dalam interval 8 byte itu. Routine layanan yang lebih panjang dapat menggunakan instruksi lompat untuk men-skip over subsequent lokasi interupsi, jika interupsi-interupsi yang lain digunakan. Lokasi-lokasi layanan interupsi itu adalah :
1. Lokasi memori 0000 h.
Masukan reset sistem. Keadaan tinggi pada pin RESET untuk dua machine-cycles, 8051 tersebut di reset. Setelah reset, CPU memulai eksekusi dari lokasi 0000 h.
2. Lokasi memori 0003 h.
Lokasi layanan interupsi untuk interupsi eksternal 0. Ketika masukan INT0 menemukan/menjumpai/mendeteksi sinyal gigir-jatuh (falling-edge) atau sinyal pemicu tingkat rendah (low-level triggering), maka CPU menjemput kode operasi (opcode) dari alamat 0003 h.
P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7
P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 PSEN
EA/Vpp Vcc
Gnd RESET
X2
X1
MCS51 8k2
10 F - _ +
ALE
1D 1Q 2D 2Q 3D 3Q 4D 4Q 5D 5Q 6D 6Q 7D 7Q 8D 8Q
G OC 74373
Vcc : 20 Gnd : 10
A0 A1 A2 A3 A4 A5 A6 A7
O0 O1 O2 O3 O4 O5 O6 O7
A8 A9 A10 A11 A12 CE
OE 12 M
20 pF -
[image:3.595.87.532.379.749.2]20 pF -
Gambar : 2-3-3 -
Gnd : 14 Vcc : 28 2764
3. Lokasi memori 000B h.
Lokasi layanan interupsi untuk timer/counter 0. Ketika terjadi limpahan (overflow) pada timer/counter 0, CPU memulai eksekusi dari lokasi 000B h.
4. Lokasi memori 0013 h.
Lokasi layanan interupsi untuk interupsi eksternal 1. Ketika masukan INT1 menemukan/menjumpai/mendeteksi sinyal gigir-jatuh (falling-edge) atau sinyal pemicu tingkat rendah (low-level triggering), maka CPU menjemput kode operasi (opcode) dari alamat 0013 h.
5. Lokasi memori 001B h.
Lokasi layanan interupsi untuk timer/counter 1. Ketika terjadi limpahan (overflow) pada timer/counter 1, CPU memulai eksekusi dari lokasi 001B h.
6. Lokasi memori 0023 h.
Lokasi layanan interupsi untuk port serial. Jika port serial 8051 lengkap mengirim (transmit) atau menerima (receive), sebuah permintaan interupsi terjadi dan CPU memulai dari lokasi 0023 h jika permintaan tersebut disetujui (acknowledged).
7. Lokasi memori 002B h.
Lokasi layanan interupsi untuk timer/counter 2 pada 8052. Ketika terjadi limpahan (overflow) pada timer/counter 2, maka CPU memulai eksekusi dari lokasi 002B h.
Suatu contoh kode assembly 8051 dengan routine layanan interupsi ditunjukkan sebagai berikut :
ORG 0000h ; masukan RESET
JMP MAIN ; lompat ke program utama
ORG 0003h ; masukan INT0
JMP INT0SUB ; lompat ke routine layanan interupsi INT0
ORG 000Bh ; masukan TIMER0
JMP TIM0SUB ; lompat ke routine layanan interupsi TIMER0
ORG 0100h ; alamat awal
MAIN : ……… ; program utama
……… ………
INT0SUB : ……… ; routine layanan interupsi INT0
……… ………
RETI
TIM0SUB : ……… ; routine layanan interupsi TIMER0
……… ………
RETI