单片机C8051F060如何把一个数组数据写入自带的flash,能成功改好下面flash读写程序的重奖200财富!

本人使用的是C8051F060单片机,参考网上查到的写入flash的方法均无法对其自带的flash进行数据写入,本人的读写程序如下:

//对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; /*开中断*/
}

//对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; /*开中断*/追问

和我上面的有区别吗?

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-04

追问

这些资料我知,可是写出来的程序就是不能把数据正确写入flash里面。

相似回答