Beispiel #1
0
//写数据,成功返回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;
}
Beispiel #2
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(); 
}
Beispiel #3
0
/*******************************************************************************
**函    数: 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(); 
}
Beispiel #4
0
/*******************************************************************************
**函    数: 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;  
}
Beispiel #5
0
//读数据,成功返回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;    
}
Beispiel #6
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();
}