永发信息网

关于新华龙单片机flash存储非易失性数据的问题

答案:1  悬赏:40  手机版
解决时间 2021-03-03 17:04
  • 提问者网友:沉默的哀伤
  • 2021-03-03 00:12
关于新华龙单片机flash存储非易失性数据的问题
最佳答案
  • 五星知识达人网友:摆渡翁
  • 2021-03-03 00:53
你用的是C8051F系列单片机吧,如果这些数据连续反复写入,我建议你扩充一个串行外部数据EEPROM,因为内部FLASH写入寿命的限制。
FLASH是按页进行存储,所以要按页进行定义,定义方法如下:
//类型定义
typedef union {
long l;
unsigned char A[4];
}LONG;
typedef unsigned int FLADDR;
//fLASH 数据区定义
LONG DATA_PAGE[128] _at_ 0x1800; // 页绝对地址
char code SCRATCH_PAGE[512] _at_ 0x1A00; // 页绝对地址
这是我做的项目中用flash中存放数据,程序中定义存放数据区的定义。我也是将AD转换计算后的数据保存在flash里面。
因为后期擦除、均按页进行。所以写入时要注意,原来需保留数据的处理。追问谢谢
今天又看了一下,发现不是存不进flash,而是赋值都不行
程序大致如下:
xdata unsigned char ABC;
unsigned char D = 1;
main()
{
ABC= D;
}
运行后,ABC=0追答flash不能那么用,你还没明白我说的,不能这样赋值,你是想这样赋值将数据写入这个地址,是不行的。
这是给写一个字节,写一个字节必须按照一个时序进行,否则随意写,flash不就乱了套
void FLASH_ByteWrite (unsigned int addr, char byte)
{
char xdata * data pwrite; // FLASH write pointer
EA = 0; // disable interrupts
VDM0CN = 0x80; // enable VDD monitor
RSTSRC = 0x02; // enable VDD monitor as a reset source
pwrite = (char xdata *) addr;
FLKEY = 0xA5; // Key Sequence 1
FLKEY = 0xF1; // Key Sequence 2
PSCTL |= 0x01; // PSWE = 1
VDM0CN = 0x80; // enable VDD monitor
RSTSRC = 0x02; // enable VDD monitor as a reset source
*pwrite = byte; // write the byte
PSCTL &= ~0x01; // PSWE = 0
}
这是读一个字节的函数
unsigned char FLASH_ByteRead (unsigned int addr)
{
char code * data pread; // FLASH read pointer
unsigned char byte;
EA = 0; // disable interrupts
pread = (char code *) addr;
byte = *pread; // read the byte
return byte;
}追问flash的非易失性数据读取和存储程序段我和你写的一样,已经调试通过了的
我上面说的程序段已经没有用到flash非易失性数据存储和读取了
只是对单片机初始化以后的一条赋值语句
我明天会再看看Keil的设置和其他可能的问题
还是多谢你
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯