打印
[其它应用]

请大神帮忙看看我写的Eeprom代码错在哪

[复制链接]
1289|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arvinlove2012|  楼主 | 2014-7-17 18:07 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/********************************write eeprom*******************************/
void write_eeprom(Byte write_page,Byte write_addr,Byte write_data)
{
    EA=0;
        FLASHCON=1;
        XPAGE=write_page;
        IB_OFFSET=write_addr;
        IB_DATA=write_data;
        IB_CON1=0X6E;
        IB_CON2=0X05;
        IB_CON3=0X0A;
        IB_CON4=0X09;
        IB_CON5=0X06;
        _nop_();
        _nop_();
        _nop_();
        _nop_();

        XPAGE=0x00;
        FLASHCON=0;
        EA=1;
}
/********************************read eeprom********************************/
Byte read_eeprom(Byte read_page,Byte read_addr)
{
        Byte temp;
        EA=0;
    FLASHCON=1;
        XPAGE=read_page;
        IB_OFFSET=read_addr;
        temp=*(Byte code *)(read_addr);
        _nop_();
        _nop_();
        _nop_();
        _nop_();
       
        XPAGE=0x00;
        FLASHCON=0;
        EA=1;
        return temp;
}
/********************************erase eeprom*******************************/
void erase_eeprom(Byte erase_page)
{
    EA=0;
        FLASHCON=1;
        XPAGE=erase_page;
        IB_CON1=0XE6;
        IB_CON2=0X05;
        IB_CON3=0X0A;
        IB_CON4=0X09;
        IB_CON5=0X06;
        _nop_();
        _nop_();
        _nop_();
        _nop_();

        XPAGE=0X00;
        FLASHCON=0;
        EA=1;
}
/********************************主函数*************************************/
void main(void)
{
    CLKCON=0X20;         //系统分频1/2=6M
        P0CR&=0x0f;       //P0.4,P0.5,P0.6,P0.7输入口         
        P0PCR|=0xf0;                 //输入口打开上拉电阻
        init();
        T4_init();
        T5_init();
        ADC_init();
        if(P0_7==0)
        {
             while(!P0_7);
              //erase_eeprom(0);               
              //write_eeprom(0,0,79);
              //write_eeprom(0,1,80);
              //write_eeprom(0,2,81);
                erase_eeprom(1);
                write_eeprom(1,3,82);
                write_eeprom(1,4,83);
                write_eeprom(1,5,84);
                A=read_eeprom(0,0);
                B=read_eeprom(0,1);
                C=read_eeprom(0,2);
                D=read_eeprom(1,3);
                E=read_eeprom(1,4);
                F=read_eeprom(1,5);
我先是写的扇区0的数据,写正常,读出也正常,然后关掉写,直接读扇区0的数据正常,即A=79,B=80,C=81,说明已经保存到eeprom里了,但是我写扇区1,D,E,F不是应该等于82,83,84吗,怎么实际读出来D,E,F却等于79,80,81呢,,新手,请大神赐教,,感激不尽!!
沙发
arvinlove2012|  楼主 | 2014-7-17 18:12 | 只看该作者
坐等大神赐教,,谢谢!!

使用特权

评论回复
板凳
NJZR| | 2014-7-17 19:21 | 只看该作者
读EEPROM与读FLASH程序存储器一样,用DPTR寄存器做地址,不用XPAGE和IB_OFFSET,也不用那几个NOP,也不用关中断,MCU也不会进入IDLE状态

使用特权

评论回复
地板
arvinlove2012|  楼主 | 2014-7-18 09:26 | 只看该作者
NJZR 发表于 2014-7-17 19:21
读EEPROM与读FLASH程序存储器一样,用DPTR寄存器做地址,不用XPAGE和IB_OFFSET,也不用那几个NOP,也不用关中 ...

新手,,麻烦大神写一下读eeprom的代码,谢谢!

使用特权

评论回复
5
arvinlove2012|  楼主 | 2014-7-18 10:05 | 只看该作者
NJZR 发表于 2014-7-17 19:21
读EEPROM与读FLASH程序存储器一样,用DPTR寄存器做地址,不用XPAGE和IB_OFFSET,也不用那几个NOP,也不用关中 ...

谢谢你,,搞定了!!!

使用特权

评论回复
6
arvinlove2012|  楼主 | 2014-7-18 10:05 | 只看该作者
结贴。。。

使用特权

评论回复
7
amw1688| | 2014-7-18 11:58 | 只看该作者

使用特权

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

本版积分规则

6

主题

19

帖子

0

粉丝