当前位置: 代码迷 >> 单片机 >> ,为什么从eeprom中读取的数全是255呢
  详细解决方案

,为什么从eeprom中读取的数全是255呢

热度:74   发布时间:2016-04-28 14:59:57.0
求助,为什么从eeprom中读取的数全是255呢?
如题,我想连续读写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);                 //延时