memori program mikrokontroler at89sxx
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 :
FFFFh
FFFFh
ROM
Eksternal
ROM
Eksternal
60 KB
1000h
0FFFh
PC
64 KB
ROM
Internal
64 KB
64 KB
PC
4 KB
0000h
0000h
EA = 1
EA = 0
Piranti
tanpa ROM
(8031)
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.
Sambungan ROM Eksternal
Untuk ekspansi (pengembangan) ROM eksternal, pin PSEN , 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.
+ 10 F
_ -
8k2
20 pF
-
74373
Vcc P0.0
P0.1
RESET P0.2
P0.3
P0.4
P0.5
P0.6
X2
P0.7
12 M
ALE
X1
20 pF
-
1D
2D
3D
4D
5D
6D
7D
8D
1Q
2Q
3Q
4Q
5Q
6Q
7Q
8Q
A0
A1
A2
A3
A4
A5
A6
A7
G
OC
CE
OE
Vcc : 28
EA/Vpp
MCS51
O0
O1
O2
O3
O4
O5
O6
O7
Vcc : 20 Gnd : 10
PSEN
Gnd
2764
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
A8
A9
A10
A11
A12
A13
A14
A15 Gnd : 14
Gambar : 2-3-2
-
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 PSEN 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.
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 menskip 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 machinecycles, 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 INT 0
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.
+ 10 F
_ -
8k2
20 pF
-
74373
Vcc P0.0
P0.1
RESET P0.2
P0.3
P0.4
P0.5
P0.6
X2
P0.7
12 M
ALE
X1
20 pF
-
2764
1D
2D
3D
4D
5D
6D
7D
8D
1Q
2Q
3Q
4Q
5Q
6Q
7Q
8Q
A0
A1
A2
A3
A4
A5
A6
A7
G
OC
CE
Vcc : 20 Gnd : 10
PSEN
OE
Vcc : 28
EA/Vpp
Gnd
MCS51
O0
O1
O2
O3
O4
O5
O6
O7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
A8
A9
A10
A11
A12
Vcc
Gambar : 2-3-3
-
PGM
VPP
Gnd : 14
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
JMP MAIN
ORG 0003h
JMP INT0SUB
ORG 000Bh
JMP TIM0SUB
ORG 0100h
MAIN :
………………
………………
………………
INT0SUB :
………
………
………
RETI
TIM0SUB :
………
………
………
RETI
END
; masukan RESET
; lompat ke program utama
; masukan INT0
; lompat ke routine layanan interupsi INT0
; masukan TIMER0
; lompat ke routine layanan interupsi TIMER0
; alamat awal
; program utama
; routine layanan interupsi INT0
; routine layanan interupsi TIMER0
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 :
FFFFh
FFFFh
ROM
Eksternal
ROM
Eksternal
60 KB
1000h
0FFFh
PC
64 KB
ROM
Internal
64 KB
64 KB
PC
4 KB
0000h
0000h
EA = 1
EA = 0
Piranti
tanpa ROM
(8031)
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.
Sambungan ROM Eksternal
Untuk ekspansi (pengembangan) ROM eksternal, pin PSEN , 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.
+ 10 F
_ -
8k2
20 pF
-
74373
Vcc P0.0
P0.1
RESET P0.2
P0.3
P0.4
P0.5
P0.6
X2
P0.7
12 M
ALE
X1
20 pF
-
1D
2D
3D
4D
5D
6D
7D
8D
1Q
2Q
3Q
4Q
5Q
6Q
7Q
8Q
A0
A1
A2
A3
A4
A5
A6
A7
G
OC
CE
OE
Vcc : 28
EA/Vpp
MCS51
O0
O1
O2
O3
O4
O5
O6
O7
Vcc : 20 Gnd : 10
PSEN
Gnd
2764
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
A8
A9
A10
A11
A12
A13
A14
A15 Gnd : 14
Gambar : 2-3-2
-
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 PSEN 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.
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 menskip 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 machinecycles, 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 INT 0
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.
+ 10 F
_ -
8k2
20 pF
-
74373
Vcc P0.0
P0.1
RESET P0.2
P0.3
P0.4
P0.5
P0.6
X2
P0.7
12 M
ALE
X1
20 pF
-
2764
1D
2D
3D
4D
5D
6D
7D
8D
1Q
2Q
3Q
4Q
5Q
6Q
7Q
8Q
A0
A1
A2
A3
A4
A5
A6
A7
G
OC
CE
Vcc : 20 Gnd : 10
PSEN
OE
Vcc : 28
EA/Vpp
Gnd
MCS51
O0
O1
O2
O3
O4
O5
O6
O7
P2.0
P2.1
P2.2
P2.3
P2.4
P2.5
P2.6
P2.7
A8
A9
A10
A11
A12
Vcc
Gambar : 2-3-3
-
PGM
VPP
Gnd : 14
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
JMP MAIN
ORG 0003h
JMP INT0SUB
ORG 000Bh
JMP TIM0SUB
ORG 0100h
MAIN :
………………
………………
………………
INT0SUB :
………
………
………
RETI
TIM0SUB :
………
………
………
RETI
END
; masukan RESET
; lompat ke program utama
; masukan INT0
; lompat ke routine layanan interupsi INT0
; masukan TIMER0
; lompat ke routine layanan interupsi TIMER0
; alamat awal
; program utama
; routine layanan interupsi INT0
; routine layanan interupsi TIMER0