打印
[PIC®/AVR®/dsPIC®产品]

PIC16F18344的EEPROM操作

[复制链接]
3137|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
fangyixm|  楼主 | 2021-7-5 15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
   在使用PIC16F18344的内部eeprom时,写入数据,然后读出来,很多地址的数据都不对,这会什么原因?中断已经关闭。
void DATAEE_WriteByte(uint8_t bAdd, uint8_t bData)
{
    uint8_t GIEBitValue = INTCONbits.GIE;

    NVMADRH = 0;
    NVMADRL = bAdd; //+ EEP_OFFSET;
    NVMDATL = bData;   
    NVMCON1bits.NVMREGS = 1;
    NVMCON1bits.WREN = 1;
    INTCONbits.GIE = 0;     // Disable interrupts
    NVMCON2 = 0x55;
    NVMCON2 = 0xAA;
    NVMCON1bits.WR = 1;
    NOP();  // NOPs may be required for latency at high frequencies
    NOP();   
    // Wait for write to complete
    while (NVMCON1bits.WR)
    {
    }

    NVMCON1bits.WREN = 0;
    INTCONbits.GIE = GIEBitValue;   // restore interrupt enable
}

uint8_t DATAEE_ReadByte(uint8_t bAdd)
{
    NVMADRH = 0;
    NVMADRL = bAdd; //+ EEP_OFFSET;
    NVMCON1bits.NVMREGS = 1;   
    NVMCON1bits.RD = 1;
    NOP();  // NOPs may be required for latency at high frequencies
    NOP();
    NOP();  // NOPs may be required for latency at high frequencies
    NOP();
    return (NVMDATL);
}

使用特权

评论回复
沙发
xinxianshi| | 2021-7-5 16:22 | 只看该作者
先清除再写,试试。

使用特权

评论回复
板凳
lcczg| | 2021-7-5 16:49 | 只看该作者
你的地址是否加了7000h? 如下数据手册所述:
11.4.3 NVMREG WRITE TO EEPROM
Writing   to   the   EEPROM   is   accomplished   by   the
following steps:1.Set  the  NVMREGS  and  WREN  bits  of  theNVMCON1 register.
2.Write the desired address (address +7000h) into the     NVMADRH:NVMADRL     register     pair

使用特权

评论回复
地板
fangyixm|  楼主 | 2021-7-5 19:20 | 只看该作者
对,就是这个偏移地址的问题

使用特权

评论回复
5
guijial511| | 2021-7-5 21:01 | 只看该作者
地址操作不对

使用特权

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

本版积分规则

4

主题

5

帖子

0

粉丝