问答

汇集网友智慧,解决技术难题

21ic问答首页 - 关于将两个8位数赋值给一个16位数的疑问

REA TE DA Read at24c02 疑问

关于将两个8位数赋值给一个16位数的疑问

可不慎乎2024-04-10
本帖最后由 可不慎乎 于 2024-4-10 17:51 编辑


12-1 AT24C02数据存储.rar (46.03 KB)
51单片机,kile4工程,单片机通过I2C向AT24C02发送数据并读取。
无符号整型左移8位不是全部溢出了吗?还怎么赋值给Data?Data=AT24C02_ReadByte(0);//AT24C02_ReadByte(0)是一个函数返回一个8位unsigned char的数
Data|=(AT24C02_ReadByte(1)<<8);

unsigned char AT24C02_ReadByte(unsigned int WordAddress)//向AT24C02读
{
        unsigned int Data;
        I2C_Start();//开始条件
        I2C_SendByte(AT24C02_ADDRESS);        //主机I2C发送从机地址和写指令
        I2C_ReceiveAck();        //主机接收应答
        I2C_SendByte(WordAddress);//主机发送字地址
        I2C_ReceiveAck();        //接收应答
      
        I2C_Start();
        I2C_SendByte(AT24C02_ADDRESS|0x01);//主机发送从机地址和读指令
        I2C_ReceiveAck();        //接收应答,且从机获得SDA线权
        Data=I2C_ReceiveByte();        //读一个字节的返回值赋给Data
        I2C_SendAck(1);//发送应答1
        I2C_Stop();
        return Data;
}

void I2C_SendByte(unsigned char Byte)
{
        unsigned char i=0;
        for(i=0;i<=7;i++)
        {
                //起始条件保证scl为低电平(组合都是:起始、发/收、应答?)3种数据帧
                I2C_SDA=Byte&(0x80>>i);//将Byte由低到高给SDA
                I2C_SCL=1;//置高立马置低能不能读到数据?看时序i2c读数用时和单片机io口转换电平用时
                I2C_SCL=0;
        }
}





回答 +关注 1
779人浏览 3人回答问题 分享 举报
3 个回答

您需要登录后才可以回复 登录 | 注册