Continue to Site

Welcome to our site!

Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

  • Welcome to our site! Electro Tech is an online community (with over 170,000 members) who enjoy talking about and building electronic circuits, projects and gadgets. To participate you need to register. Registration is free. Click here to register now.

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
TU:DJNZ 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.

Latest threads

New Articles From Microcontroller Tips

Back
Top