这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 【已OK】软件模拟IIC

共3条 1/1 1 跳转至

【已OK】软件模拟IIC

菜鸟
2008-07-29 17:30:25     打赏
软件模拟IIC,在ACK应答的时候SDA返回1(NG)。
但是IIC通信协议基本满足,就是ACK应答返回NG。
请问问题可能出在哪?
以下是我的程序:
void StartIIC(void)
{
IIC_SCL = 1;
IIC_SDA = 1;
waitus(5);
IIC_SDA = 0;         //开始通信条件建立
waitus(4);     
IIC_SCL = 0;
}

Bool TxData(U8 data)
{
   U8 i;
   for(i = 0; i<8; i++)
   {
       if(data&0x80){
        IIC_SDA = 1;
        waitus(2);
        }
    else{
        IIC_SDA = 0;
        waitus(2); //中间函数调用3us,SCL低电平时间大于4.7us
          }
      IIC_SCL = 1; 
       waitus(2);
       IIC_SCL = 0;
       data<<=1;
     }
    IIC_SDA = 1;    //MCU侧主动拉高
    waitus(2);
   IIC_SCL = 1;
    PD_IIC_SDA = IN; //设为输入管脚
    waitus(4);
    if(IIC_SDA){   //如果为高电平 
     return Error;
    }
   else
   ...... 
}



关键词: 软件     模拟    

菜鸟
2008-07-29 19:59:29     打赏
2楼

谢谢了。
经过FISHS_NEW_LIFE的指导,IIC通信已经OK。


菜鸟
2008-07-29 20:04:43     打赏
3楼

英文PDF中其实有这么一句话,供大家一起参考:
The master(uP) puts a resistive HIGH level on the SDA line during the acknowledge clock pulse. The peripheral that acknowledges has to pull-down(LOW) the SDA line during the acknowledge clock pulse, so that the SDA line is stable LOW during this clock pulse.

我使用的是R8C 2C的片子。


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]