我的任务是通过i2c总线将前255个字节从外部EEPROM(24LC64)复制到内部(PIC16F877)。我已经阅读了AN1488,所有数据表,MikroC gide(哦,是的,我正在使用MikroC),但绝望..意思是我的代码试图读取smtng然后,在程序员(无法读取)读取我的PIC的eeprom 24LC64,所以我甚至不知道它上面有什么,但是它有防静电,它与我得到的有所不同,而且我将所有的EEPROM填充为“A2”或“A3”。我的猜测是它是第一个addr,我正在通过它解决24LC64问题。你可以检查一下我的代码(它很小=))并指出我的错误。
char i;
unsigned short Data;
void main(){
PORTB = 0;
TRISB = 0;
I2C1_Init(100000);
PORTB = 0b00000010;
for (i = 0x00; i<0xFF; i++) {
I2C1_Start();
I2C1_Wr(0xA2); //being 1010 001 0
//I'm getting full internal EE filled with what's in brackets from above
I2C1_Wr(0b00000000);
I2C1_Wr(i);
I2C1_Repeated_Start();
I2C1_Wr(0xA3); //being 1010 001 1
Data = I2C1_Rd(0);
I2C1_Stop();
EEPROM_write(i, Data); //How could that 1010 001 0 get into here???
Delay_100ms();
}
PORTB = 0b00000000;
while (1) {
}
}
P.S。我已经尝试了sequantial读取,但它“读取”(再次说“A2”..)只有第一个字节..所以我发布了这个..
P.S.S。我在“硬件”工作,没有Proteus参与..
P.S.S.S。我无法测试写作,因为我只有一个24LC64,上面有重要的信息,所以它的WP引脚甚至可以达到Vcc ......
答案 0 :(得分:1)
这不是一个特定的答案,而是更多的I2C通信清单,因为如果不查看范围并且没有深入研究您提供的API调用,很难帮助解决您的问题。
I2C_
API如何处理来自EEPROM的确认。它们需要在某个地方处理(通常在ISR中),并且从你的例子中处理它们的位置并不明显。