Translate

Masih Seputar Modul E2PROM AT93C46 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 AT93C46 dengan format 16 bit. AT93C46 adalah serpih memori dengan kapasitas 1024 bit. Dengan organisasi memori 16 bit maka dapat menampung data sebanyak 64 word.



Pada modul yang akan dibuat terdiri dari 7 perintah dalam bentuk subrutin yang berkaitan dengan pengoperasian AT93C46.



Berikut adalah modul berisi subrutin yang digunakan untuk antarmuka dengan AT93C46 dengan mode data dalam organisasi 16 bit.

;Subrutin Membaca Data AT93C46
;     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, #00000001b
      acall WriteSerialBit
      mov   a, dpl
      anl   a, #00111111b
      orl   a, #10000000b
      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 AT93C46

AT93C46_EWEN:
      push  acc
      setb  RST              
      mov   a, #00000001b
      acall WriteSerialBit
      mov   a, #00110000b
      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, #00000001b
      acall WriteSerialBit
      mov   a, dpl
      orl   a, #11000000b
      acall WriteSerialBit
      acall CheckEEPROM
      clr   RST
      pop   acc
      ret

;Subrutin Menghapus Seluruh Memori Data AT93C46

AT93C46_ERAL:
      push  acc
      setb  RST
      mov   a, #00000001b
      acall WriteSerialBit
      mov   a, #00100000b
      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, #00000001b
      acall WriteSerialBit
      mov   a, dpl
      anl   a, #00111111b
      orl   a, #01000000b
      acall WriteSerialBit
      pop   acc
      acall WriteSerialBit
      pop   acc
      acall WriteSerialBit
      acall CheckEEPROM
      clr   RST
      ret

;Subrutin Menulis Data Ke Seluruh Lokasi Memori AT93C46
;Input : B = Data MSB
;       A = Data LSB

AT93C46_WRAL:
      push  acc
      push  b
      setb  RST
      mov   a, #00000001b
      acall WriteSerialBit
      mov   a, #00010000b
      acall WriteSerialBit
      pop   acc
      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, #00000001b
      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: 93C46_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