u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN(); //SDA设置为输入
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;//时钟输出0
return 0;
}
IIC_Wait_Ack()函数中为什么把sda设成输入以后还执行IIC_SDA=1,这个时候sda端口相当于一个输入口,把sda设成1没用把
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
---------------------------------
我们的是模拟IIC,里面很多的delay_us,这个,就可以设置频率啊。频率是指SCK的频率,控制delay自然就控制sck频率了啊
是不是说检测到PB11有输入然后READ_SDA就为真?还是有其它意思?如果方便的话,顺便解释一下其下面的 if 函数的的意义,初学,求教~~~~~
{ucErrTime++; if(ucErrTime>250) { IIC_Stop(); return 1; } }
---------------------------------
你觉得改成什么样比较好?麻烦贴一下代码,就楼主这个函数。
一周热门 更多>