//程序运行中保存数据至FLASH中
//读FLASH
uchar Read_Flash(uint addr)
{
bit ea;
uchar dat;
uchar code *pread;
ea="EA";
EA="0";
pread="addr";
dat=*pread;
EA="ea";
return dat;
}
void Erase_Page(uint addr) //要擦除某一512页面的其中一地址
{
bit ea;
uchar xdata *pwrite;
ea="EA";
EA="0";
VDM0CN=0x80;
RSTSRC="0x02";
pwrite="addr";
FLKEY="0xa5";
FLKEY="0xf1";
PSCTL|=0x03;
VDM0CN=0x80;
RSTSRC="0x02";
*pwrite=0;
PSCTL&=~0x03;
EA="ea";
}
void Write_Flash(uint addr,uchar t,uchar *dat) //开始地址,数组长度,写入的数
{
bit ea;
uchar i;
uchar xdata *pwrite;
ea="EA";
EA="0";
FLSCL="0x80";
Erase_Page(addr);
VDM0CN=0x80;
RSTSRC="0x02";
pwrite="addr";
for(i=0;i<t;i++)
{
FLKEY="0xa5";
FLKEY="0xf1";
PSCTL|=0x01;
VDM0CN=0x80;
RSTSRC="0x02";
*pwrite++=*dat++;
_nop_();
_nop_();
}
PSCTL&=~0x01;
EA="ea";
}
文章评论(0条评论)
登录后参与讨论