📄 flash.c
字号:
// flash.c
// 擦除、写和读 FLASH存储器
// 目标器件 C8051F340
// 开发工具 KEIL C51
/*****************************************************************************/
// 作者:牛余朋
// 现于北京一科研单位工作
// 可以私人承接电子产品开发
// 联系电话:15811095191
// QQ:41877690:火牛
/*****************************************************************************/
#include "C8051F340.h"
#include <stdio.h>
#include "flash.h"
//-----------------------------------------------------------------------------
// MAIN Routine
//-----------------------------------------------------------------------------
unsigned char xdata data_array[DATA_SIZE];
WriteFlash(unsigned int address, unsigned char write_data)
{
unsigned char xdata *pwrite; // 程序存储器空间的指针 FLASH 指向待写地址
unsigned char i;
//------------------第一步
// 首先读出参数整个扇区的数据
for(i=0;i<DATA_SIZE;i++)
data_array[i]=ReadFlash(i);
//------------------第二步
// 下面开始擦除整个参数扇区的数据
EA=0; // 关全局中断
FLKEY = 0xA5;
FLKEY = 0xF1;
FLSCL = 0x80; // 设置 FLASH标度寄存器 对 2MHz 系统时钟
PSCTL = 0x03; // 将 PSWE 和 PSEE 置 1 MOVX 指令对应的 FLASH页
pwrite = DATA_SECTOR_ADDRESS; // 将指针指向待擦除页
*pwrite = 0; // 启动擦除过程
PSCTL = 0; // 清除 PSEE, PSWE
//------------------第三步
//以上擦除完毕,开始根据指定的偏移地址改写缓冲区data_array[DATA_SIZE]
data_array[address] = write_data;
//------------------第四步
// 以上改写缓冲区data_array[512]完毕,现在开始将缓冲区data_array[DATA_SIZE]中的所有数据重新写入flash
PFE0CN = 0; // Clear the FLBWE bit (register PFE0CN) to select single-byte write mode.
PSCTL = 0x01; // Set the PSWE bit (register PSCTL)
// Clear the PSEE bit (register PSCTL)
for(i=0;i<DATA_SIZE;i++)
{
FLKEY = 0xA5; // Write the first key code to FLKEY: 0xA5.
FLKEY = 0xF1; // Write the second key code to FLKEY: 0xF1
*pwrite = data_array[i]; // 写入字节
pwrite++;
}
PSCTL = 0; // Clear the PSWE bit.禁止 FLASH写
EA=1; // 开全局中断
}
unsigned char ReadFlash(unsigned int address)
{
unsigned char code *pread; // 程序存储器空间的指针 FLASH 指向待读地址
unsigned int test;
EA=0; // 关全局中断
pread =DATA_SECTOR_ADDRESS+address;
test = *pread;
EA=1; // 开全局中断
return test;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -