This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

24c256 interfacing with 8051 assembly code

hi...m harjeev...
m trying to interface eeprom (24c256) with AT89s52 but its not working...
i don't knw where is the prob..
plz help me..may code is here...i have also interfacing lcd to it..
;Er. Harjeev Sharma
; Best of luck
; ;******************************************************************
RS BIT P2.5 ;rs bit of lcd
RW BIT P2.4 ;rw bit of lcd
E BIT P2.3 ;enable bit of lcd
FL BIT P0.7 ; flag bit of lcd
LCD EQU P0
scl bit p2.0 ;serial clk of eeprom
sda bit p2.1 ;serial data of eeprom
C1 EQU 31H
C2 EQU 32H
C3 EQU 33H
ORG 00H
START:
setb scl
setb sda

MOV LCD,#00H

MOV C1,#0
MOV C2,#0
MOV C3,#0

MOV A,#38H ;2*16 MATRIX
ACALL COMMAND
MOV A,#38H ;2*16 MATRIX
ACALL COMMAND
MOV A,#38H ;2*16 MATRIX
ACALL COMMAND
MOV A,#02 ;RETURN HOME
ACALL COMMAND
MOV A,#01 ;CLEAR DISPLAY SCREEN
ACALL COMMAND
MOV A,#0CH ;DISPLAY ON CURSOR OFF
ACALL COMMAND
MOV A,#80H ;MOVE CURSOR TO FIRST LINE SECOND COLOUMN
ACALL COMMAND
MOV DPTR,#TABLE1 ;DISPLAY ERP
ACALL DISPLAY

setb scl
setb sda
acall five_delay
acall eeprom_start
mov a,#0a0h
acall eeprom_write
mov a,#01h
acall eeprom_write
mov a,#01h
acall eeprom_write
mov a,#11
acall eeprom_end
acall delay

mov a,#0cfh
acall command
mov a,#'o'
acall write

;;;;;;;;;;;;;;; READ ;;;;;;;;;;;;;;;;;
acall eeprom_start
mov a,#0a0h
acall eeprom_write
mov a,#01h
acall eeprom_write
mov a,#01h
acall eeprom_write

clr scl
acall eeprom_start
mov a,#0a1h
acall eeprom_write
clr a
acall eeprom_read
acall eeprom_end

jmp $

eeprom_write: mov 75h,a setb scl
error: mov a,75h mov r2,#08
uu: clr c clr scl rlc a jc zz clr sda jmp yy
zz: setb sda
yy: acall five_delay setb scl acall five_delay djnz r2,uu clr scl acall five_delay setb scl acall five_delay jnb sda,er mov a,#0c7h acall command mov a,#'E' acall write jmp error
er: mov a,#0c7h acall command mov a,#' ' acall write ret

eeprom_read: mov r3,#08
nnm: clr c

clr scl setb sda ; make input pin acall five_delay

setb scl acall five_delay jnb sda,qq setb c jmp ww
qq: clr c
ww: nop rlc a mov 80h,a djnz r3,nnm ; mov 80h,a mov a,#0c0h acall command mov a,80h acall htd acall out1 clr scl acall five_delay setb scl acall five_delay ret

eeprom_start:
setb sda
acall five_delay
setb scl
acall five_delay
clr sda
acall five_delay
ret
eeprom_end:
setb scl
acall five_delay
clr sda
acall five_delay
setb sda
acall five_delay
ret

five_delay: mov r6,#0
xxh:
mov r7,#1
djnz r7,$
djnz r6,xxh
ret

HTD:
;CONVERT HEX(BINARY) TO ASCII
MOV B,#10
DIV AB
MOV C1,B
MOV B,#10
DIV AB
MOV C2,B MOV C3,A RET OUT1:
MOV A,C3
ORL A,#30H
ACALL WRITE
MOV A,C2
ORL A,#30H
ACALL WRITE MOV A,C1
ORL A,#30H
ACALL WRITE
ret

LCDCLR:
MOV A,#01H ;CLEAR DISPLAY SCREEN
ACALL COMMAND
RET ; DISPLAY DATA ON LCD
DISPLAY:
CLR A
MOVC A,@A+DPTR
JZ NEXT
ACALL WRITE
INC DPTR
JMP DISPLAY
NEXT:
RET
WRITE:
ACALL CHKBUSY
MOV LCD,A
SETB RS
CLR RW
SETB E
acall delay
CLR E
RET
COMMAND:
ACALL CHKBUSY
MOV LCD,A
CLR RS
CLR RW
SETB E
acall delay
CLR E
RET
CHKBUSY:
SETB FL
SETB RW
CLR RS
CHECK4:
CLR E
SETB E
JB FL,CHECK4
RET
delay1:
MOV R4,#255
AGAIN22: MOV R5,#1
BACK22: DJNZ R5,BACK22
DJNZ R4,AGAIN22
RET
DELAY:
MOV R6,#255
AGAIN: MOV R7,#255
BACK: DJNZ R7,BACK
DJNZ R6,AGAIN
RET
TABLE1: DB 'write ',0
TABLE2: DB 'read',0
TABLE3: DB 'error',0
end