如题,我想连续读写4字节的eeprom实现存储或取出long int型数据,可是读出来的却是255怎么回事啊,芯片用的at24c256
代码如下:
unsigned int read(unsigned char ee_add_h,unsigned char ee_add_l)
{
unsigned int add=0;
AT24C04_Start(); //起始信号
AT24C04_SendByte(0xa0); //发送设备地址+写信号
AT24C04_SendByte(ee_add_h); //发送存储单元地址
AT24C04_SendByte(ee_add_l); //发送存储单元地址,高低两个地址
AT24C04_Start(); //起始信号
AT24C04_SendByte(0xa1); //发送设备地址+读信号
add = AT24C04_RecvByte();
AT24C04_Stop(); //停止信号
return (unsigned int) add;
}
void write(unsigned char ee_adr_h,unsigned char ee_adr_l,unsigned char eedata)
{
AT24C04_Start(); //起始信号
AT24C04_SendByte(0xa0); //发送设备地址+写信号
AT24C04_SendByte(ee_adr_h); //发送存储单元高地址
AT24C04_SendByte(ee_adr_l); //发送存储单元地址,高低两个地址
AT24C04_SendByte(eedata);
AT24C04_Stop(); //停止信号
}
/*void write_int(unsigned int ee_adr_h,unsigned char eedata)
{
unsigned char ee_adr_l;
ee_adr_l=ee_adr_h;
ee_adr_h=ee_adr_h>>8;
AT24C04_Start(); //起始信号
AT24C04_SendByte(0xa0); //发送设备地址+写信号
AT24C04_SendByte(ee_adr_h); //发送存储单元高地址
AT24C04_SendByte(ee_adr_l); //发送存储单元地址,高低两个地址
AT24C04_SendByte(eedata);
AT24C04_Stop(); //停止信号
}*/
/**************************************
起始信号
**************************************/
void AT24C04_Start()
{
SDA = 1; //拉高数据线
SCL = 1; //拉高时钟线
delay_nop(5); //延时
SDA = 0; //产生下降沿
delay_nop(5); //延时
SCL = 0; //拉低时钟线
}
/**************************************
停止信号
**************************************/
void AT24C04_Stop()
{
SDA = 0; //拉低数据线
SCL = 1; //拉高时钟线
delay_nop(5); //延时
SDA = 1; //产生上升沿
delay_nop(5); //延时
}
/**************************************
发送应答信号
入口参数:ack (0:ACK 1:NAK)
*************************************
void AT24C04_SendACK(bit ack)
{
SDA = ack; //写应答信号
SCL = 1; //拉高时钟线
delay_nop(20); //延时
SCL = 0; //拉低时钟线
delay_nop(20); //延时
}
*/
/**************************************
接收应答信号
**************************************/
bit AT24C04_RecvACK()
{
SCL = 1; //拉高时钟线
delay_nop(5); //延时