eprom at24c16a problem

Status
Not open for further replies.

esconele

New Member
hello,
i'm using at24c16a with at89c55wd i followed the instructions given in the datasheet of eprom but its not working if i write something to eprom its not reading the data back where i'm doing wrong pls tell me i've attached code and schematic here.
thank you.
code:
$MOD51
ORG 0000H
LJMP MAIN
SCL BIT P3.5
SDA BIT P3.4


LASTREAD BIT FLAGS.0
RD_WR_ROM BIT FLAGS.4
ACK BIT FLAGS.5
BUS_FLT BIT FLAGS.6
_2W_BUSY BIT FLAGS.7
BITCNT DATA 21H
BYTECNT DATA 22H

ADDHI DATA 050H ; ADDRESS LOCATION FOR 24C16 SERIAL-
; EEPROM
ADDLO DATA 051H
COUNT DATA 052H ; STORES THE VALUE OF NO OF INTERRUPT
TDATA DATA 053H
RWDATA DATA 054H


SCL_HIGH MACRO
SETB SCL ; SET SCL HIGH
JNB SCL,$ ; LOOP UNTIL STRONG 1 ON SCL
ENDM


MAIN:

LCALL BEGIN

SETB SDA ; ENSURE SDA HIGH
SCL_HIGH ; ENSURE SCL HIGH
CLR ACK ; CLEAR STATUS FLAGS
CLR BUS_FLT
CLR _2W_BUSY
LCALL SEND_START
MOV A,#00H ;READING FROM LOCATION 0000H FOR COUNT
RL A
ORL A,#0A0H
LCALL SEND_BYTE
MOV A,#00H
LCALL SEND_BYTE
MOV A,#00H
LCALL SEND_BYTE
LCALL SEND_STOP


WER:

LCALL NUMBER1



JNB P0.1,SET12
SJMP WER



SET12:LCALL ESCCLEAR
LJMP SETDATA




BEGIN:
LCALL LCD_INIT
RET
READ_BYTE:
MOV BITCNT,#08H; SET COUNTER FOR 8-BITS DATA
MOV A,#00H
SETB SDA ; SET SDA HIGH TO ENSURE LINE
; FREE
READ_BITS:
SCL_HIGH ; TRANSITION SCL LOW-TO-HIGH
MOV C,SDA ; MOVE DATA BIT INTO CARRY
RLC A ; ROTATE CARRY-BIT INTO ACC.0
CLR SCL ; TRANSITION SCL HIGH-TO-LOW
DJNZ BITCNT,READ_BITS
; LOOP FOR 8-BITS
JB LASTREAD,ACKN
; CHECK TO SEE IF THIS IS
; THE LAST READ
CLR SDA ; IF NOT LAST READ SEND ACK-BIT

ACKN:
SCL_HIGH ; PULSE SCL TO TRANSMIT ACKNOWLEDGE
CLR SCL ; OR NOT ACKNOWLEDGE BIT
RET

SEND_START:
SETB SCL
LCALL DELU
SETB SDA
LCALL DELU
CLR SDA
CLR SCL
RET

DELU:MOV 23H,#02H
TUJNZ 23H,TU
RET

SEND_STOP:
SETB SCL
LCALL DELU
CLR SDA
LCALL DELU
SETB SDA ; DELAY FOR BUS TIMING
RET
DELAY_1:

NOP
RET
SEND_BYTE:
MOV BITCNT,#08H; SET COUNTER FOR 8-BITS
SB_LOOP:
JNB ACC.7,NOTONE; CHECK TO SEE IF BIT-7 OF
SETB SDA ; ACC IS A 1, AND SET SDA HIGH
JMP ONET
NOTONE:
CLR SDA ; CLR SDA LOW
ONET:
SCL_HIGH ; TRANSITION SCL LOW-TO-HIGH
RL A ; ROTATE ACC LEFT 1-BIT
CLR SCL ; TRANSITION SCL LOW-TO-HIGH
DJNZ BITCNT,SB_LOOP; LOOP FOR 8-BITS
SETB SDA ; SET SDA HIGH TO LOOK FOR
SCL_HIGH ; ACKNOWLEDGE PULSE
CLR ACK
JNB SDA,SB_EX ; CHECK FOR ACK OR NOT ACK
SETB ACK ; SET ACKNOWLEDGE FLAG FOR
; NOT ACK
SB_EX:
ACALL DELAY_1 ; DELAY FOR AN OPERATION
CLR SCL ; TRANSITION SCL HIGH-TO-LOW
ACALL DELAY_1 ; DELAY FOR AN OPERATION
RET



NUMBER1:

SETDATA:LCALL ESCCLEAR

MOV 23H,#00H
LCALL SKIP
MOV R2,#01H
MOV A,2FH
MOV R0,A
LCALL ETWRITE

MOV 23H,#010H
LCALL SKIP
MOV R2,#02H
MOV A,2FH
MOV R0,A
LCALL ETWRITE

LJMP WER


SKIP:
TSZ: JB P0.2,WTZ
LCALL DRT1
RET
WTZ: JB P0.3,TSZ
MOV DPTR,#AA
MOV 2FH,#01H
ACALL DISPLAY
LCALL DRT1
RET




SAVEDATA:CJNE A,#01H,ANS1
MOV DPTR,#AA
RET
ANS1: CJNE A,#02H,ANS2
MOV DPTR,#BB
RET
TRIGR: MOV B,#03H
MOV A,90
MUL AB
MOV DPTR,#TRIGRG
JMP @A+DPTR
TRIGRG: LJMP TRIGR1
LJMP TRIGR2
TRIGR1:
MOV R5,#01H
LCALL EEREAD
MOV A,2EH
LCALL SAVEDATA
CLR A
LCALL WRITESCRN
RET

TRIGR2:
MOV R5,#02H
LCALL EEREAD
MOV A,2EH
LCALL SAVEDATA
CLR A
LCALL WRITESCRN
RET


;---------------------------------------------------------------------------------------------------------------------------------------------------

ETWRITE:

LCALL SEND_START
MOV A,#0A0H
LCALL SEND_BYTE
MOV A,R2
LCALL SEND_BYTE
MOV A,R0 ;DATA
LCALL SEND_BYTE
LCALL SEND_STOP

RET
;-----------------------------------------------------------------------------------------------------------------------------

EEREAD:

LCALL SEND_START
MOV A,#0A0H
LCALL SEND_BYTE
MOV A,R5 ;EITHER TH/TL COMMAND BYTE
LCALL SEND_BYTE
LCALL SEND_START ; REPEATED START COMMAND
MOV A,#0A1H
LCALL SEND_BYTE
LCALL READ_BYTE ; READ A BYTE OF DATA
MOV 2EH,A
SETB SDA ; MOVE DATA IN SCRATCHPAD MEMORY
LCALL SEND_STOP

RET



END
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…