初级会员

- 积分
- 91
- 金钱
- 91
- 注册时间
- 2012-10-26
- 在线时间
- 0 小时
|
1. void AT24CXX_WriteOneByte(u16 WriteAddr,u8 DataToWrite)
{
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr>>8);//发送高地址
}else IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); //发送器件地址0XA0,写数据
IIC_Wait_Ack();
IIC_Send_Byte(WriteAddr%256); //发送低地址
IIC_Wait_Ack();
IIC_Send_Byte(DataToWrite); //发送字节
IIC_Wait_Ack();
IIC_Stop();//产生一个停止条件
delay_ms(10);
}
写一个字节,24Cxx的地址不都是7位加最后一位读/写的位吗,难道24C16以上型号的芯片地址是16位的???????干嘛先发高地址,再发低地址????
else IIC_Send_Byte(0XA0+((WriteAddr/256)<<1)); 此句为何意??????如果型号低于24C16就发送一个字节(0xA0+(WriteAddr/256)<<1)???如果是24C02,WriteAddr不就是8位的吗,(WriteAddr/256)<<1 不是0吗 ????????
2. u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN(); //SDA设置为输入 注意:这句设置SDA为输入,而下句却说SDA输出1,这是输入上拉
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;//时钟输出0
return 0;
}
谁能告诉我,这个250是怎么得到的???????????
3. |
|