??? 10/14/08 14:14 Read: times |
#159051 - I need baby steps now. I 'm staying crazy with it. Responding to: ???'s previous message |
Hi ,
You tell me in the second message what code I have to added it. I created a global var named unsigned char i2cVector[30]; And created also two more variables unsigned int: IndexTx and IndexRx, to pointed to correct variable position. In the Callback rotines, I did it: unsigned char i2c_master_getbyte(unsigned int bytenum) { return i2cVector[bytenum]; } void i2c_master_receivedbyte(unsigned int bytenum, unsigned char value) { i2cVector[bytenum]=value; } unsigned char i2c_master_islasttxbyte(unsigned int bytenum) { if(bytenum==(IndexTx-1)) return(1); else return(0); } unsigned char i2c_master_islastrxbyte(unsigned int bytenum) { if(bytenum==(IndexRx-1)) return(1); else return(0); } void i2c_transfer_finished(void) { IndexTx=0; IndexRx=0; } I didn't change anything in the others functions. Are anything correct code ? Now, I'm trying to write a byte using : #define AT24C256 0x50 // 0101 0000 void main(void) { i2c_init(0x00, 0); EA=1; IndexTx=3; // bytes to write to memory i2cVector[0]=0x00; i2cVector[1]=0x00; i2cVector[2]=0x5A; while(1) { if (i2c_getstatus() == I2C_OK) i2c_transmit(AT24C256); IndexRx=1; // bytes to read from memory if (i2c_getstatus() == I2C_OK) i2c_receive(AT24C256); } while(1); } Are these anything correct code? I undestood how the I2C interrupt work. The I2C interrupt is called a lot of time to transmit a sigle byte. (start condition, putting address slave in i2c bus, putting address e2prom (high and low), putting data to write and finally, stop condition. Is it correct ? Jorge |