You are on page 1of 4

24c256 interfacing with 8051 assembly code

m trying to interface eeprom (24c256) with AT89s52 but its not working i dont knw where is the prob.. plz help me..may code is herei 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

You might also like