您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 金融资料 > 430单片机的flash断电数据保护程序(已经过试验)
//****************************************************************************//////本程序实现断电数据保护功能,断电可以保存128个数据(仅适用A区),也可以保存256个数据(使用A区和B区)////*****************************************************************************#includemsp430x14x.h#defineucharunsignedchar#defineuintunsignedintunsignedintvalue0;unsignedintvalue1;unsignedint*Flash_ptr;voidwrite_SegA(unsignedintvalue0,unsignedintvalue1);voidcopy_A2B(void);unsignedinti;voiddelay(){for(i=0;i50000;i++);}voidmain(void){WDTCTL=WDTPW+WDTHOLD;//关闭看门狗Ini_Lcd();/**************flash的程序***************************************/FCTL2=FWKEY+FSSEL0+FN0;//时钟分频,使flash的时钟频率在257K-476Kvalue0=0;value1=0;Flash_ptr=(unsignedint*)0x1080;//设置A区的起始地址for(i=0;i128;i++){value0=*Flash_ptr;//从flash当中读出数据value0,value1value1=*(Flash_ptr+1);}/***************************************************************/while(1){value0++;value1++;write_SegA(value0,value1);//向flash当中写入数据//写入主程序,value作为一个变量使用}}//******************向flash中写入数据************************************voidwrite_SegA(unsignedintvalue0,unsignedintvalue1){unsignedinti;Flash_ptr=(unsignedint*)0x1080;//设置指针的起始地址,A区的起始地址是0x1080FCTL1=FWKEY+ERASE;//擦除独立段FCTL3=FWKEY;//允许写入*Flash_ptr=1;//设置为单字节写入模式FCTL1=FWKEY+WRT;//SetWRTbitforwriteoperationfor(i=0;i128;i++)//连续写入128个数据{*Flash_ptr=value0;//写数据value0和value1到flash当中*(Flash_ptr+1)=value1;}FCTL1=FWKEY;//保护flashFCTL3=FWKEY+LOCK;}//**************************从A区读取的数据赋值给B区((∩_∩)注意可以向一个区中先写入数据,再读取数据)*****************************************voidcopy_A2B(void){char*Flash_ptrA;char*Flash_ptrB;unsignedinti;Flash_ptrA=(char*)0x1080;Flash_ptrB=(char*)0x1000;FCTL1=FWKEY+ERASE;FCTL3=FWKEY;*Flash_ptrB=0;FCTL1=FWKEY+WRT;for(i=0;i128;i++){*Flash_ptrB++=*Flash_ptrA++;}FCTL1=FWKEY;FCTL3=FWKEY+LOCK;}
本文标题:430单片机的flash断电数据保护程序(已经过试验)
链接地址:https://www.777doc.com/doc-2924120 .html