⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 w79exxxnvm.c

📁 W79E2051/W79E825 NVM(仿EEPROM) 库函数
💻 C
字号:
/*---------------------------------------------------*/
/*                                                   */
/*   W79E4051/W79E825 NVM通用读写子程序              */
/*                                                   */
/*   CPU  : W79E4051                                 */
/*   晶振 : 12MHz                                    */
/*   作者 : 许意义                                   */  
/*   版本 : V1.0                                     */
/*   日期 : 2009.1.6                                 */
/*                                                   */
/*---------------------------------------------------*/
#include "MPU51TYPE.h"
#include "W79ExxxNVM.h"

int NVM_RD_INT(unsigned char ADDR)   // 字读出
{ unsigned int IA;
  byte0(IA) = NVM_RD_CHAR(ADDR++);
  byte1(IA) = NVM_RD_CHAR(ADDR);
  return(IA);
}

long NVM_RD_LONG(unsigned char ADDR)   // 长字读出
{ unsigned long LA;
  byte0(LA) = NVM_RD_CHAR(ADDR++);
  byte1(LA) = NVM_RD_CHAR(ADDR++);
  byte2(LA) = NVM_RD_CHAR(ADDR++);
  byte3(LA) = NVM_RD_CHAR(ADDR);
  return(LA);
}

void NVM_RD_PAGE(unsigned char PAGE,unsigned char *p) // 页读出
{ 
  unsigned char a, i;
  a = PAGE << NVM_RL;
  for (i=0; i<NVM_PLEN; i++)
    { *p++ = NVM_RD_CHAR(a++);
    }
}

void NVM_CLR(unsigned char PAGE)  // 页擦除
{ 
  NVMADDR = PAGE << NVM_RL;
  NVMCON  = _BV(EER);
}

void NVM_WR_CHAR(unsigned char ADDR,unsigned char CA) // 字节写入
{ 
  NVMADDR = ADDR;
  NVMDATA = CA;
  NVMCON  = _BV(EWR);
}

void NVM_WR_INT(unsigned char ADDR,unsigned int IA)  // 字写入
{ 
  NVM_WR_CHAR(ADDR++,byte0(IA));
  NVM_WR_CHAR(ADDR,  byte1(IA));
}

void NVM_WR_LONG(unsigned char ADDR,unsigned long LA) // 长字写入
{ 
  NVM_WR_CHAR(ADDR++,byte0(LA));
  NVM_WR_CHAR(ADDR++,byte1(LA));
  NVM_WR_CHAR(ADDR++,byte2(LA));
  NVM_WR_CHAR(ADDR,  byte3(LA));
}

void NVM_WR_PAGE(unsigned char PAGE,unsigned char *p) // 页写入
{ 
  unsigned char a, i;
  unsigned char *p1;
  a = PAGE << NVM_RL;
  p1 = p;
  for (i=0; i<NVM_PLEN; i++)
    { if ( *p1++ != NVM_RD_CHAR(a++))      // 比较页内容,值相等直接返回。
        { NVM_CLR(PAGE);                   // 值不等先页擦除。
          a = PAGE << NVM_RL;
          for (i=0; i<NVM_PLEN; i++)
            { NVM_WR_CHAR(a++,*p++);       // 再写入。
            }
          goto NVM_WR_PAGE_END;
        }
    }
NVM_WR_PAGE_END: ;                         // 页写入成功,返回
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -