新手,刚刚学习单片机 遇到了一些问题 请教各位师哥师姐!

2019-07-15 18:09发布

希望有心人 能给我讲解一下I2C总线的知识 ,详细点,这块儿我学的有点懵。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
8条回答
yzq110408116
2019-07-16 12:33
菜鸟学单片机 发表于 2014-11-20 09:46
说白了关键就两个信号,数据给定后,然后时钟上升沿读数据。

unsigned char ReadData()
// 从AT24Cxx移入数据到MCU
{
        unsigned char i;
        unsigned char x;   //储存从AT24Cxx中读出的数据
        for(i = 0; i < 8; i++)
        {
                SCL = 1;                //SCL置为高电平
                x<<=1;                  //将x中的各二进位向左移一位
                x|=(unsigned char)SDA;  //将SDA上的数据通过按位“或“运算存入x中
                SCL = 0;                        //在SCL的下降沿读出数据
        }
        return(x);                //将读取的数据返回
}



上面这个子程序的x|=(unsigned char)SDA;这一句没理解,把SDA强制转换成无符号类型后和X做按位或运算之后X的值是多少?是几位的数?而且SDA只有高电平和低电平两个数据啊!


bit WriteCurrent(unsigned char y)
{
        unsigned char i;
        bit ack_bit;               //储存应答位
        for(i = 0; i < 8; i++)                // 循环移入8个位
        {
            SDA = (bit)(y&0x80);   //通过按位“与”运算将最高位数据送到S
                                                  //因为传送时高位在前,低位在后
                _nop_();            //等待一个机器周期  
           SCL = 1;            //在SCL的上升沿将数据写入AT24Cxx      
           _nop_();            //等待一个机器周期
          _nop_();             //等待一个机器周期      
               
                  SCL = 0;            //将SCL重新置为低电平,以在SCL线形成传送数据所需的8个脉冲
                y <<= 1;           //将y中的各二进位向左移一位
        }

上面这个子函数SDA = (bit)(y&0x80); 的这一句,通过bit强制转换后,SDA的值应该是多少?是几位的一个数据?
还有bit WriteCurrent(unsigned char y) 为什么用bit来定义这个函数,效果是什么?




一周热门 更多>