首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > 单片机 >

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

2013-01-27 
关于IIC总线的发送和接受void Send_IIC(unsigned char Data){ unsigned char i8unsigned char temptemp

关于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的时候,从器件误判为总线释放

热点排行