打印

IIC协议怪怪怪!!

[复制链接]
2467|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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_();
}
这是按协议来的吗?我觉得不是 但它就是可以用

使用特权

评论回复
5
hungrywolf1987| | 2012-8-18 10:03 | 只看该作者
严格按照协议是肯定不会出问题,但是有些代码就是不严格,也没问题!

使用特权

评论回复
6
08211004kun| | 2012-8-18 10:39 | 只看该作者
或许这个函数是没错的,但这个函数之前的那些步骤你有没有做好?

使用特权

评论回复
7
szliuhe| | 2012-8-18 12:07 | 只看该作者
是不是芯片的问题

使用特权

评论回复
8
szliuhe| | 2012-8-18 12:07 | 只看该作者
你用的是那个型号?

使用特权

评论回复
9
szliuhe| | 2012-8-18 12:07 | 只看该作者
在哪

使用特权

评论回复
10
taokan1991|  楼主 | 2012-8-18 12:54 | 只看该作者
用的是pcf8591

使用特权

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

本版积分规则

10

主题

120

帖子

0

粉丝