//写数据,成功返回0,失败返回0xff int IIC_WriteData(u8 dev_addr,u8 reg_addr,u8 data) { IIC_Start(); IIC_WriteBit(dev_addr); if(IIC_WaitAck() == 0xff) { printf("error 2B\r\n"); return 0xff; } IIC_WriteBit(reg_addr); if(IIC_WaitAck() == 0xff) { printf("error 2C\r\n"); return 0xff; } IIC_WriteBit(data); if(IIC_WaitAck() == 0xff) { printf("error 2D\r\n"); return 0xff; } IIC_Stop(); return 0; }
/******************************************************************************* **函 数: IIC_WriteByte **功 能: IIC往指定地址写一字节数据 **参 数: Addr --地址 ** data --发送的数据 **返 回: void *******************************************************************************/ void IIC_WriteByte(u8 Addr,u8 data) { IIC_Start(); IIC_SendByte(DEVICE_ADDR); //WriteDeviceAddr IIC_WaitAck(); IIC_SendByte(Addr); IIC_WaitAck(); IIC_SendByte(data); IIC_WaitAck(); IIC_Stop(); }
/******************************************************************************* **函 数: IIC_WriteDataN **功 能: IIC往指定地址连续写N个数据 **参 数: Addr --地址 ** pData --发送数据指针 ** len --发送数据长度 **返 回: void *******************************************************************************/ void IIC_WriteDataN(u8 Addr , u8 *pData , u8 len) { u8 i,*pTemp= pData; IIC_Start(); IIC_SendByte(DEVICE_ADDR); IIC_WaitAck(); IIC_SendByte(Addr); IIC_WaitAck(); for(i=0;i<len;i++) { IIC_SendByte(*pTemp); IIC_WaitAck(); pTemp++ ; } IIC_Stop(); }
/******************************************************************************* **函 数: IIC_ReadByte **功 能: IIC读指定地址字节数据 **参 数: Addr --地址 **返 回: 接收的数据 *******************************************************************************/ u8 IIC_ReadByte(u8 Addr) { u8 data; IIC_Start(); IIC_SendByte(DEVICE_ADDR); IIC_WaitAck(); IIC_SendByte(Addr); IIC_WaitAck(); IIC_Start(); IIC_SendByte(DEVICE_ADDR+1); //ReadDeviceAddr IIC_WaitAck(); data=IIC_GetByte(); IIC_NACK(); IIC_Stop(); return data; }
//读数据,成功返回0,失败返回0xff int IIC_ReadData(u8 dev_addr,u8 reg_addr,u8 *pdata,u8 count) { u8 i; IIC_Start(); IIC_WriteBit(dev_addr); if(IIC_WaitAck() == 0xff) { printf("error 2F\r\n"); return 0xff; } IIC_WriteBit(reg_addr); if(IIC_WaitAck() == 0xff) { printf("error 2G\r\n"); return 0xff; } IIC_Start(); IIC_WriteBit(dev_addr+1); if(IIC_WaitAck() == 0xff) { printf("error 2H\r\n"); return 0xff; } for(i=0;i<(count-1);i++) { *pdata=IIC_ReadBit(); IIC_Ack(0); pdata++; } *pdata=IIC_ReadBit(); IIC_Ack(1); IIC_Stop(); return 0; }
/******************************************************************************* **函 数: IIC_ReadDataN **功 能: IIC在指定地址连续读N个数据 **参 数: Addr --地址 ** pData --接收数据指针 ** len --接收数据长度 **返 回: void *******************************************************************************/ void IIC_ReadDataN(u8 Addr,u8 *pData,u8 len) { u8 i,*pTemp= pData; IIC_Start(); IIC_SendByte(DEVICE_ADDR); IIC_WaitAck(); IIC_SendByte(Addr); IIC_WaitAck(); IIC_Start(); IIC_SendByte(DEVICE_ADDR+1); IIC_WaitAck(); for(i=0;i<len-1;i++) { *(pTemp++) = IIC_GetByte(); IIC_ACK(); } *(pTemp++) = IIC_GetByte(); IIC_NACK(); IIC_Stop(); }