MSP430F149flash程序问题

2019-03-24 15:46发布

我的目的是想练习使用一下flash的掉电不丢失功能,通过八位led灯指示数据t,按下按键s1时t的值会变化,然后将变化后的值存入flash中,下次上电后通过按下按键s2时读出上次存的值让led灯显示出来,程序如下有些问题,可能是我c语言指针部分学的不太好。请大家帮我看一下谢谢 #include "msp430x14x.h"
#define P 0x1080
//flash初始化
void flashinit(void)
{
  FCTL2=FWKEY+FSSEL_1+FN3+FN4;//安全键值+时钟源+25分频
}
//写一个字节
void FLASH_Writeb(unsigned int *Address,unsigned char nValue)
{
    FCTL1=FWKEY+WRT;//安全键值+WRT为编程位设为1为编程
    FCTL1=FWKEY;   
    while((FCTL3&BUSY)==BUSY);//等待FLASH存储器完成操作
    *Address=nValue;
    FCTL1=FWKEY;          //WRT=1
    FCTL3=FWKEY+LOCK;     //LOCK=1
    while((FCTL3&BUSY)==BUSY);//等待FLASH存储器完成操作
}
//将FLASH里面的内容擦除掉
void FLASH_Erase(unsigned int *Address)
{
    FCTL3=FWKEY;    //LOCK=0
    while(FCTL3&BUSY==BUSY);//等待FLASH存储器完成操作
    FCTL1=FWKEY+ERASE;      //ERASE=1
    *Address=0;             //向段内地址任意写,启动擦出操作
    FCTL1=FWKEY;
    FCTL3=FWKEY+LOCK;
    while((FCTL3&BUSY)==BUSY);  //等待FLASH存储器完成操作   
}
//读一个字节
unsigned char FLASH_Readb(unsigned int *Address)
{
    unsigned char Rdata;
    Rdata=*Address;
    return Rdata;
}
void delay(void)
{
    unsigned int tmp;
   
    for(tmp = 18000;tmp > 0;tmp--);
}
void main( void )
{
 unsigned int t;
 
unsigned char Rdata;  unsigned int *P;
 WDTCTL = WDTPW + WDTHOLD;
 t=0x00;
 P2DIR=0XFF;
 P5DIR=0XFF;
 P1DIR=0XF0;
 
 flashinit();
 while(1)
 {
   P2OUT=t;
   if((P1IN&0x0f)==0x0e)
   { 
     delay();
     if((P1IN&0x0f)==0x0e)
     {
       while(P1IN&0X0F==0X0E);
       t++;
       FLASH_Erase(*Address);
       FLASH_Writeb(*Address,t);
     }
   }
   if((P1IN&0x0f)==0x0d)
   { 
     delay();
     if((P1IN&0x0f)==0x0d)
     {
       while(P1IN&0X0F==0X0d);
       FLASH_Readb(*Address);
       t=Rdata;
     }
   }
      
 }
} 我的问题可能也比较明朗,就是在主函数里我不会调用上面的子函数,编译后也是那三行红 {MOD}的代码有问题,请大家告诉我正确的调用语句是怎样的,另外flash里面写数据的地址不是任意的吗,所以我在一开始宏定义了指针p的地址不知道对不对?谢谢 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
wpj1018
2019-03-25 06:55
 精彩回答 2  元偷偷看……0人看过

一周热门 更多>

相关问题

    相关文章