??? 10/28/08 00:05 Read: times |
#159388 - I didn't get yet Responding to: ???'s previous message |
Hi,
I could't write or read e2prom yet. I know, it's a shame for me. I was following the program line by line. I thought the written was ok, but I'was wrong. I understood how the i2c works, and following the i2c interrupt, it must work. The variable mbytenum is increased by interrupt code. In the i2c interrupt , I put this: P1&=0xEF; to follow the execution. But it is not executed. Then my program stay waiting, but the i2c bus in oscilloscope has activity. Should you say me what is the problem ? This is my code: #include <reg952.h> #include "uart.c" #include "i2c_callback.c" #include "i2c.c" #define address 0x0000 #define M24C01 0x50 // 0101 0000 void main(void) { P1M1 &= 0xEF; P1M1 |= 0x20; P1M2 &= 0xDF; P1M2 |= 0x10; P1 |= 0x10; // putting P1.4=1 i2c_init(0x00, 0); EA=1; i2cVector[0]=(unsigned char)((address&0xFF00)>>8); i2cVector[1]=(unsigned char)(address&0xFF); i2cVector[2]=0x5A; i2cIndex=3; // number of bytes to be transmited/received i2c_transmit(M24C01); // send peripherical address while(i2c_getstatus() & I2C_BUSY);// wait to finish while(1); } // interrupt // ACK for data byte case 0x28: if (i2c_master_islasttxbyte(mbytenum)) // only verify if byte is the last { // stop condition STA = 0; STO = 1; mi2cstatus = I2C_OK; i2c_transfer_finished(); P1&=0xEF; // This is NOT work ! } else { mbytenum++; I2DAT = i2c_master_getbyte(mbytenum); STA = 0; STO = 0; } // if break; thanks |