⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c

📁 MSP430 读写FLASH 很好用 有LED检测程序
💻 C
字号:
#include <MSP430x14x.h>
#define FLASH_ADDRESS 0x01000                       //定义FLASH信息区地址B段
unsigned char  write_buff[4]={0x01,0x03,0x04,0x09}; //用于存放被数组
unsigned char checkout[4];                          //读出缓冲区,用于验证的

//unsigned char num="0";
const unsigned char dispcode[10]=
                       {0xc0, 0xf9, 0xa4, 0xb0, 0x99,    // 0 ~ 4
                        0x92, 0x82, 0xf8, 0x80,0x90 };  // 5 ~ 9
unsigned char dispbitcode[8]={0xf9,0xf5,0xed,0xdd,0xbd,0x7d,0xfd,0xfd};	   //位选
unsigned char dispbuf[8]={0,0,16,0,0,16,0,0};

void flash_erase(unsigned int*);
void read_array(unsigned char  *pc_byte, unsigned char *array,unsigned char amount);
void write_array(unsigned char *pc_byte,unsigned char *array,unsigned char amount);

//FLASH段擦除
void flash_erase(unsigned int *pc_word)
{
 while(FCTL3 & BUSY);                       //如果处于忙状态,则等待
 FCTL3 = FWKEY ;                          //清出LOCK标志,解锁
 FCTL1 = FWKEY + ERASE ;                 //允许段擦除
 *pc_word = 0;                         //擦除..擦除..
 while(FCTL3 & BUSY);  
 FCTL3 = FWKEY + LOCK ;             //加锁
}

//向FLASH信息区读出指定数量的字节数据
//unsigned int*pc_word :信息区数据指针
//unsigned char *array :读出数据存放数据数组,8位长
//unsigned char amount :读操的数量,范围0-127
void read_array(unsigned char *pc_byte, unsigned char *array,unsigned char amount)
{
  unsigned char i;

   for(i=0;i<amount;i++)
      {
        *array = *pc_byte; //读数据,读数据时,flash地址自动加 1 
        array++;          //接收缓冲区地址加 1   
        pc_byte++;
      }
}

//向FLASH信息区写入指定数量的字节数据
//unsigned char *pc_byte 信息区数据指针
//unsigned char *array :读出数据存放数据数组,8位长
//unsigned char amount :读操的数量,范围0-127
void write_array(unsigned char *pc_byte,unsigned char *array, unsigned char amount)
{ 
  unsigned char i;

 while(FCTL3 & BUSY);                    //如果处于忙状态,则等待
 FCTL3 = FWKEY ;                       //清出LOCK标志
 FCTL1 = FWKEY  + WRT ;              //写操作,块编程,+ BLKWRT;

    for(i=0;i<amount;i++)
    {   
      *pc_byte = *array;
      //*pc_byte = num;
     // num +=1;
      array++;                       //发送缓冲区地址加 1  
      pc_byte++;                   //写flash时,地址人为加 1
     while(!(FCTL3 & WAIT));   //如果处于忙状态,则等待 ,若用软件仿真,去掉                 //这语句
    }

 FCTL1 = FWKEY;           //写操作完成,清除编程允许位 WRT,BLKWRT
 while(FCTL3 & BUSY); 
 FCTL3 = FWKEY + LOCK;
}


//******************************************************************************
void main(void)
{
  unsigned char *pc_flash;                            //定义字节指针变量
  unsigned int *pc_flash_segment;                     //定义段地址指针变量

      P4DIR    = 0xff;            // 数码管数据线
    P4OUT  = 0xc0;    // 设置 初始值为0
    P6DIR    = 0xfc;            // 数码管位选
    P6OUT  = 0x00; 
    
  WDTCTL = WDTPW + WDTHOLD;
  FCTL2 = FWKEY + FSSEL_0 + FN0;              //工作频率设为  MCLK/3,333.3KHZ
  //_DINT();  
  
  pc_flash = (unsigned char *) FLASH_ADDRESS;         //为指针初始化
  pc_flash_segment = (unsigned int *) FLASH_ADDRESS;  
//---------------------------------------------------
     
     flash_erase( pc_flash_segment);                     //段擦除
  
     write_array(pc_flash, write_buff,4);               //写入指定字节数量
       
     read_array(pc_flash,&checkout[0],4);                    //再读出刚才写的字节
    _NOP();
while(1)
  {  
    P4OUT = dispcode[checkout[1]];	  //显示数值送入P0
    P6OUT = 0;
  }
  /*for (;;)                              
  {
     //P1OUT ^= 0x01;
    _BIS_SR(LPM3_bits);                 // Enter LPM3
    _NOP();                             // Required only for C-spy
  }*/
}

⌨️ 快捷键说明

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