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

2019-07-15 18:09发布

希望有心人 能给我讲解一下I2C总线的知识 ,详细点,这块儿我学的有点懵。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
yecc10
1楼-- · 2019-07-15 23:32
我也在找相关资料
qq12516
2楼-- · 2019-07-16 01:44
 精彩回答 2  元偷偷看……
@一只小菜鸟
3楼-- · 2019-07-16 05:11
估计讲了你也是稀里糊涂,看看视频
菜鸟学单片机
4楼-- · 2019-07-16 08:46
说白了关键就两个信号,数据给定后,然后时钟上升沿读数据。
yzq110408116
5楼-- · 2019-07-16 11:42
qq12516 发表于 2014-11-15 23:20
51还是stm32或者其他ARM的单片机?

51的单片机 谢谢
yzq110408116
6楼-- · 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来定义这个函数,效果是什么?




一周热门 更多>