/*-------------DoEraseFlash:擦除指定flash区------------*/ void DoEarseFlash(void) { unsigned int c; FLBPR=0xff; //设置flash保护区 FLCR_ERASE=1; //1->ERASE,0->MASS(页擦除) FLCR_MASS=0; c=FLBPR; //读FLBPR *((volatile unsigned char *)(0xde00))=0x99;//向被擦写的单元写任意字符 for(c=0;c<100;c++); //延时10us FLCR_HVEN=1; //1->HVEN (加高压) for(c=0;c<1000;c++); //延时时间必须>1.6ms FLCR_ERASE=0; //0->Erase for(c=0;c<100;c++); //10us FLCR_HVEN=0; //0->HVEN(取消高压) for(c=0;c<100;c++); //延时10us }
/*-------------------------------------------------------*/ /*-----------DoWriteFlash:实际执行的写入函数-----------*/ void DoWriteFlash() { unsigned int c; FLBPR=0xff; FLCR_PGM=1; //1->PGM,编程状态 c=FLBPR; //读FLBPR *((volatile unsigned char *)(0xde00))=0x88;//0x88->C000,选中flash行 for(c=0;c<200;c++); //10us FLCR_HVEN=1; //1->HVEN for(c=0;c<100;c++); //10us *((volatile unsigned char *)(0xde00))=12;//将数据写入相应的flash地址 for(c=0;c<350;c++); FLCR_PGM=0; //0->PGM for(c=0;c<100;c++); //10us FLCR_HVEN=0; //0->HVEN for(c=0;c<100;c++); //10us } 现在在地址0xde00里写char类型的数据没有问题,但是如何写超过255的数呢 譬如我想写3456,我将DoWriteFlash改为 *((volatile unsigned char *)(0xde00))=34;//将数据写入相应的flash地址 for(c=0;c<350;c++); *((volatile unsigned char *)(0xde01))=56;//将数据写入相应的flash地址 for(c=0;c<350;c++);
可是为什么不对呢? |