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

[cpp]
view plain
copy
print
?
- #include??<msp430xG43x.h>??
- ??
- void?WriteSegment_256?(char?index,char?*value,char?size);??
- char?ReadSegment_256(char?index);??
- ??
- void?main(void)??
- {??
- ??WDTCTL?=?WDTPW?+?WDTHOLD;???????????????????
- ??FCTL2?=?FWKEY?+?FSSEL0?+?FN0;???????????????
- ???
- ??char?str1[3]={0xAA,0xBB,0xCC};??
- ????
- ??WriteSegment_256(0,str1,3);??
- ????
- ??for(char?i=0;i<255;i++)??
- ????_NOP();???????????????????????????????????
- ????
- ??char?str2[3]={0xBB,0xAA,0xCC};??
- ??WriteSegment_256(0,str2,3);??
- ????
- }??
- ??
- #define?SegmentStart?0x01000??//Segment?=?0x01000~0x010FF??
- #define?SegmentSize?255?//SegmentA?+?SegmentB?=?256??
- ??
- ??
- ??
- ??
- char?ReadSegment_256(char?index)??
- {??
- ??char?*flash_ptr?=?((char?*)?SegmentStart)?+?index;??
- ??return?*flash_ptr;??
- }??
- ??
- ??
- ??
- ??
- ??
- ??
- ??
- void?WriteSegment_256?(char?index,char?size)??
- {??
- ??char?buffer[SegmentSize],i=0;??
- ??char?*flash_ptr?=?(char?*)?SegmentStart;??
- ????
- ????
- ??for(i=0;i<SegmentSize;i++)??
- ????buffer[i]=ReadSegment_256(i);??
- ????
- ????
- ??FCTL1?=?FWKEY?+?ERASE;??????????????????????
- ??FCTL3?=?FWKEY;??????????????????????????????
- ??*flash_ptr?=?0;?????????????????????????????
- ????
- ????
- ??FCTL1?=?FWKEY?+?WRT;????????????????????????
- ????
- ??for(i=0;i<size;i++)??
- ????buffer[index+i]=value[i];??
- ??for(i=0;?i<SegmentSize;?i++)??
- ????*(flash_ptr++)?=?buffer[i];?????????????????????
- ????
- ??FCTL1?=?FWKEY;??????????????????????????????
- ??FCTL3?=?FWKEY?+?LOCK;???????????????????????
- }??