问答

汇集网友智慧,解决技术难题

21ic问答首页 - PIC47Q10读写EEPROM,我是用的MCC生成的代码,会有错误吗?

EEPROM 读写 pic 代码 AD ui

PIC47Q10读写EEPROM,我是用的MCC生成的代码,会有错误吗?

橘子阿小2021-08-05
MCC生成的代码如下:void WR_EEPROM(uint16_t bAdd, uint8_t bData)
{
   uint8_t GIEBitValue = INTCONbits.GIE;
    NVMADRU = 0x31;
    NVMADRH = (uint8_t)((bAdd & 0xFF00) >> 8);
    NVMADRL = (uint8_t)(bAdd & 0x00FF);
    NVMDATL = (uint8_t)(bData & 0xFF);
    NVMCON0bits.NVMEN = 1;
    INTCONbits.GIE = 0;
    NVMCON2 = 0x55;
    NVMCON2 = 0xAA;
    NVMCON1bits.WR = 1;
    while (NVMCON1bits.WR)
    {
    }
    NVMCON0bits.NVMEN = 0;
    INTCONbits.GIE =GIEBitValue;

}

uint8_t RD_EEPROM(uint16_t bAdd)
{
    NVMADRU = 0x31;
    NVMADRH = (uint8_t)((bAdd & 0xFF00) >> 8);
    NVMADRL = (uint8_t)(bAdd & 0x00FF);
    NVMCON1bits.RD = 1;
    NOP();  
    NOP();
    return (NVMDATL);
}

回答 +关注 7
3050人浏览 4人回答问题 分享 举报
4 个回答
  • panxiaoyi 发表于 2021-8-5 21:15
    我这里有一份自己写的PIC18F27Q10的EEPROM读写驱动,不知道是否合你意,PIC18F27Q10和PIC18F47Q10只是封装 ...

    我还是出现那个问题,请问您知道为什么我的时钟参数修改完,确保存不了吗?
  • panxiaoyi 发表于 2021-8-5 21:15
    我这里有一份自己写的PIC18F27Q10的EEPROM读写驱动,不知道是否合你意,PIC18F27Q10和PIC18F47Q10只是封装 ...

    谢谢,我试一下
  • 我这里有一份自己写的PIC18F27Q10的EEPROM读写驱动,不知道是否合你意,PIC18F27Q10和PIC18F47Q10只是封装不同而已

    #include "EEPROM.h"

    unsigned char EEPROM_Read(unsigned short addr)
    {
        unsigned char eep_data;

        NVMADRL=addr;                                                               //加载地址低位
        NVMADRH=(addr>>8);                                                          //加载地址高位
        NVMADRU=0x31;                                                               //加载地址最高位
       
        NVMCON0=0x80;                                                               //NVM使能
        NVMCON1 |=1;                                                                //读使能
        while(NVMCON1&1);                                                           //等待读结束
        eep_data=NVMDATL;                                                           //读取数据
        NVMCON0=0;                                                                  //NVM关闭
       
        return eep_data;
    }

    void EEPROM_Write(unsigned short addr , unsigned char dat)
    {
        unsigned char eep_data;

        NVMADRL=addr;                                                               //加载地址低位
        NVMADRH=(addr>>8);                                                          //加载地址高位
        NVMADRU=0x31;                                                               //加载地址最高位
        NVMDATL=dat;                                                                //加载数据
       
        NVMCON0=0x80;                                                               //NVM使能
        NVMCON2=0x55;                                                               //解锁步骤1
        NVMCON2=0xAA;                                                               //解锁步骤2
        NVMCON1|=(1<<4);                                                            //写使能
        while(NVMCON1&(1<<4));                                                      //等待写结束
        while(!(PIR7&(1<<5)));                                                      //等待写结束中断标记置位
        PIR7&=(~(1<<5));                                                            //清除标记位
        NVMCON0=0;                                                                  //NVM关闭
    }


  • 有的参数修改数据就保存不了,这是什么问题呢?

您需要登录后才可以回复 登录 | 注册