EEPROM 93C46
the clock is very high.
below is my code,use pic16f72 ,oxc 4MHZ
SENDC:
BANK_1
MOVLW B'00010000' ;
MOVWF TRISA ;
BANK_0
;GOTO $+1
BCF CS_P
BCF CLK_P ;
MOVLW 09H ;
MOVWF R1 ;
BCF DIO_P ;
SETC ;
CLRWDT ;
BSF CS_P
CONTINUE ;
BTFSC STATUS,CARRY ;
BSF DIO_P ;
GOTO $+1 ; WAIT 2 US
BSF CLK_P ;
RLF COMMAND,1 ;
GOTO $+1 ; WAIT 2 US
BCF CLK_P ;
BCF DIO_P ;
DECFSZ R1,1 ;
GOTO CONTINUE ;
RETLW 0 ;
;********************************** ;
;** READ SECTION (TWICE) ** ;
;********************************** ;
EEREAD ;PAGE1
MOVFW ADDRESS
EEREAD0
BANK_0
MOVWF OUTBYT
BSF OUTBYT,7 ; COMMAND = READ
BCF OUTBYT,6 ; COMMAND = READ
; CALL OPCODE ; SEND COMMAND
CALL SENDC ; SEND COMMAND TO EEPROM
READ ;
BANK_1
MOVLW B'00010100' ;
MOVWF TRISA ;B11001111
BANK_0
BSF CS_P
MOVLW 16D ;
MOVWF R1 ;
READ_0 ;
GOTO READDD ;
READDD ;
BSF CLK_P ;
CLRWDT ;
CLRC ;
BTFSC DIO_P ;
SETC ;
RLF RW0,1 ;
RLF RW1,1
BCF CLK_P ;
GOTO DLB ;
DLB ;
DECFSZ R1,1 ;
GOTO READ_0 ;
GOTO END_PRM ;
;********************************** ;
;** WRITE TO 93LC46 ** ;
;********************************** ;
EEWRITE ;PAGE1
WRITE0 MOVLW 30H ; WRITE ENABLE COMMAND
MOVWF OUTBYT
CALL SENDC ; SEND COMMAND TO EEPROM
BCF CS_P ;
WRITE1 MOVFW ADDRESS ; GET EEPROM ADDRESS
MOVWF OUTBYT
BCF OUTBYT,7 ; WRITE COMMAND
BSF OUTBYT,6 ; WRITE COMMAND
CALL SENDC ; SEND COMMAND TO EEPROM
WRITE ;
BANK_1
MOVLW B'00010000'
MOVWF TRISA ;
BANK_0
MOVLW 16D ;16BIT FOR ONE WORD
MOVWF R1 ;
WRITE_0 ;
BCF DIO_P ;
RLF RW0,1 ;
RLF RW1,1 ;
BTFSC STATUS,CARRY ;
BSF DIO_P ;
GOTO $+1 ; WAIT 2 US
BSF CLK_P ;
GOTO $+1 ; WAIT 2 US
CLRWDT ;
BCF CLK_P ;
BCF DIO_P ;
DECFSZ R1,1 ;
GOTO WRITE_0 ;
BCF CS_P ;
;GOTO SDF ;
SDF ;
MOVLW 0X0C
MOVWF RW1 ;
BSF CS_P ;
CHK
DECFSZ RW0,1
GOTO CHK ;
DECFSZ RW1,1
GOTO CHK ;
;
BCF CS_P ;
CLRF OUTBYT
CALL SENDC ; SEND COMMAND TO EEPROM
END_PRM ;
BCF CS_P ;
RETLW 0