📄 flash.c
字号:
/******************************************************/
/* 文件名: Flash.c */
/* 功能描述: */
/******************************************************/
#define START_ADDR ((unsigned char volatile xdata *) 0x0000)
#define ADDR_UNLOCK1 ((unsigned char volatile xdata *) 0x5555)
#define ADDR_UNLOCK2 ((unsigned char volatile xdata *) 0x2AAA)
sfr AUXR = 0x8E;
unsigned char DataBuf[64];
void init_data()
{
unsigned char i;
for(i=0; i<64; i++)
DataBuf[i] = i;
}
void delay()
{
unsigned int i;
for(i=0; i<1000; i++);
}
void unprotect() // 取消软件数据保护
{
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0x80;
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0x20;
}
void erase() // 芯片擦除
{
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0x80;
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0x10;
}
void unp_write(unsigned char *Buf, unsigned int len) // 无保护写
{
unsigned int i;
unsigned char *Des, *Src;
Des = Buf;
Src = DataBuf;
for(i=0; i<len; i++)
{
*Des = *Src;
Des++;
Src++;
}
}
void p_write(unsigned char *Buf, unsigned int len) // 带保护写
{
unsigned int i;
unsigned char *Des, *Src;
Des = Buf;
Src = DataBuf + 63;
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0xA0;
for(i=0; i<len; i++)
{
*Des = *Src;
Des++;
Src--;
}
}
void main()
{
AUXR = 0x2;
init_data();
p_write(START_ADDR, 64); // 带保护写
delay();
unp_write(START_ADDR, 64); // 不带保护写
delay();
unprotect(); // 去除保护
unp_write(START_ADDR, 64);
delay();
erase(); // 擦除
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -