本帖最后由 可不慎乎 于 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;
}
}
|