Translate

Masih Seputar Modul E2PROM AT93C56/66 Dengan Format 8 Bit.



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