现在小弟的用的[size=17.1429px] [size=17.1429px]DataAdd 65535以内的数据都正常,,,[size=17.1429px] [size=17.1429px]DataAdd超出65535,,想用17位的存储,这边出错,,,有没有大神搞过
static uint8_t I2C_Wite_Byte(uint8_t cmd,uint32_t DataAdd,uint8_t Data) //17
{
I2C_Start();
I2C_Write((cmd & 0xfe)|0x02); //02 17位
DataAdd=DataAdd & 0x0001FFFF; //17位的地址
if(!I2C_Check_Ack())
{
return 0;
}
I2C_Write((uint8_t)(DataAdd >>8));
if(!I2C_Check_Ack())
{
return 0;
}
I2C_Write((uint8_t)(DataAdd % 256));
if(!I2C_Check_Ack())
{
return 0;
}
I2C_Write(Data);
if(!I2C_Check_Ack())
{
return 0;
}
I2C_Stop();
IIC_Delay(10 * DELAY_TIME );
return 1;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
参考建议如下:
[mw_shl_code=c,true]static uint8_t I2C_Wite_Byte(uint8_t cmd,uint32_t DataAdd,uint8_t Data) //17
{
I2C_Start();
I2C_Write((cmd&0xfe) | (DataAdd&0x10000?0x2:0x0)); //bit[16]
DataAdd=DataAdd & 0xFFFF; //bit[15:0]
if(!I2C_Check_Ack())
{
return 0;
}
......
[/mw_shl_code]
一周热门 更多>