Translate

Masih Seputar Modul E2PROM AT93C56/66 Dengan Format 16 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 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