主机发送数据到从机
👀1.数据是从低位开始到高位传输的。
👀2.接受数据是从高位到低位的。
//IIC发送一个字节
void IIC_Send_Byte(u8 txd)
{
u8 t;
SDA_OUT();
IIC_SCL=0;
for(t=0;t<8;t++)
{
IIC_SDA=(txd&0x80)>>7;
txd<<=1;
delay_us(2);
IIC_SCL=1;
delay_us(2);
IIC_SCL=0;
delay_us(2);
}
}
理解这部分代码:txd是我们要发送的数据,从机接收到的高位,应该是主机的低位,为了主机和从机的数据一致性,所以,要把主机的高位先移到低位,所以就有IIC_SDA=(txd&0x80)>>7;然后主机的高位传输完后,要左移txd<<=1; 这样主机发送的数据,从机才能正确的接收到。主要是知道发送数据的上面两点。
另外
//主机等待应答信号的到来
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN();
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;
return 0;
}
这部分是主机等待从机的应答信号,这部分是可有可无的,问题不大,初学者可以先暂时不记。