微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 新手,刚刚学习单片机 遇到了一些问题 请教各位师哥师姐!

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

时间:10-02 整理:3721RD 点击:
希望有心人 能给我讲解一下I2C总线的知识 ,详细点,这块儿我学的有点懵。

我也在找相关资料

51还是stm32或者其他ARM的单片机?

估计讲了你也是稀里糊涂,看看视频

说白了关键就两个信号,数据给定后,然后时钟上升沿读数据。

51的单片机 谢谢

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来定义这个函数,效果是什么?


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来定义这个函数,效果是什么?


bit高位时1,sda就是1.也是8位吧。后面那个因为返回的是bit ack_bit。所以用bit

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

网站地图

Top