📄 flashrw.c
字号:
//本文件用于将工程信息存储在020的FLASH 非易失存储器中附加的128 字节的扇区内
/*操作步骤:
1. 禁止中断。
2. 置位FLWE(FLSCL.0),以允许由用户软件写/擦除FLASH。
3. 置位PSEE(PSCTL.1),以允许FLASH 扇区擦除。
4. 置位PSWE(PSCTL.0),以允许FLASH 写。
5. 用MOVX 指令向待擦除扇区内的任何一个地址写入一个数据字节。
6. 清除PSEE 以禁止FLASH 扇区擦除。
7. 用MOVX 指令向刚擦除的扇区中所希望的地址写入数据字节。重复该步直到所有字节都已写入(目标扇区内)。
8. 清除PSWE 以禁止FLASH 写,使MOVX 操作指向XRAM 数据空间。
9. 重新允许中断。
*/
//FlashWrite()向从0x00开始的24个字节写入数据
void FlashWrite(uint DestAddr)
{
uchar data i = 0;
uchar xdata *data pwrite;
EA = 0; //禁止中断
pwrite = (uchar xdata*)DestAddr;
FLSCL |= 0x01; // enable FLASH writes/erases
PSCTL |= 0x07; //SFLE = 1,访问128B; PSWE = 1; PSEE = 1
*pwrite = 0; //向扇区内任意位置写入任意数以擦除扇区
PSCTL &= ~0x02; //PSEE = 0,禁止擦除
for(i=0;i<24;i++)
{
*(pwrite++) = Info[i];
}
PSCTL &= ~0x05; //SFLE =0,不再访问128B; PSWE = 1;禁止写FLASH
FLSCL &= ~0x01; // Disable FLASH writes/erases
EA = 1; //重新允许中断
}
//FlashRead()从0x00处开始读取24个字节,存入Info[]
void FlashRead(uint SrcAddr)
{
uchar data i = 0;
uchar code *data pread;
EA = 0; //禁止中断
PSCTL |= 0x04; //SFLE = 1,访问128B
pread = (uchar code*)SrcAddr;
for(i=0;i<24;i++)
{
Info[i] = *(pread++);
}
PSCTL &= ~0x04; //SFLE = 0,不再访问128B
EA = 1; //重新允许中断
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -