Esempio n. 1
0
//不产生ACK应答		    
void MPU_IIC_NAck(void)
{
	MPU_IIC_SCL=0;
	MPU_SDA_OUT();
	MPU_IIC_SDA=1;
	MPU_IIC_Delay();
	MPU_IIC_SCL=1;
	MPU_IIC_Delay();
	MPU_IIC_SCL=0;
}					 				     
Esempio n. 2
0
//产生IIC起始信号
void MPU_IIC_Start(void)
{
	MPU_SDA_OUT();     //sda线输出
	MPU_IIC_SDA=1;	  	  
	MPU_IIC_SCL=1;
	MPU_IIC_Delay();
 	MPU_IIC_SDA=0;//START:when CLK is high,DATA change form high to low 
	MPU_IIC_Delay();
	MPU_IIC_SCL=0;//钳住I2C总线,准备发送或接收数据 
}	  
Esempio n. 3
0
//产生IIC停止信号
void MPU_IIC_Stop(void)
{
	MPU_SDA_OUT();//sda线输出
	MPU_IIC_SCL=0;
	MPU_IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
 	MPU_IIC_Delay();
	MPU_IIC_SCL=1; 
	MPU_IIC_SDA=1;//发送I2C总线结束信号
	MPU_IIC_Delay();							   	
}
void MPU_I2C_stop()
{
	MPU_SDA_OUT();
	MPU_I2C_SDA_W = 0;
	MPU_I2C_DELAY();
	MPU_I2C_SCL = 1;
	MPU_I2C_DELAY();
	MPU_I2C_SDA_W = 1;
	delayMs(10);
}
void MPU_I2C_start()
{
	MPU_SDA_OUT();
	MPU_I2C_SDA_W = 1;
	MPU_I2C_DELAY();
	MPU_I2C_SCL = 1;
	MPU_I2C_DELAY();
	MPU_I2C_SDA_W = 0;
	MPU_I2C_DELAY();
	//MPU_I2C_SCL = 0;//拉低SCL,等待发送或接收数据
}
void MPU_I2C_respond(u8 ack)//应答信号:在第9个时钟周期SCL为高时,SDA为低
{
	MPU_SDA_OUT();
	MPU_I2C_SCL = 0;//拉低SCL,等待发送或接收数据
	MPU_I2C_DELAY();
	MPU_I2C_SDA_W = 1 - ack;
	MPU_I2C_DELAY();
	MPU_I2C_SCL = 1;
	MPU_I2C_DELAY();
	MPU_I2C_SCL = 0;
	MPU_I2C_DELAY();
}
Esempio n. 7
0
//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答			  
void MPU_IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
	MPU_SDA_OUT(); 	    
    MPU_IIC_SCL=0;//拉低时钟开始数据传输
    for(t=0;t<8;t++)
    {              
        MPU_IIC_SDA=(txd&0x80)>>7;
        txd<<=1; 	  
		    MPU_IIC_SCL=1;
		    MPU_IIC_Delay(); 
		    MPU_IIC_SCL=0;	
		    MPU_IIC_Delay();
    }	 
} 	    
void MPU_I2C_sendByte(u8 txd)
{
	u8 i;
	MPU_SDA_OUT();
	MPU_I2C_SCL = 0;//拉低SCL,等待发送数据
	MPU_I2C_DELAY();
	for(i = 0;i < 8;i ++)
	{
		MPU_I2C_SDA_W = (txd & 0x80) >> 7;
		txd <<= 1;
		MPU_I2C_DELAY();
		MPU_I2C_SCL = 1;
		MPU_I2C_DELAY();
		MPU_I2C_SCL = 0;
		MPU_I2C_DELAY();
	}
}