IIC协议怪怪怪!!

[复制链接]
 楼主| taokan1991 发表于 2012-8-17 15:12 | 显示全部楼层 |阅读模式
uchar IIC_read_byte()
{
uchar i,k;
scl=0;
_nop_();
sda=1;
for(i=0;i<8;i++)
{
  scl=1;
  _nop_();
  k=(k<<1)|sda;
  scl=0;
  _nop_();
}
_nop_();
return k;
}
按照协议写的 可是就是读出的不是对的???

还有换了个写法(其实是一样的)
   unsigned char Read(void)
   {
    unsigned char temp=0;
    unsigned char temp1=0;
    unsigned char BitCounter=8;
    Sda=1;
    do
    {
            Scl=0;
               _nop_();
            Scl=1;
             _nop_();
             if(Sda)
                temp=temp|0x01;
            else
                 temp=temp&0xfe;

             if(BitCounter-1)
             {
                    temp1=temp<<1;
                    temp=temp1;
              }
            BitCounter--;
   
      }  
      while(BitCounter);
      return(temp);
  }
就好啦,但把do{...}里面的第一行Scl=0 放到do{....}里面最后一行(都是满足协议的)就出现第一个程序的结果 很不解
yewuyi 发表于 2012-8-17 15:14 | 显示全部楼层
见怪不怪,其怪自败。

一切怪异的根源在于你有无严格按照IIC协议写代码。
 楼主| taokan1991 发表于 2012-8-17 15:31 | 显示全部楼层
那在哪里?
 楼主| taokan1991 发表于 2012-8-17 15:39 | 显示全部楼层
还有 有人这样写应答的代码  
void Ack(void)
  {
        Sda=0;
        _nop_();
        Scl=1;
        _nop_();
        Scl=0;
        _nop_();
}
这是按协议来的吗?我觉得不是 但它就是可以用
hungrywolf1987 发表于 2012-8-18 10:03 | 显示全部楼层
严格按照协议是肯定不会出问题,但是有些代码就是不严格,也没问题!
08211004kun 发表于 2012-8-18 10:39 | 显示全部楼层
或许这个函数是没错的,但这个函数之前的那些步骤你有没有做好?
szliuhe 发表于 2012-8-18 12:07 | 显示全部楼层
是不是芯片的问题
szliuhe 发表于 2012-8-18 12:07 | 显示全部楼层
你用的是那个型号?
szliuhe 发表于 2012-8-18 12:07 | 显示全部楼层
在哪
 楼主| taokan1991 发表于 2012-8-18 12:54 | 显示全部楼层
用的是pcf8591
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

120

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

10

主题

120

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部