打印
[其它应用]

实际读出不对

[复制链接]
328|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tian111|  楼主 | 2020-5-10 11:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

/********************************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呢

使用特权

评论回复
沙发
songqian17| | 2020-5-10 11:26 | 只看该作者
读EEPROM与读FLASH程序存储器一样

使用特权

评论回复
板凳
chenho| | 2020-5-10 11:29 | 只看该作者
对,用DPTR寄存器做地址

使用特权

评论回复
地板
gongche| | 2020-5-10 11:33 | 只看该作者

不用XPAGE和IB_OFFSET,也不用那几个NOP

使用特权

评论回复
5
chenho| | 2020-5-10 11:36 | 只看该作者
嗯,也不用关中断,MCU也不会进入IDLE状态

使用特权

评论回复
6
tian111|  楼主 | 2020-5-10 11:39 | 只看该作者
新手,,麻烦大神写一下读eeprom的代码,谢谢!

使用特权

评论回复
7
zhuhuis| | 2020-5-10 11:41 | 只看该作者

这是正确的读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+read_page*256);
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        
//        XPAGE=0x00;
        FLASHCON=0;
        EA=1;
        return temp;
}

使用特权

评论回复
8
tian111|  楼主 | 2020-5-10 11:44 | 只看该作者
哦,那我就知道怎么回事了,多谢大家

使用特权

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

本版积分规则

797

主题

8878

帖子

7

粉丝