📄 w79exxxnvm.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 + -