一个是有参数的应答函数,一个是没有参数的应答函数
另问:在应答过程中当SCL为高电平时,SDA的电平是不是根据数据的接收情况自动决定是高电平还是低电平?
代码一中参数的作用是什么?
每次发送一个字节结束后,都要用这样的应答函数吗?
void Ack_I2c(bit a) //a作为应答标志
{
if(a==0)sda=0; /*在此发出应答或非应答信号 */
else sda=1; /*0为发出应答,1为非应答信号 */
_nop_();
_nop_();
_nop_();
scl=1;
_nop_();
_nop_(); /*时钟低电平周期大于4μs*/
_nop_();
_nop_();
_nop_();
scl=0; /*清时钟线,住I2C总线以便继续接收*/
_nop_();
_nop_();
}
bit Ask()
{
bit ack_bit;
SDA=1;
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();
ack_bit=SDA;
SCL=0;
reurn ack_bit;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
bit responds()
{
uchar i=0;
SDA=1
_nop_();
_nop_();
SCL=1;
_nop_();
_nop_();
delay();
while((SDA==1)&&(i<255))
i++;
if(i>=255)
return 1;
else
return 0
SCL=0;
delay();
}
这样只有从机在主机的255个机器时钟内应答了,就可以检测到。
你原来那个函数我也没看懂,如果运行的话,其实没有任何结果,只是延迟的作用。
一周热门 更多>