当前位置:首页 > 单片机 > 单片机
[导读] FLASH型的MSP430单片机都带有信息存储器SegmengA及SegmentB,SegmengA及SegmentB各有128字,SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。程序被写入MSP430之后,程序通

FLASH型的MSP430单片机都带有信息存储器SegmengA及SegmentB,SegmengA及SegmentB各有128字,SegmentB的地址是:0x01000h到0x107F,SegmentA的地址是:0x01080h到0x010FFh。程序被写入MSP430之后,程序通过SegmengA及SegmentB就可以保存不掉电数据。注意:每次程序烧写到MSP430时,SegmengA及SegmentB都会被擦除!

接下来贴出本文的程序代码,以及程序写入信息存储器之后的FLASH数据:

  1. #include

  2. voidWriteSegment_256(charindex,char*value,charsize);

  3. charReadSegment_256(charindex);

  4. voidmain(void)

  5. {

  6. WDTCTL=WDTPW+WDTHOLD;//Stopwatchdogtimer

  7. FCTL2=FWKEY+FSSEL0+FN0;//MCLK/2forFlashTimingGenerator

  8. charstr1[3]={0xAA,0xBB,0xCC};

  9. WriteSegment_256(0,str1,3);

  10. for(chari=0;i<255;i++)

  11. _NOP();

  12. charstr2[3]={0xBB,0xAA,0xCC};

  13. WriteSegment_256(0,str2,3);

  14. }

  15. #defineSegmentStart0x01000//Segment=0x01000~0x010FF

  16. #defineSegmentSize255//SegmentA+SegmentB=256

  17. //*********************************************************

  18. //读取片内存储的数据

  19. //*********************************************************

  20. charReadSegment_256(charindex)

  21. {

  22. char*flash_ptr=((char*)SegmentStart)+index;

  23. return*flash_ptr;

  24. }

  25. //*****************************************************

  26. //把数组写入数据到片内FLASH,必须先全部擦除再写入

  27. //参数index:保存数组的位置

  28. //参数value:数组的指针

  29. //参数size:数组的大小

  30. //*****************************************************

  31. voidWriteSegment_256(charindex,char*value,charsize)

  32. {

  33. charbuffer[SegmentSize],i=0;

  34. char*flash_ptr=(char*)SegmentStart;

  35. //先读取原FLASH数组

  36. for(i=0;i

  37. buffer[i]=ReadSegment_256(i);

  38. //擦除FLASH,必须

  39. FCTL1=FWKEY+ERASE;//SetErasebit

  40. FCTL3=FWKEY;//ClearLockbit

  41. *flash_ptr=0;//DummywritetoeraseFlashsegment

  42. //把整个数组都写入FLASH

  43. FCTL1=FWKEY+WRT;//SetWRTbitforwriteoperation

  44. for(i=0;i

  45. buffer[index+i]=value[i];

  46. for(i=0;i

  47. *(flash_ptr++)=buffer[i];

  48. FCTL1=FWKEY;//ClearWRTbit

  49. FCTL3=FWKEY+LOCK;//SetLOCKbit

  50. }


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭