21ic问答首页 - 关于将两个8位数赋值给一个16位数的疑问
关于将两个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;
}
}
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;
}
}
赞0
整型提升是C程序设计语言中的一项规定:在表达式计算时,各种整型首先要提升为int类型,如果int类型不足以表示则要提升为unsigned int类型;然后执行表达式的运算。
keil c51默认开启此选项,亦可关闭。
无标题2.png (34.07 KB )
下载附件
2024-4-10 22:59 上传
评论
2024-04-10
赞0
评论
2024-04-10
赞0
评论
2024-04-10
您需要登录后才可以回复 登录 | 注册