|
F330是8K的内部flash程序存储区,以512字节为单位扇区,可在系统以扇区单位编写flash,地址从0X1E00-0X1FFF的部分由公司保留,因此我选用0X1C00-0X1DFF这512字节作为我的标定数据存储区,但是发现读函数读出来的全是1,更写函数没有起作用似的,如果写函数成功,应该读出来的是0才对!代码如下:
定义了一个全局变量用来提供写入数据或保存读出数据
unsigned char Data;
//读flash
void Flash_Read(void)
{
uchar i;
uchar code *P_Read; //指向程序储存空间的地址指针
P_Read=0x1C00; //flash段的首地址
Data=*P_Read;
}
//写flash
void Flash_Write(void)
{
uchar xdata *P_Write; //程序存储器空间的指针(Flash),指向待写地址
uchar *P_Data; //一般指针
//关中断
EA=0;
//擦出待写扇区
PSCTL&=0X02; //erase enable
PSCTL&=0X01; //write enable
FLKEY=0XA5; //写入关键码
FLKEY=0XF1;
P_Write=0x1C00; //指向待擦出Flash扇区的任一地址
*P_Write=0; //向该地址flash写入任意数据,以擦除该Flash扇区
PSCTL&=~0X02; //erase disable
PSCTL&=~0X01; //write disable
//写入
PSCTL&=0X01; //write enable
FLKEY=0XA5;
FLKEY=0XF1;
P_Data=&Data; //记录数据首地址
*P_Write=*P_Data; //写入flash
*P_Write=0x00;
PSCTL&=~0X01; //write disable
//开中断
EA=1;
}
这段代码的目的,read函数把0x1c00开始的一个字节读到Data中,write函数把Data中的一个字节数据写到0x1c00开始的flash中,
但测试read能读出数据,write不能完成写功能.请用过C8051F的朋友帮忙看看问题在什么地方. |
阿莫论坛20周年了!感谢大家的支持与爱护!!
你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。
|