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

I2C read write problem with 24c02 and 89c52

Hello all, im trying to interface 24c02 with 89c52 but im getting a serious problem. I wrote a simple prog to write a string to memory and read it back and display on LCD.I used proteus i2c debugger to check the data that is being sent to memory. It shows that the data that is being sent is correct but when i check the memory map of 24c02 data has been written to some other memory location (80h instead of 00h).Plz help me. Here is my code

Main program: void main(void)
{ unsigned char str[15]="abcdefghijk",str1[15],len; unsigned char *mem_add=0x00,dev_add=0xa0; len=strlen(str); write24c02(str,mem_add,5); //write 5 charec to mem read24c02(str1,mem_add,5); //read 5 charc LCD(str1,5); //display 5 charec on lcd while(1);
}

subroutines: void Start() { SDA=1; NOP5(); SCL=1; NOP5(); SDA=0; NOP5(); SCL=0; NOP5(); }

/***************************************************************************/ void Stop() { SDA=0; NOP5(); SCL=1; NOP5(); SDA=1; NOP5(); SCL=0; NOP5(); }

/***************************************************************************/ void Ack() { SDA=0; NOP5(); SCL=1; NOP5(); SCL=0; NOP5(); SDA=1; }

/***************************************************************************/ void NoAck() { SDA=1; NOP5(); SCL=1; NOP5(); SCL=0; NOP5(); }

/***************************************************************************/ bit TestAck(void) { bit ErrorBit; SDA=1; NOP5(); SCL=1; NOP5(); ErrorBit=SDA; NOP5(); SCL=0; return(ErrorBit); }

/***************************************************************************/ void Write8Bit(unsigned char input) { unsigned char temp; for(temp=8;temp!=0;temp--) { SDA=(bit)(input&0x80); NOP5(); SCL=1; NOP5(); SCL=0; NOP5(); input=input<<1; } }

/***************************************************************************/

void write24c02(unsigned char *Wdata,unsigned char RomAddress,unsigned char
number) { Start(); Write8Bit(WriteDeviceAddress); TestAck(); Write8Bit(RomAddress); TestAck(); for(;number!=0;number--) { Write8Bit(*Wdata); TestAck(); Wdata++; } Stop(); delay_ms(10); }

/***************************************************************************/ unsigned char Read8Bit() { unsigned char temp,rbyte=0; for(temp=8;temp!=0;temp--) { SCL=1; rbyte=rbyte<<1; rbyte=rbyte|((unsigned char)(SDA)); SCL=0; } return(rbyte); }

/***************************************************************************/ void read24c02(unsigned char *RamAddress,unsigned char RomAddress,unsigned char
bytes) { Start(); Write8Bit(WriteDeviceAddress); //write device add in write mode TestAck(); Write8Bit(RomAddress); //write memory add of device TestAck(); Start(); // restart Write8Bit(ReadDeviceAddress); // send device add in read mode TestAck(); while(bytes!=1) { // read frm add *RamAddress=Read8Bit(); Ack(); RamAddress++; bytes--; } *RamAddress=Read8Bit(); NoAck(); Stop(); }

The i2c debugger shows the data sent as

916.763ns 2.698ms ? ? S A0 N 00 N 61 N 62 N 63 N 64 N 65 N P 916.763ns Noise SCL=0 (WLO) 917.363ns Noise SCL=1 (WHI) 852.914us S 879.914us 1.087ms A0 N 1.119ms 1.328ms 00 N 1.377ms 1.586ms 61 N 1.644ms 1.853ms 62 N 1.911ms 2.120ms 63 N 2.178ms 2.387ms 64 N 2.445ms 2.654ms 65 N 2.692ms 2.698ms P

2.704ms 14.288ms ? ? S A0 N 00 N Sr A1 A CF A FF A FF N P 2.704ms Noise SCL=0 (WLO) 13.076ms Noise SCL=1 (WHI) 13.082ms S 13.109ms 13.316ms A0 N 13.348ms 13.557ms 00 N 13.583ms 13.589ms Sr 13.616ms 13.825ms A1 A 13.852ms 13.966ms CF A 13.999ms 14.113ms FF A 14.146ms 14.260ms FF N 14.282ms 14.288ms P 14.294ms ?

Here is the memory map of 24c02

00: FF FF FF FF FF FF FF FF | ........
08: FF FF FF FF FF FF FF FF | ........
10: FF FF FF FF FF FF FF FF | ........
18: FF FF FF FF FF FF FF FF | ........
20: FF FF FF FF FF FF FF FF | ........
28: FF FF FF FF FF FF FF FF | ........
30: FF FF FF FF FF FF FF FF | ........
38: FF FF FF FF FF FF FF FF | ........
40: FF FF FF FF FF FF FF FF | ........
48: FF FF FF FF FF FF FF FF | ........
50: FF FF FF FF FF FF FF FF | ........
58: FF FF FF FF FF FF FF FF | ........
60: FF FF FF FF FF FF FF FF | ........
68: FF FF FF FF FF FF FF FF | ........
70: FF FF FF FF FF FF FF FF | ........
78: FF FF FF FF FF FF FF FF | ........
80: 58 6C 56 3B 25 96 FF FF | XlV;%...
88: FF FF FF FF FF FF FF FF | ........
90: FF FF FF FF FF FF FF FF | ........
98: FF FF FF FF FF FF FF FF | ........
A0: FF FF FF FF FF FF FF FF | ........
A8: FF FF FF FF FF FF FF FF | ........
B0: FF FF FF FF FF FF FF FF | ........
B8: FF FF FF FF FF FF FF FF | ........
C0: FF FF FF FF FF FF FF FF | ........
C8: FF FF FF FF FF FF FF FF | ........
D0: FF FF FF FF FF FF FF FF | ........
D8: FF FF FF FF FF FF FF FF | ........
E0: FF FF FF FF FF FF FF FF | ........
E8: FF FF FF FF FF FF FF FF | ........
F0: FF FF FF FF FF FF FF FF | ........
F8: FF FF FF FF FF FF FF FF | ........

Thanks in advance to the great minds
k.saikrishna
--------------

Next Thread | Thread List | Previous Thread Start a Thread | Settings

Contact Site Map Press Privacy Copyright © 2010 ARM Ltd and ARM Germany GmbH. All rights reserved.

0