📄 flash.c
字号:
/******************************************************/
/* 文件名: Flash.c */
/* 功能描述: 编程扩展AT29C010, 了解Flash特性 */
/******************************************************/
#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;
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 int i;
unsigned char *Des;
Des = START_ADDR;
for(i=0; i<128; i++)
{
*Des = 0x55; //全部写0x55
Des++;
}
}
void p_write() // 带保护写
{
unsigned int i;
unsigned char *Des;
Des = START_ADDR;
*ADDR_UNLOCK1 = 0xAA;
*ADDR_UNLOCK2 = 0x55;
*ADDR_UNLOCK1 = 0xA0;
for(i=0; i<128; i++) //写0~128到Flash
{
*Des = i;
Des++;
}
}
void main()
{
AUXR = 0x2;
p_write(); // 带保护写
delay();
unp_write(); // 不带保护写
delay();
unprotect(); // 去除保护
unp_write();
delay();
erase(); // 擦除
while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -