IIC_Wait_Ack()函数中为什么把sda设成输入以后还执行IIC_SDA=1

2019-08-17 09:23发布

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没用把


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
hexboot
1楼-- · 2019-08-18 11:58
回复【8楼】hexboot:
---------------------------------
我们的是模拟IIC,里面很多的delay_us,这个,就可以设置频率啊。频率是指SCK的频率,控制delay自然就控制sck频率了啊
正点原子
2楼-- · 2019-08-18 17:27
 while(READ_SDA)这句话是什么意思?   #define READ_SDA   PBin(11)  
                         是不是说检测到PB11有输入然后READ_SDA就为真?还是有其它意思?如果方便的话,顺便解释一下其下面的  if  函数的的意义,初学,求教~~~~~

{ucErrTime++; if(ucErrTime>250) { IIC_Stop(); return 1; } }
猫先生
3楼-- · 2019-08-18 19:02
就是判断PB11是不是1,如果是,执行下面的语句,如果不是,就跳过while了。
正点原子
4楼-- · 2019-08-18 20:53
 精彩回答 2  元偷偷看……
猫先生
5楼-- · 2019-08-18 23:33
回复【12楼】猫先生:
---------------------------------
你觉得改成什么样比较好?麻烦贴一下代码,就楼主这个函数。
正点原子
6楼-- · 2019-08-19 04:52
你好,这个地方我也有不解,能不能帮忙解释一下,也你这个疑问

一周热门 更多>