static void write_byte(alt_u16 addr,alt_u8 dat)
{
alt_u8 cmd;
cmd=(0xa0|(addr>>7))&0xfe;
start();
iic_write(cmd);
ask();
iic_write(addr);
ask();
iic_write(dat);
ask();
stop();
}
cmd=(0xa0|(addr>>7))&0xfe;这条句话不是很明白,后来终于想明白了。
addr>>7的原因是因为EEPROM的control byte的B1、B0是存储块的选择,小于256字是00,256到512是01,后面依次排下去。
右移7位正好使超过超过256字的对应为在B1和B0位上。然后与0xa0或运算,再把最后一位(读写位)加上就构成了control byte。