在线时间8 小时
UID159261
注册时间2009-11-17
NXP金币0
该用户从未签到
注册会员

- 积分
- 137
- 最后登录
- 1970-1-1
|
在用s08sc4的8位片子,参照网上查找的用flash模拟eeprom的方法,用s08sc4的flash模拟eeprom。仿真运行的时候,读、写flash都是成功的,但是只有第一次写flash是正确的,读回来的和写入的是数据一致。
当在同一地址上再写其他不同的数据时,发现读回来的数据和写入的数据不一致,可以肯定的时候读没有问题,所以写的数据出错。
为什么只有第一次写是ok的,第二次,第三次写就不正常呢?
求高手指点???
代码如下:
/***********************************************************************
#define FlashData FlashMem[6] // ,
#define FlashAddr (*((word *)(&FlashMem[8])) ) // ,
#define FlashCmd FlashMem[11] // ,
#define RunFlashCmd ((void (*)(void))((word)FlashMem)) //
byte FlashMem[32] =
{
0xA6,0x10,0xC7,0x18,0x25,0xA6,
0x00,0xC7,0xFD,0x00,0xA6,0x20,0xC7,0x18,0x26,0xA6,
0xC0,0xC7,0x18,0x25,0x9D,0x9D,0x9D,0x9D,0xC6,0x18,0x25,0xA5,0x40,0x27,0xF9,0x81
};
void flash_byte_write(word add,byte sdata)
{
byte data=sdata;
__RESET_WATCHDOG();
DisableInterrupts;
FlashData = data; // 更新数据
FlashAddr = add; // 更新地址
FlashCmd = 0x20; // 字节编程命令: 0x20
RunFlashCmd(); // 32字节程序入口
EnableInterrupts;
}
void flash_Sector_erase(word add)
{
__RESET_WATCHDOG();
DisableInterrupts;
FlashAddr = add; // Flash地址
FlashCmd = mPageErase; // 扇区删除命令: 0x40
RunFlashCmd(); // 32字节程序入口
EnableInterrupts;
}
byte flash_byte_read(word add)
{
byte tempbyte;
asm{
LDHX add
LDA ,X //读取地址到数据变量
STA tempbyte
}
__RESET_WATCHDOG();
return tempbyte;
}
void E2_read_data(word add,byte len)
{
byte i;
word addr;
addr=add;
__RESET_WATCHDOG();
for(i=0;i
|
|