?? 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 + -