Translate

Masih Seputar Modul E2PROM AT93C46 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.

  
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