Masih ingat dengan
seri E2PROM AT93C46/56/66? Memori kapasitas kecil nan murah meriah
tapi sangat berguna untuk aplikasi-aplikasi sederhana yang sering aku buat.
Tulisan ini adalah lanjutan dari tulisan sebelumnya tentang “Masih Seputar
Modul E2PROM AT93C46/56/66”
Memori yang dikemas
dengan 8 penyemat dengan mengusung antarmuka serial 3 kabel yaitu CS, SK dan
DI/DO, ditambah catu daya menjadi 5 penyemat. Serpih memori ini dapat
diorganisasikan dalam format data 8 bit atau 16 bit dengan menetapkan penyemat
nomor 6 (ORG) ke GND untuk format 8 bit dan ke VCC untuk format 16 bit.
Kali ini kita akan
membuatkan modul yang dapat digunakan untuk antarmuka memori ini yaitu jenis
AT93C56/66 dengan format 16 bit. AT93C56 adalah serpih memori dengan kapasitas 2048
bit dan dengan organisasi memori 16 bit dapat menampung data sebanyak 128 word.
Sementara AT93C66 memiliki kapasitas 4096 bit dan dengan organisasi memori 16
bit dapat menampung data sebanyak 256 word
Pada modul yang
akan dibuat terdiri dari 7 perintah dalam bentuk subrutin yang berkaitan dengan
pengoperasian AT93C56/66.
Daftar Perintah
untuk AT93C56/66
Perintah
|
SB
|
Op
Code
|
Alamat
|
Data
|
Komentar
|
||
x 8
|
x 16
|
x 8
|
x 16
|
||||
READ
|
1
|
10
|
A8 – A0
|
A7 – A0
|
|
|
Membaca data yang
tersimpan dalam memori pada alamat tertentu
|
EWEN
|
1
|
00
|
11XXXXXXX
|
11XXXXXX
|
|
|
Membolehkan seluruh
mode perintah
|
ERASE
|
1
|
11
|
A8 – A0
|
A7 – A0
|
|
|
Menghapus memori
pada lokasi An – A0
|
ERAL
|
1
|
00
|
10XXXXXXX
|
10XXXXXX
|
|
|
Menghapus seluruh
lokasi memori. Hanya dapat dilaksanakan pada Vcc=4V5 sampai 5V5
|
WRITE
|
1
|
01
|
A8 – A0
|
A7 – A0
|
D7 – D0
|
D15 – D0
|
Menulis memori pada
lokasi An – A0
|
WRAL
|
1
|
00
|
01XXXXXXX
|
01XXXXXX
|
D7 – D0
|
D15 – D0
|
Menulis ke seluruh
lokasi memori. Hanya dapat dilaksanakan pada Vcc=4V5 sampai 5V5
|
EWDS
|
1
|
00
|
00XXXXXXX
|
00XXXXXX
|
|
|
Memproteksi dari
seluruh perintah hapus dan tulis
|
Berikut adalah
modul berisi subrutin yang digunakan untuk antarmuka dengan AT93C56/66 dengan
mode data dalam organisasi 16 bit.
;Subrutin Membaca Data AT93C56/66
; Input : DPTR = Address
; Output : B = Data MSB
; A = Data LSB
AT93C46_READ:
push 07h
push 06h
mov r6, #2
mov r7, #255
clr Fail
setb RST
mov a, #00000110b
acall WriteSerialBit
mov a, dpl
acall WriteSerialBit
setb DIO
Dummy:
jb DIO, WaitTimer3
ajmp DataReady
WaitTimer3:
djnz r7, Dummy
mov r7, #255
djnz r6, Dummy
setb Fail
ajmp EndReadEEPROM
DataReady:
acall ReadSerialBit
xch a, b
acall ReadSerialBit
EndReadEEPROM:
clr RST
pop 06h
pop 07h
ret
;Subrutin Mengijinkan Perintah Hapus/Tulis Pada AT93C56/66
AT93C46_EWEN:
push acc
setb RST
mov a, #00000100b
acall WriteSerialBit
mov a, #11000000b
acall WriteSerialBit
clr RST
pop acc
ret
;Subrutin Menghapus Data Di Lokasi Memori AT93C56/66
;Input : DPTR = Address
AT93C46_ERASE:
push acc
setb RST
mov a, #00000111b
acall WriteSerialBit
mov a, dpl
acall WriteSerialBit
acall CheckEEPROM
clr RST
ret
;Subrutin Menghapus Seluruh Memori Data AT93C56/66
AT93C46_ERAL:
push acc
setb RST
mov a, #00000100b
acall WriteSerialBit
mov a, #10000000b
acall WriteSerialBit
acall CheckEEPROM
clr RST
pop acc
ret
;Subrutin Menulis Data AT93C46
;Input : DPTR = Address
; A = Data
AT93C46_WRITE:
push acc
push b
setb RST
mov a, #00000101b
acall WriteSerialBit
mov a, dpl
acall WriteSerialBit
pop acc
acall WriteSerialBit
pop acc
acall WriteSerialBit
acall CheckEEPROM
clr RST
ret
;Subrutin Menulis Data Ke Seluruh Lokasi Memori AT93C56/66
;Input : B = Data MSB
; A = Data LSB
AT93C46_WRAL:
push acc
push b
setb RST
mov a, #00000100b
acall WriteSerialBit
mov a, #01000000b
acall WriteSerialBit
pop acc
acall WriteSerialBit
pop acc
acall WriteSerialBit
acall CheckEEPROM
clr RST
ret
;Subrutin Memproteksi Dari Perintah Hapus/Tulis Pada AT93C56/66
AT93C46_EWDS:
push acc
setb RST
mov a, #00000100b
acall WriteSerialBit
mov a, #0
acall WriteSerialBit
clr RST
pop acc
ret
ResetChip:
clr CLK
setb RST
clr RST
ret
WriteSerialBit:
push acc
push 07h
mov r7, #8
NxtWRBit:
rlc a
jc WRBitH
clr DIO
ajmp WRClk
WRBitH:
setb DIO
WRClk:
clr CLK
setb CLK
djnz r7, NxtWRBit
pop 07h
pop acc
ret
ReadSerialBit:
push 07h
push 06h
clr a
mov r7, #8
setb DIO
RDClk:
clr CLK
setb CLK
jb DIO, RDBitH
clr c
ajmp ShiftInBit
RDBitH:
setb C
ShiftInBit:
rlc a
djnz r7, RDClk
pop 06h
pop 07h
ret
CheckEEPROM:
push 07h
push 06h
push 05h
mov r5, #2
mov r7, #255
mov r6, #255
clr Fail
setb DIO
clr RST
setb RST
WaitBusy:
clr CLK
setb CLK
jb DIO, WaitTimer1
mov r5, #2
ajmp WaitReady
WaitTimer1:
djnz r7, WaitBusy
mov r7, #255
djnz r5, WaitBusy
setb Fail
ajmp Ready
WaitReady:
clr CLK
setb CLK
jnb DIO, WaitTimer2
ajmp Ready
WaitTimer2:
djnz r6, WaitReady
mov r6, #255
djnz r5, WaitReady
setb Fail
Ready:
pop 05h
pop 06h
pop 07h
ret
Modul ini aku
namai: 93C66_16.TXT
Udah ya, makasih udah baca postingan aku. Semoga bisa bermanfaat dan jika
mungkin bisa diterapkan oleh sobat semua.
Salam....
Tidak ada komentar:
Posting Komentar