我的任务是通过 i2c 总线将前 255 个字节从外部 EEPROM(24LC64)复制到内部(PIC16F877)。我已经阅读了 AN1488、所有数据表、MikroC gide(哦,是的,我正在使用 MikroC),但没有希望.. 这意味着我的代码试图读取 smtng 但是然后,在程序员处读取我的 PIC 的 eeprom(无法读取24LC64,所以我什至不知道上面有什么,但肯定有 smtng,它与我得到的不同),我得到的所有 EEPROM 都由“A2”或“A3”填充。我的猜测是它是第一个地址,我通过它寻址到 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) {
}
}
PS我已经尝试过使用连续读取,但它“读取”(再次是“A2”..)只有第一个字节..所以我发布了这个..
PSS 我在“硬件”工作,不涉及 Proteus。
PSSS 我无法测试写作,因为我只有一个 24LC64 上面有重要信息,所以它甚至在它的 WP 引脚上拉到 Vcc ......