帮我看看有什么问题

2020-02-09 11:30发布

void writeByteEeprom(unsigned char add, unsigned char data)
{
        EEADR = add;
        EEDATA = data;
        EECON1bits.WREN = 1;
        INTCONbits.GIE = 0;//关闭所有中断
        EECON2 = 0x55;
        EECON2 = 0xaa;
        EECON1bits.WR = 1;
        while(1 == EECON1bits.WR);//等待写入完毕
        INTCONbits.GIE = 1;//打开所有中断
        EECON1bits.WREN = 0;
}


写单个字节的E2,我写进去之后,比如我写00地址,结果04地址也写进去相同的了.
哪位大虾帮我看看什么问题?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
ddwl99
1楼-- · 2020-02-09 13:34
写比如我要是写04,结果00也跟着改了~~
真崩溃了~
jiabin1024
2楼-- · 2020-02-09 15:00
还没遇到过这种情况,你是怎么知道“写单个字节的E2,我写进去之后,比如我写00地址,结果04地址也写进去相同的了”?仿真还是读出来的结果?
ddwl99
3楼-- · 2020-02-09 18:24
我把E2读出来了啊~发现04也变成跟01一样的了!
my2009
4楼-- · 2020-02-09 23:49
如果不是读程序出错, 那就是单片机EEPROM坏了, 确保读程序没问题吗?
ddwl99
5楼-- · 2020-02-10 04:52
 精彩回答 2  元偷偷看……
wangqh1983
6楼-- · 2020-02-10 04:56
回复【楼主位】ddwl99
-----------------------------------------------------------------------

uchar Rd_EeProm(uchar Rd_EeAddr)
{
        EEADR = Rd_EeAddr;
        RD=1;
        return EEDATA;
}
void Wr_EeProm(uchar Wr_EeAdd,uchar Wr_EeData)
{
        do
        ;
        while(WR == 1);    //等待上次数据写完
        EEADR = Wr_EeAdd;
        EEDATA = Wr_EeData;
        EEPGD = 0;        //指向数据区
        WREN = 1;
        GIE = 0;
        EECON2 = 0x55;
        EECON2 = 0xaa;
        WR = 1;
        WREN = 0;
        GIE = 1;
}

记得写完最后一个字节如果马上读的话,加上:
do
;
while(WR == 1);    //等待上次数据写完

一周热门 更多>