硬汉嵌入式论坛

 找回密码
 立即注册
查看: 338|回复: 4
收起左侧

[有问必答] 关于将两个8位数赋值给一个16位数的疑问

[复制链接]

1

主题

0

回帖

3

积分

新手上路

积分
3
发表于 2024-4-10 17:50:26 | 显示全部楼层 |阅读模式
12-1 AT24C02数据存储.rar (46.03 KB, 下载次数: 1)
无符号整型左移8位不是全部溢出了吗?还怎么赋值给Data?
51单片机,kile4工程,单片机通过I2C向AT24C02发送数据并读取。

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;
        }
}





回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2024-4-11 08:02:12 | 显示全部楼层
type promotion了解一下?
回复

使用道具 举报

0

主题

9

回帖

9

积分

新手上路

积分
9
发表于 2024-4-11 08:02:59 | 显示全部楼层
A character, a short integer, or an integer bit-field, all either signed or not, or an object of enumeration type, may be used in an expression wherever an integer maybe used. If an int can represent all the values of the original type, then the value is converted to int; otherwise the value is converted to unsigned int. This process is called integral promotion.
回复

使用道具 举报

7

主题

26

回帖

47

积分

新手上路

积分
47
发表于 2024-4-11 09:29:41 | 显示全部楼层
我打开你的程序压缩包,里面是这样写的
Num=AT24C02_ReadByte(0);
Num|=AT24C02_ReadByte(1)<<8;
然后你的Num 类型是这样定义的,
unsigned int Num;
它是unsigned int ,不是8位,如果你的是32位MCU,它是32位,这取决于你的机器,所以就算左移8位也不会溢出
回复

使用道具 举报

0

主题

124

回帖

124

积分

初级会员

积分
124
发表于 2024-4-18 21:55:46 | 显示全部楼层
Num|=(u16)AT24C02_ReadByte(1)<<8;
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-5 19:55 , Processed in 0.217270 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表