本文适合已经知道24c02原理的同学阅读
24C02的写法和一些常见问题
写法:
写24c02():
void w24c02(unsigned char add,unsigned char dat)
{
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_SendByte(dat);
IIC_WaitAck();
IIC_Stop();
}
读24c02():
unsigned char r24c02 (unsigned char add)
{unsigned char dat;
IIC_Start();
IIC_SendByte(0xa0);
IIC_WaitAck();
IIC_SendByte(add);
IIC_WaitAck();
IIC_Start();
IIC_SendByte(0xa1);
IIC_WaitAck();
dat=IIC_RecByte();
IIC_Stop();
return dat;
} %%%%因为24c02()只能保存8位数据,所以读写函数每次比赛都可以如上写
常见问题:
写上之后读出错误:
如果上述函数写的没问题,大概率是因为延时不够,建议5ms左右,正确的读写操作如下:
w24c02(0x00,99);delay5ms();dat=r24c02(0x00); delay5ms();
16位数据的存取:
比如频率的存取(第九届国赛),需要两位十进制数字存到一个存储单元,具体如下:
w24c02(0x00,pinlv/10000);Delay5ms();w24c02(0x01,pinlv/100%100);Delay5ms();w24c02(0x02,pinlv%100);Delay5ms();
w24c02(0x03,wendu/100);Delay5ms();w24c02(0x04,wendu%100);Delay5ms();
w24c02(0x05,dianya);Delay5ms();
prepinlv=r24c02(0x00)*10000;Delay5ms();prepinlv=prepinlv+r24c02(0x01)*100;Delay5 ms();prepinlv=prepinlv+r24c02(0x02);Delay5ms();
prewendu=r24c02(0x03)*100;Delay5ms();prewendu=prewendu+r24c02(0x04);Delay5ms();
predianya=r24c02(0x05);Delay5ms();