关于IIC总线的发送和接受解决办法

关于IIC总线的发送和接受
void Send_IIC(unsigned char Data)

unsigned char i=8;
unsigned char temp;

temp = Data;
for(i = 0; i < 8; i++){
temp = temp<<1;
SCL = 0;
_nop_();
SDA = CY;
_nop_();
SCL = 1;
_nop_();
}
SCL = 0;//?
_nop_();
SDA = 1;//?
_nop_();

}


/*------------------------------------------------
读入一个字节并返回
------------------------------------------------*/
unsigned char Read_IIC(void)
{
   unsigned char i,k;

SCL = 0;//?
_nop_();
SDA = 1;//?
for(i = 0; i < 8; i++){
SCL = 1;
_nop_();
k = (k << 1) | SDA;
SCL = 0;
_nop_();
}
_nop_();

return k;
}



这个分别是教材上的写和读的IIC总线的函数
其中//?
标明的行不明白它存在的意义,按照教材上的原理 即使没有这2行也不会影响正常操作
但是试验了一下 如果没有这2行 输出的数据就不会

能说明一下么 这2行存在的意义

------解决方案--------------------
好像是IIC发送数据的开始条件,不加的话当然要出问题,你可以用示波器来看一下波形是不是对的。
------解决方案--------------------
好像作用是:强行明确占用IIC总线

防止通信过程中,产生SCL和SDA都为0的时候,从器件误判为总线释放