打印

瑞萨单片机写EEPROM问题

[复制链接]
1344|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
沙发
weiwanli|  楼主 | 2015-1-5 16:09 | 只看该作者
void IIC_Start(void)
{
        SDA_Output();
        SDA=1;
        NOP();
        SCL=1;
        NOP();
        SDA=0;
        NOP();
}
/***************停止信号**************/
void IIC_Stop(void)
{
        SDA_Output();
        SDA=0;
        NOP();
        SCL=1;
        NOP();
        SDA=1;
        NOP();
}
/***********等待应答信号***********/
void IIC_Responsion(void)
{
        unsigned char i;
        SDA_Input();
        SCL=1;
        NOP();
       
        while((SDA==1)&&(i<250))i++;
        SCL=0;
        NOP();
}
/************写一个字节************/
void IIC_Write_byte(unsigned char date)
{
        unsigned char i,temp;
        SDA_Output();
        temp=date;
        for(i=0;i<8;i++)
        {
                  SCL=0;
                NOP();
                if(temp&0x80)
                {
                        SDA = 1;
                }
                else
                {
                        SDA        = 0;
                }       
                temp=temp<<1;
                NOP();
                  SCL=1;
                NOP();       
        }
        SCL=0;
        NOP();
        SDA=1;
        NOP();
}
/************读一个字节************/
unsigned char IIC_Read_byte(void)
{
        unsigned char i,temp;
       
        SDA=1;
        SDA_Input();
        delay_ms(2);
        NOP();
        for(i=0;i<8;i++)
        {
                  SCL=0;
                NOP();NOP();NOP();
                temp=(temp<<1)|SDA;
                SCL=1;
                NOP();NOP();NOP();
        }
        SCL=0;
        NOP();
        return temp;
}
/*********对任意地址写数据*********/
void IIC_Write_add(unsigned int address,unsigned char date)
{
       
        IIC_Start();
        IIC_Write_byte(Device_Adress);
        IIC_Responsion();
        IIC_Write_byte((address>>8)&0xff);
        IIC_Responsion();
        IIC_Write_byte( address&0xff);
        IIC_Responsion();
        IIC_Write_byte(date);
        IIC_Responsion();  
        IIC_Stop();
}
/*********对任意地址读数据*********/
unsigned char IIC_Read_add(unsigned int address)
{
        unsigned char date;
        // In_Put Mode
        IIC_Start();
        IIC_Write_byte(Device_Adress);
        IIC_Responsion();
        IIC_Write_byte((address>>8)&0xff);
        IIC_Responsion();
        IIC_Write_byte( address&0xff);
        IIC_Responsion();
        IIC_Start();
        IIC_Write_byte(Device_Adress|Read_Single);
        IIC_Responsion();
        date=IIC_Read_byte();
        IIC_Stop();
        return date;
}

使用特权

评论回复
板凳
weiwanli|  楼主 | 2015-1-5 16:12 | 只看该作者
        IIC_Write_add(0x300,0x01);
        NOP();
        IIC_Write_add(0x301,0x28);
        NOP();


这就是写数据的代码,难道中间的延时太少了??

使用特权

评论回复
地板
JY-DX-JY| | 2015-1-5 16:28 | 只看该作者
加长延时。

使用特权

评论回复
5
wyq165| | 2015-1-5 16:31 | 只看该作者
weiwanli 发表于 2015-1-5 16:12
IIC_Write_add(0x300,0x01);
        NOP();
        IIC_Write_add(0x301,0x28);

两次擦除写之间需要延时的,因为你发过去的数据,EE需要擦除。特别是连续写和页写

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
weiwanli + 1 解释的很详细,感谢!
6
ayb_ice| | 2015-1-5 17:03 | 只看该作者
写需要时间,一般在5~20MS,看手册

使用特权

评论回复
7
weiwanli|  楼主 | 2015-1-8 11:09 | 只看该作者
灰常感谢,看了下手册,按页或者字节连续写的最大延时为5ms。我再试试

eeprom.png (29.84 KB )

eeprom.png

eeprom.png (29.84 KB )

eeprom.png

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

31

帖子

1

粉丝