打印

看了I2C的经典程序,有点疑问.

[复制链接]
1948|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
俺从头来|  楼主 | 2007-2-9 13:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
I2c, AC, ck, AI, cw
初整IIC,到网上找了些程序,发现都差不多,但有地方不明白:

I2CWAITACK函数定义为BIT型,而调用语句却是"I2CWaitAck();"

RETURN ;起什么作用~~~


如果没有应答,主器件不是应该重新发吗,下边的这个程序怎么能重新发



#define true  1
#define false 0

bit  I2CWaitAck(void);
void I2CReadDate(void);


/*********读取ACK信号*********/
bit I2CWaitAck(void)  //返回为:1=有ACK,0=无ACK
{
    uchar errtime=255;
    SCL=0;
    SDA=1;
    I2CWait();
    SCL=1;
    I2CWait();
    while(SDA)
    {
        errtime--;
        if(!errtime)
        SCL=0;
        return false;
    }
    SCL=0;
    return true;
}


/******读SD2300实时数据寄存器******/
void I2CReadDate(void)
{
    uchar n;
    I2CStart();
    I2CStop();
    I2CStart();
    I2CSendByte(0x64);       //从年开始读取数据
    I2CWaitAck();
    I2CSendByte(0x00);     
    I2CWaitAck();
    I2CStart();
    I2CSendByte(0x65); 
    I2CWaitAck();
    for(n=0;n<7;n++)
    {
        date[n]=I2CReceiveByte();
        if (n!=6)         //最后一个数据不应答
        {
            I2CAck();
        }
    }
    I2CNoAck();
    I2CStop();
}

相关帖子

沙发
szzhengjin| | 2007-2-10 09:59 | 只看该作者

这个程序有问题

/*********读取ACK信号*********/
bit I2CWaitAck(void)  //返回为:1=有ACK,0=无ACK
{
    uchar errtime=255;
    SCL=0;
    SDA=1;
    I2CWait();
    SCL=1;
    I2CWait();
    while(SDA)
    {
        errtime--;
        if(!errtime)
        SCL=0;
        return false;-----这句有问题,其实是if语句内的,少了大括号
    }
    SCL=0;
    return true;
}

使用特权

评论回复
板凳
rclijia| | 2008-10-30 20:49 | 只看该作者

我也这想的

ACK函数的返回值都没用到啊!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

436

帖子

0

粉丝