v115488 发表于 2023-3-2 15:18 关于第二个问题,CY单纯是一个变量吧,理论上来将,他的第214行应该是 if(I2C_RecvACK() == 0) { //应答成功,继续执行其他 } 这样,不过这个估计是默认了应答能成功,简化掉了; 模拟总线一般用 while(--i); 这样的操作去等待,i 为 0 的时候就直接获取数据了, 至于i的值,应该和你翻转SCL的延时是一致的,保证时钟的准确性,虽然说IIC对时钟要求不高 用死循环硬等是不行的 |
rctty 发表于 2023-3-2 11:55 谢谢,受教了 |
一般模拟总线,时钟由主机控制,不可能像第二个去判断时钟,这个没啥意义;第一个程序,先是SCL拉高,然后再SDA拉高,好嘛,总线通信结束了 |
你用while,就要加个延时自动退出的判断,否则容易死循环,你找的程序只是接收了应答,没判断,普通应用经常这么处理。 |