📄 main.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 + -