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.
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
AT93C46 dengan format 8 bit. AT93C46 adalah serpih memori dengan kapasitas 1024
bit. Dengan organisasi memori 8 bit maka dapat menampung data sebanyak 128
byte.
Pada modul yang
akan dibuat terdiri dari 7 perintah dalam bentuk subrutin yang berkaitan dengan
pengoperasian AT93C56/66.
Berikut adalah
modul berisi subrutin yang digunakan untuk antarmuka dengan AT93C56/66 dengan
mode data dalam organisasi 8 bit.
;Subrutin Membaca Data AT93C46
; Input : DPTR = Address
; Output : A = Data
AT93C46_READ:
push 07h
push 06h
mov r6, #2
mov r7, #255
clr Fail
setb RST
mov a, #00000011b
acall WriteSerialBit
mov a, dpl
anl a, #01111111b
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 AT93C46
AT93C46_EWEN:
push acc
setb RST
mov a, #00000010b
acall WriteSerialBit
mov a, #01100000b
acall WriteSerialBit
clr RST
pop acc
ret
;Subrutin Menghapus Data Di Lokasi Memori AT93C46
;Input : DPTR = Address
AT93C46_ERASE:
push acc
setb RST
mov a, #00000011b
acall WriteSerialBit
mov a, dpl
orl a, #10000000b
acall WriteSerialBit
acall CheckEEPROM
clr RST
pop acc
ret
;Subrutin Menghapus Seluruh Memori Data AT93C46
AT93C46_ERAL:
push acc
setb RST
mov a, #00000010b
acall WriteSerialBit
mov a, #01000000b
acall WriteSerialBit
acall CheckEEPROM
clr RST
pop acc
ret
;Subrutin Menulis Data AT93C46
;Input : DPTR = Address
; A = Data
AT93C46_WRITE:
push acc
setb RST
mov a, #00000010b
acall WriteSerialBit
mov a, dpl
orl a, #10000000b
acall WriteSerialBit
pop acc
acall WriteSerialBit
acall CheckEEPROM
clr RST
ret
;Subrutin Menulis Data Ke Seluruh Lokasi Memori AT93C46
;Input : A = Data
AT93C46_WRAL:
push acc
setb RST
mov a, #00000010b
acall WriteSerialBit
mov a, #00100000b
acall WriteSerialBit
pop acc
acall WriteSerialBit
acall CheckEEPROM
clr RST
ret
;Subrutin Memproteksi Dari Perintah Hapus/Tulis Pada AT93C46
AT93C46_EWDS:
push acc
setb RST
mov a, #00000010b
acall WriteSerialBit
mov a, #00000000b
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: 93C46_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