uchar Read_A_Byte()
{
uchar i,b;
for(i=0;i<8;i++)
{
SCL=1;b<<=1;B|=SDA;SCL=0;
}
return b;
}
帮俺讲一下,这个程序。为什么能读一个字节,B是干什么用?
这个程序有问题。
大写的 B 应该改为小写的 b 。
引用: 引用 1 楼 zdxin 的回复:
这个程序有问题。
大写的 B 应该改为小写的 b 。
楼上说得对,
你的代码就是用普通的IO模拟I2C功能。
由于是模拟,所以没有对应的SDA数据寄存器,只能通过一位一位的移位处理。
接二楼的,比如你要接受的数据为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上的数据了
应该明白了吧