#include <msp430x14x.h>
#define uint unsigned int
#define uchar unsigned char
/***********************************************************************************************
精准的延时程序
***********************************************************************************************/
#define CPU_F ((double)8000000.0)
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0))
#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000.0))
uchar value;
void write_SegA(char value);
void copy_A2B(void);
/*********************************************************************
FCTL1:用于控制所有写(编程)或者删除操作的有效位
FCTL2:主要对进入时序发生器的时钟进行定义
FCTL3:用于控制FLASH存储器操作,保存相应的状态标志和错误标志
*********************************************************************/
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
FCTL2 = FWKEY + FSSEL_1 + FN_1;//定义原始时钟,W是A5 R 96 选择MCLK,2分频
value =0;
while(1)
{
write_SegA(value++);//写信息段A
copy_A2B(); //信息段A复制到信息段B
}
}
/*******************写信息段A******************/
void write_SegA(char value)
{
char *Flash_ptr; //定义flash指针
uint i;
Flash_ptr = (char *)0x1080; //定义起始的地址
FCTL1=FWKEY+ERASE; //设置允许编程位
FCTL3=FWKEY; //清除LOCK位
*Flash_ptr = 0; //空写,启动擦除
FCTL1=FWKEY+WRT; //允许写
for(i=0;i<128;i++) //写够128个字节
{
*Flash_ptr++=value;
}
FCTL1=FWKEY;
FCTL3=FWKEY+LOCK; //锁定
}
void copy_A2B(void)
{
char *Flash_ptrA;
char *Flash_ptrB;
uint i;
Flash_ptrA=(char *)0x1080;
Flash_ptrB=(char *)0x1000;
FCTL1=FWKEY+ERASE; //设置允许编程位
FCTL3=FWKEY; //清除LOCK位
*Flash_ptrB=0;
FCTL1=FWKEY+WRT; //允许写
for (i=0;i<128;i++)
{
*Flash_ptrB++=*Flash_ptrA;
}
FCTL1= FWKEY;
FCTL3=FWKEY+LOCK; //锁定
}
该博客详细介绍了如何在MSP430微控制器上进行Flash操作,包括精准延时程序、写入信息段A以及将A段内容复制到段B的过程。通过设置FCTL寄存器进行擦除和写入操作,并在完成操作后锁定存储器。

3584

被折叠的 条评论
为什么被折叠?



