?? 新建 文本文檔 (5).txt
字號:
#include <msp430x41x.h>
#define FLASH_ADDRESS 0x01000 //定義FLASH信息區地址B段
unsigned char write_buff[4]={0x01,0x03,0x04,0x09}; //用于存放被數組
unsigned char checkout[4]; //讀出緩沖區,用于驗證的
unsigned char num="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;
if(amount<=127)
{
for(i=0;i<amount;i++,pc_byte ++)
{
*array = *pc_byte; //讀數據,讀數據時,flash地址自動加 1
array++; //接收緩沖區地址加 1
}
}
}
//******************************************************************************
//向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;
if(amount<=127)
{
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; //定義段地址指針變量
unsigned char i;
WDTCTL = WDTPW + WDTHOLD;
FCTL2 = FWKEY + FSSEL_1 + FN1; //工作頻率設為 MCLK/3,333.3KHZ
_DINT();
pc_flash = (unsigned char *) FLASH_ADDRESS; //為指針初始化
pc_flash_segment = (unsigned int *) FLASH_ADDRESS;
//---------------------------------------------------
while(1)
{
flash_erase( pc_flash_segment); //段擦除
write_array(pc_flash, write_buff,4); //寫入指定字節數量
read_array(pc_flash,&checkout[0],4); //再讀出剛才寫的字節
}
}
以上程序在別人的程序基礎上修改的,程序可以運行,通過watch窗口可以觀察check數組.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -