3_6_5.c

来自「包含了众多MP430实例:扫描按键(C),ADC,IIC器件,键盘与显示,键盘与」· C语言 代码 · 共 55 行

C
55
字号
#include  <msp430x11x1.h>
char  value;                         // 8-bit value to write to segment A
void  write_SegA (char value);       //函数声明
void  copy_A2B (void);               //函数声明

void main(void)
{ 
  WDTCTL = WDTPW + WDTHOLD;          // 停止看门狗
  FCTL2 = FWKEY + FSSEL0 + FN0;      // 定义FLASH时序发生器输入时钟
  value = 0;                         // 将要写入的数为"0"
  while(1)                        
  {
    write_SegA(value++);             // 写段A
    copy_A2B();                      // 拷贝段A 到段 B
  }
}

void write_SegA (char value)
{
  char *Flash_ptr;                
  unsigned int i;
  Flash_ptr = (char *) 0x1080;       // 初始化指针
  FCTL1 = FWKEY + ERASE;             // 使能擦除操作
  FCTL3 = FWKEY;                     // FLASH解锁
  *Flash_ptr = 0;                    // 空写,启动擦除
  FCTL1 = FWKEY + WRT;               // 允许写操作
  for (i=0; i<128; i++)
  {
    *Flash_ptr++ = value;            // 循环写FLASH  128字节(一个信息段的长度)
  }
  
  FCTL1 = FWKEY;                  
  FCTL3 = FWKEY + LOCK;              //写完了,锁定
}

void copy_A2B (void)
{
  char *Flash_ptrA;            
  char *Flash_ptrB;            
  unsigned int i;
  Flash_ptrA = (char *) 0x1080;   
  Flash_ptrB = (char *) 0x1000;    
  FCTL1 = FWKEY + ERASE;             // 擦除允许
  FCTL3 = FWKEY;                     // 解锁
  *Flash_ptrB = 0;                   // 空写以启动擦除段B
  FCTL1 = FWKEY + WRT;               // 允许写
  for (i=0; i<128; i++)
  {
    *Flash_ptrB++ = *Flash_ptrA++;   // 读出段A的数据写到段B
  }
  FCTL1 = FWKEY;                
  FCTL3 = FWKEY + LOCK;              // 写完锁定
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?