Example #1
0
uint8_t IIC_Read_Bytes(uint8_t dev, uint8_t reg, uint8_t length, uint8_t *data)
{
    	uint8_t count = 0;
	uint8_t temp;
	IIC_Start();
	IIC_Send_Byte(dev);	   
	IIC_Wait_Ack();
	IIC_Send_Byte(reg);   
	IIC_Wait_Ack();	  
	IIC_Start();
	IIC_Send_Byte(dev + 1);  	
	IIC_Wait_Ack();
	
    	for(count = 0; count < length; count++)
	{
		 
		 if(count != (length - 1) )
		 	temp = IIC_Receive_Byte(1);  
		 	else  
			temp = IIC_Receive_Byte(0);	

		data[count] = temp;
	}
	IIC_Stop();
	return count;
}
unsigned int ReadADS1110(void)
{
    unsigned int data = 0;
    unsigned char tmpH = 0;
    unsigned char tmpL = 0;
    unsigned char setup = 0;
    IIC_Start();
    IIC_Send_Byte(ADS1110_ADDR | 0x01);
    IIC_Receive_Byte(&tmpH);
    IIC_Receive_Byte(&tmpL);
    IIC_Receive_Byte(&setup);
    IIC_Stop();
    data = (unsigned int)tmpH << 8;
    data += tmpL;
    return data;
}
Example #3
0
/******************************************************************************
  函数(模块)名称:unsigned char IIC_Single_Read(unsigned int R_addr,unsigned char *R_word)
  功能:	单次读/随机读
  输入参数: 要读的数据地址,输出数据保存的字节指针        	              		
  输出参数: 1 读成功 0 读失败         	 		   		 
  其它说明: 
*******************************************************************************/
unsigned char IIC_Single_Read(unsigned char R_addr,unsigned char *R_word)
{
    unsigned char try_time=define_try_time; //用来定义出现通讯错误时尝试的错误
    while(1)
    {
        if(!try_time--)    //用来防止因硬件错误或其它原因程序进入死循环
        {
           return 0;
        }
        IIC_Start();       //步骤1:产生一个启动信号
        IIC_Send_Byte(Slave_Addres&(~BIT0));   //步骤2:发送控制命令
        if(ReadAck())
          continue;        //没有应答,忽略下面语句,重新开始
                           //应答,则开始发送地址
        IIC_Send_Byte(R_addr);
        if(ReadAck())         
          continue;        //没有应答,忽略下面语句,重新开始
                           //应答,则开始发送启动信号
        IIC_Start();       //启动信号
        IIC_Send_Byte(Slave_Addres|BIT0);   //发送控制命令
        if(ReadAck())         
          continue;        //没有应答,忽略下面语句,重新开始
        break;             //应答,则跳出循环,开始接收数据
    }
    *R_word=IIC_Receive_Byte(); //从总线上接收一个字节数据
    WriteAck(1);               //发送 非应答信号
    IIC_Stop();                //发送停止信号
    return 1;
}
unsigned int ReadADS1110(void)
{
    unsigned int data = 0;
    unsigned char tmpH = 0;
    unsigned char tmpL = 0;
    unsigned char setup = 0;
    int i;
    SetUpADS1110(0x1C | 0x80);
    for(i = 0;i < 500;i++);
    do{
    i--;
    IIC_Start();
    IIC_Send_Byte(ADS1110_ADDR | 0x01);
    IIC_Receive_Byte(&tmpH);
    IIC_Receive_Byte(&tmpL);
    IIC_Receive_Byte(&setup);
    IIC_Stop();
    }while(((setup | 0x80) == 0x80) && (i > 0));
    if(i<0)
        return 0;
    data = (unsigned int)tmpH << 8;
    data += tmpL;
    return data;
}
Example #5
0
/******************************************************************************
  函数(模块)名称:unsigned char IIC_Multi_read(unsigned int R_addr,unsigned char *Save_addr,
                                unsigned int R_lent)
  功能:	连续读
  输入参数: 读起始地址,数据保存指针,读长度        	              		
  输出参数: 1 读成功 0 读失败         	 		   		 
  其它说明: 
*******************************************************************************/
unsigned char IIC_Multi_read(unsigned char R_addr,unsigned char *Save_addr,
                                unsigned int R_lent)
{
    unsigned char try_time=define_try_time; //用来定义出现通讯错误时尝试的错误
    while(1)
    {
        if(!try_time--)    //用来防止因硬件错误或其它原因程序进入死循环
        {
           return 0;
        }
        IIC_Start();           //步骤1:产生一个启动信号
        IIC_Send_Byte(Slave_Addres&(~BIT0));       //步骤2:发送控制命令
        if(ReadAck())
          continue;        //没有应答,忽略下面语句,重新开始
                           //应答,则开始发送地址
        IIC_Send_Byte(R_addr);
        if(ReadAck())         
          continue;        //没有应答,忽略下面语句,重新开始
                           //应答,则开始发送启动信号
        IIC_Start();       //启动信号
        IIC_Send_Byte(Slave_Addres|BIT0);   //发送控制命令
        if(ReadAck())         
          continue;        //没有应答,忽略下面语句,重新开始
        break;             //应答,则跳出循环,开始接收数据
    }
    while(R_lent--)
    {
        *Save_addr++=IIC_Receive_Byte(); //从总线上接收一个字节数据
        if(R_lent==0)
        {
            WriteAck(1);               //发送 非应答信号
            IIC_Stop();                //发送停止信号
            break;
        }
        WriteAck(0);               //发送应答信号
    }
    return 1;
}