电饭锅 发表于 2012-6-7 09:01:31

求助!关于STC单片机的控制AT24C02的问题

在宏晶网站上下载的程序,其中有个向IIC总线发送一个字节数据的函数中接收应答为什么是这样写的(红色部分),而不是用while等待?求解

/**************************************
接收应答信号
**************************************/
bit AT24C04_RecvACK()
{
    SCL = 1;                  //拉高时钟线
    Delay5us();               //延时
    CY = SDA;                   //读应答信号
    SCL = 0;                  //拉低时钟线
    Delay5us();               //延时

    return CY;
}

/**************************************
向IIC总线发送一个字节数据
**************************************/
void AT24C04_SendByte(BYTE dat)
{
    BYTE i;

    for (i=0; i<8; i++)         //8位计数器
    {
      dat <<= 1;            //移出数据的最高位
      SDA = CY;               //送数据口
      SCL = 1;                //拉高时钟线
      Delay5us();             //延时
      SCL = 0;                //拉低时钟线
      Delay5us();             //延时
    }
    AT24C04_RecvACK();
}

marshallemon 发表于 2012-6-7 09:05:57

本帖最后由 marshallemon 于 2012-6-7 09:08 编辑

如果E2P出问题,用while()不把单片机等死了?

lcw_swust 发表于 2012-6-7 09:07:58

若用while等待,那NOACK怎么办

XA144F 发表于 2012-6-7 09:12:08

STC网站上有这个程序的,直接下载修改试试。

sme 发表于 2012-6-7 11:46:46

对EEPROM来说,不需要用WHILE等待,你发了SCK给它,它必须回应,不管是ACK还是NAK。

sf49ers 发表于 2012-6-7 12:09:06

sme 发表于 2012-6-7 11:46 static/image/common/back.gif
对EEPROM来说,不需要用WHILE等待,你发了SCK给它,它必须回应,不管是ACK还是NAK。 ...

嗯,lz对IIC协议理解还不够透彻

蜂巢 发表于 2012-6-7 12:20:56

程序一定要考虑异常的情况。
页: [1]
查看完整版本: 求助!关于STC单片机的控制AT24C02的问题