//IIC发送一个字节
//返回从机有无应答
//1,有应答
//0,无应答 //IIC_SCL=0;
//在SCL上升沿时准备好数据,进行传送数据时,拉高拉低SDA,因为传输一个字节,一个SCL脉冲里传输一个位。
//数据传输过程中,数据传输保持稳定(在SCL高电平期间,SDA一直保持稳定,没有跳变)
//只有当SCL被拉低后,SDA才能被改变
//总结:在SCL为高电平期间,发送数据,发送8次数据,数据为1,SDA被拉高,数据为0,SDA被拉低。
//传输期间保持传输稳定,所以数据线仅可以在时钟SCL为低电平时改变。
void IIC_Send_Byte(u8 txd)
{ u8 t; SDA_OUT(); IIC_SCL=0;//拉低时钟开始数据传输for(t=0;t<8;t++){ //IIC_SDA=txd&0x80; //获取最高位//获取数据的最高位,然后数据左移一位//如果某位为1,则SDA为1,否则相反if(txd&0x80)IIC_SDA=1;elseIIC_SDA=0;txd<<=1; delay_us(2); IIC_SCL=1;delay_us(2); IIC_SCL=0; delay_us(2);}
}
或者://IIC_SDA=txd&0x80; //获取最高位//获取数据的最高位,然后右移7位,假设为 1000 0000 右移7位为 0000 0001 // 假设为 0000 0000 右移7位为 0000 0000 //如果某位为1,则SDA为1,否则相反IIC_SDA=((txd&0x80)>>7);txd<<=1;