关于 I2C的小问题
时间:10-02
整理:3721RD
点击:
unsigned char I2cReadByte()
{
unsigned char a=0,dat=0;
SDA=1; //起始和发送一个字节之后SCL都是0
Delay10us();
for(a=0;a<8;a++)//接收8个字节
{
SCL=1;
Delay10us();
dat<<=1;
dat|=SDA;
Delay10us();
SCL=0;
Delay10us();
}
return dat;
}
这是读取函数 我知道 dat|=SDA 的意思 我想知道想把这个程序改成 &0x80 该怎么该 并且稍微解释下 这两个方法的不同
{
unsigned char a=0,dat=0;
SDA=1; //起始和发送一个字节之后SCL都是0
Delay10us();
for(a=0;a<8;a++)//接收8个字节
{
SCL=1;
Delay10us();
dat<<=1;
dat|=SDA;
Delay10us();
SCL=0;
Delay10us();
}
return dat;
}
这是读取函数 我知道 dat|=SDA 的意思 我想知道想把这个程序改成 &0x80 该怎么该 并且稍微解释下 这两个方法的不同
&0x80是为了把一个字节拆成8位,一位一位数据发,
你上面的是接收字节,是要把一位一位的数据合成一个字节,你&0x80干嘛呢。
如上一位所说,&0x80是用来发送数据用的
因为 有个人给我说要 &0x80让我考虑下....
那么发送我用的是这个方法
for(a=0;a<8;a++)
{
SDA=dat>>7;
dat=dat<<1;.
那么该怎么改?
那么发送我用的是这个方法
for(a=0;a<8;a++)
{
SDA=dat>>7;
dat=dat<<1;.
那么该怎么改?
void i2c_sendbyte(u8 dat)
{
u8 i,temp=dat;
for(i=0;i<8;i++)
{
if(temp & 0x80)
sda = 1;
else
sda = 0;
temp<<=1;
}
}
这样发送。scl自己加
懂了 ,非常感谢,但是两个感觉没啥区别 .....