如果是在单片机程序中写Flash,这是一个很复杂的过程,
Atmega单片机
Flash分为两个区:可读写区(RWW),不可读写区(NRWW)
RWW:
read-while-write,也就是常说的
bootloader
区,
NRWW:no-read-while-write
一般的应用程序是在NRWW区的,也就是说不可以对flash进行 *** 作,但是你可以写一段
程序下载
到RWW区,然后这一段的程序可能对整个Flash进行读写 *** 作,所以你要实现写Flash的话,你的应用程序必须跳转到RWW区,将要写的地址传给它,然后由该部分的程序去完成 *** 作,然后再跳回你的应用程序
//对flash进行读 *** 作
void Flash_READ(void) //读flash数据
{
u8 i;
u8 t=10;
u8 code pread; /程序存储器空间的指针(Flash),指向待读地址 /
pread=0x0000;
for(i=0;i<t;i++)
chan_shu[i]=pread++;
}
//对flash进行写 *** 作
void Flash_WRITE(void)
{
u8 xdata pwrite;/程序存储器空间的指针(Flash),指向待写地址/
u8 pgen; /一般指针 /
u8 i;
u8 t=10;
EA=0; /关中断/
FLSCL |= 0x01; // set FLWE,允许通过用户软件写/擦除FLASH
PSCTL = 0x03; // 将PSWE和PSEE置1MOVX指令对应// 的FLASH页
pwrite = 0x0000; // 将指针指向待擦除页
pwrite=0; // 用movx指令向待擦除扇区的任何一个地址写入一个数据
PSCTL = 0x01; // 清除PSEEPSWE仍然置1// MOVX指令将写到对应的地址
pgen=&chan_shu[0]; /将数组值写入Flash中/
for(i=0;i<t;i++)
{
pwrite++=pgen++;
}
PSCTL = 0; // 禁止FLASH写
FLSCL = 0x8f; // 禁止FLASH写
EA=1; /开中断/
以上就是关于AVR单片机中如何写flash,目前能够读出来,就是不知道怎么将变量写到flash任意地址中全部的内容,包括:AVR单片机中如何写flash,目前能够读出来,就是不知道怎么将变量写到flash任意地址中、单片机C8051F060如何把一个数组数据写入自带的flash,能成功改好下面flash读写程序的重奖200财富!、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)