Beispiel #1
0
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
u8 IIC_Read_Byte(unsigned char ack)
{
	unsigned char i,receive=0;
	//SDA_IN();//SDA设置为输入
	  GPIO_InitTypeDef      GPIO_InitStructure;
//		RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);
  GPIO_InitStructure.GPIO_Pin = GPIO_Pin_14;
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN;
  GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL ;
  GPIO_Init(GPIOB, &GPIO_InitStructure);

    for(i=0;i<8;i++ )
	{
        IIC_SCL_0; 
        delay_us(2);
		IIC_SCL_1;
        receive<<=1;
        if(READ_SDA)receive++;   
		delay_us(1); 
    }					 
    if (!ack)
        IIC_NAck();//发送nACK
    else
        IIC_Ack(); //发送ACK   
    return receive;
}
Beispiel #2
0
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
u8 IIC_Read_Byte(unsigned char ack)
{
	unsigned char i, receive = 0;
	receive = 0;

	SDA_IN();			//SDA设置为输入

  for(i = 0; i < 8; i++)
	{
		IIC_SCL = 0; 
		delay_us(2);
		IIC_SCL = 1;
		receive <<= 1;
		if(READ_SDA)
			receive++;   
		delay_us(1); 
  }
						 
	if(!ack)
			IIC_NAck();//发送nACK
	else
			IIC_Ack(); //发送ACK
		   
    return receive;
}
Beispiel #3
0
 void IIC_Read_Byte(unsigned char ack,unsigned char *data)
 {
	 unsigned char i;
	 unsigned char receive=0;
	 
	 SDA_IN();
	 
	 for(i=0; i<8; i++)
	 {
		 IIC_SCL(0);
		 delay_us(2);
		 IIC_SCL(1);
		 
		 receive <<= 1;
		 
		 if(READ_SDA)receive++;
		 
		 delay_us(1);
	 }
	 
	 *data = receive;
	 
	 if (!ack)
		IIC_NAck();
	 else
		IIC_Ack();
	 
 }
Beispiel #4
0
void HAL_I2C_Ack(void)
{
#ifdef USE_I2C_OLD
    I2C_Ack();
#else
    IIC_Ack();
#endif
}
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
unsigned char MPU_Sigle_Read(unsigned reg_addr) {
    unsigned char reg_data;
    IIC_Start();
    IIC_Send(MPU6050_ADDR);
    IIC_Wait_Ack();

    IIC_Send(reg_addr);
    IIC_Wait_Ack();

    IIC_Start();
    IIC_Send(MPU6050_ADDR+1);
    IIC_Wait_Ack();

    reg_data = IIC_Read();
    IIC_Ack(1);
    IIC_Stop();
    return reg_data;
}
Beispiel #7
0
//读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
static u8 IIC_Read_Byte(unsigned char ack)
{
	unsigned char i,receive=0;
	IIC_SDA(1);
	SDA_IN();//SDA设置为输入
	for(i=0;i<8;i++ )
	{
        receive<<=1;
        IIC_SCL(1);
		I2C_delay();
		if(READ_SDA)receive |= 0x01;
		IIC_SCL(0);
		I2C_delay();      
	}
    if (ack)
		IIC_Ack(); //发送ACK   
    else
		IIC_NAck();//发送nACK 
    return receive;
}
Beispiel #8
0
/**************************实现函数********************************************
*函数原型:		uint8_t IIC_Receive_Byte(unsigned char ack)
*功  能:	    //读1个字节,ack=1时,发送ACK,ack=0,发送nACK 
*******************************************************************************/ 
uint8_t IIC_Receive_Byte(unsigned char ack)
{
	unsigned char i,receive = 0;
	SDA_INMODE();
  	for(i = 0; i < 8; i++ )
	{
		IIC_SCL = 0U;
		delay_us(2);
		IIC_SCL = 1U;
		receive <<= 1; 
		if(READ_SDA)receive++;	//READ_SDA is P5.1
		delay_us(1); 
	}
	
    	if (!ack)
        	IIC_NAck();	//refuse ACK 
    	else
        	IIC_Ack();	//ACK 
    	return receive;
}
Beispiel #9
0
u8 IIC_Read_Byte(unsigned char ack)			//read A byte from IIC
{
	u8 i,dat;
	i = 8;
	SDA = 1;
	SCL = 0;
	do
	{
		SCL = 1;
		IIC_Delay();
		dat <<= 1;
		if(SDA)		dat++;
		SCL  = 0;
		IIC_Delay();
	}
	while(--i);
	
	if (ack == 0)
			IIC_NAck();//·¢ËÍnACK
	else if (ack == 1)
			IIC_Ack(); //·¢ËÍACK   
	
	return(dat);
}