微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 关于 I2C的小问题

关于 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 该怎么该 并且稍微解释下 这两个方法的不同

&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自己加

懂了 ,非常感谢,但是两个感觉没啥区别 .....

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top