|
给你一段我自己的擦写程序吧,你试一下
/*********************************************************
功能:段擦除
输入参数:x
输出参数:无
返回值:无
调用关系:被主函数main调用
使用的资源:无
*********************************************************/
void eraser (unsigned int *x)
{
while (!(BUSY && FCTL3)) // 忙?
{
break;
}
FCTL1 = FWKEY + ERASE; // 设置寄存器
FCTL3 = FWKEY;
*x = 0; // 空写擦除
while (!(BUSY && FCTL3)) // 忙?
{
break;
}
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK; // 设置寄存器
}
在主程序中仿照这的形式调用
eraser((unsigned int *) 0xF800);
写的程序针对性强一点,你也参考一下吧
/*********************************************************
功能:flash字节/字写入
输入参数:z
输出参数:无
返回值:无
调用关系:被主函数main调用
使用的资源:无
*********************************************************/
void write (unsigned int x, int y, int z,int rw)
{
while (!(BUSY && FCTL3)) // 忙?
{
break;
}
FCTL1 = FWKEY + WRT; // 设置寄存器
FCTL3 = FWKEY;
if (rw) // 数据段写入?
{ // 数据段写入
mse[x].year = yr;
mse[x].month = mr;
mse[x].day = dr;
mse[x].value = meter;
}
if (y) // 最后写入结构写入?
{ // 最后写入结构写入
last.year = yr;
last.month = mr;
last.day = dr;
last.value = meter;
}
if (z)
{
refer = pointer;
}
while (!(BUSY && FCTL3)) // 忙?
{
break;
}
FCTL1 = FWKEY; // 设置寄存器
FCTL3 = FWKEY + LOCK;
}
住程序中:
write (pointer, 1, 1, 1); // 写数据,没到一年 |
|