IIC 编程

ladyhunter   2010-3-18 16:38 楼主
uchar Read_A_Byte()
{
        uchar i,b;
        for(i=0;i<8;i++)
        {
                 SCL=1;b<<=1;B|=SDA;SCL=0;
        }
        return b;
}

帮俺讲一下,这个程序。为什么能读一个字节,B是干什么用?

回复评论 (4)

这个程序有问题。
大写的 B 应该改为小写的 b 。
点赞  2010-3-18 17:39
引用: 引用 1 楼 zdxin 的回复:
这个程序有问题。
大写的 B 应该改为小写的 b 。


楼上说得对,
你的代码就是用普通的IO模拟I2C功能。
由于是模拟,所以没有对应的SDA数据寄存器,只能通过一位一位的移位处理。
点赞  2010-3-18 18:01
    接二楼的,比如你要接受的数据为10101011(8位),b刚开始初始化为00000000
循环开始,在scl为高时,读取sda上的数据,对于数据10101011,按高位读入,则第一个读入为1,即scl为高时,sda应该为1,第一个循环结束,b=00000001
    第二个循环,b左移一位,b=00000010,再次读入sda,应该为0,则b=b|sda后,b=00000010,第三个循环再左移,得00000100,再读入,得00000101
    知道b=10101011,把b返回,就是得到i2c上的数据了
     应该明白了吧
点赞  2010-3-18 18:17
代码编写者没有一个好习惯

胡乱起名
点赞  2010-3-18 19:56
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复