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 8 bit. AT93C56 adalah serpih memori dengan kapasitas 2048
bit dan dengan organisasi memori 8 bit dapat menampung data sebanyak 256 byte.
Sementara AT93C66 memiliki kapasitas 4096 bit dan dengan organisasi memori 8
bit dapat menampung data sebanyak 512 byte.
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 8 bit.
;Subrutin Membaca Data AT93C56/66
; Input : DPTR = Address
; Output : A = Data
AT93C46_READ:
push 07h
push 06h
mov r6, #2
mov r7, #255
clr Fail
setb RST
mov a, dph
anl a, #00000001b
orl a, #00001100b
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
EndReadEEPROM:
clr RST
pop 06h
pop 07h
ret
;Subrutin Mengijinkan Perintah Hapus/Tulis Pada AT93C56/66
AT93C46_EWEN:
push acc
setb RST
mov a, #00001001b
acall WriteSerialBit
mov a, #10000000b
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, dph
anl a, #00000001b
orl a, #00001110b
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, #00001001b
acall WriteSerialBit
mov a, #0
acall WriteSerialBit
acall CheckEEPROM
clr RST
pop acc
ret
;Subrutin Menulis Data AT93C56/66
;Input : DPTR = Address
; A = Data
AT93C46_WRITE:
push acc
setb RST
mov a, dph
anl a, #00000001b
orl a, #00001010b
acall WriteSerialBit
mov a, dpl
acall WriteSerialBit
pop acc
acall WriteSerialBit
acall CheckEEPROM
clr RST
ret
;Subrutin Menulis Data Ke Seluruh Lokasi Memori AT93C56/66
;Input : A = Data
AT93C46_WRAL:
push acc
setb RST
mov a, #00001000b
acall WriteSerialBit
mov a, #10000000b
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, #00001000b
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_8.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