模拟EEPROM,想怎写就写,想擦就擦!【恢复】
模拟EEPROM,想怎写就写,想擦就擦!/**********************************/
/* 从正常模式切换到编程模式 */
/*********************************/
void star()
{
MK0=0xFF;
DI();
do
{
PFS=0;
PFCMD=0xA5;
FLPMC=0x01;
FLPMC=0xFE;
FLPMC=0x01;
NOP();
HALT();
}while((PFS&0x01)==0x01);
}
/**********************************/
/* 从编程模式切换到正常模式 */
/*********************************/
void stop()
{
do
{
PFS=0;
PFCMD=0xA5;
FLPMC=0x00;
FLPMC=0xFF;
FLPMC=0x00;
}while((PFS&0x01)==0x01);
EI();
}
/*********************************/
/* 块擦除 */
/* 入口参数:block 要擦除的块 */
/********************************/
void erase(unsigned char block)
{
do
{
FLCMD=0x03;
FLAPH=block;
FLAPL=0x00;
FLAPHC=block;
FLAPLC=0x00;
PFS=0x00;
WDTE=0xAC;
HALT();
}while((PFS&0x06)==0x04);
}
/***********************************************/
/* 写数据 */
/* 入口参数1:block 要写入数据所在的块 */
/* 入口参数2: addr 要写入数据所在的块的偏地址 */
/* 入口参数3:bdata 要写入的数据 */
/***********************************************/
void write(unsigned char block,unsigned char addr,unsigned char bdata)
{
FLW=bdata;
FLAPH=block;
FLAPL=addr;
FLAPHC=block;
FLAPLC=addr;
FLCMD=0x05;
PFS=0x00;
WDTE=0xAC;
NOP();
HALT();
}
看了一大堆例程,都没有一个象我这样的例, 只好自己写一个了,断断续续搞了N久时间,终修正果!
9202上通过。
欢迎大家讨论NEC应用:Q Q : 8 6 0 6 1 8 2 1 独特之处--就是轮换的办法,了解FLASH做EEPROM用的原理--只能把1变成0,不能把0变成1。NEC的代码是好,
但是好多人都搞不明白,当搞明白的时候,就不用它的了! 不要贬低nec的代码,还是有其独特之处, 它的代码讲究可擦写的次数 STC上应用很不错的主意 en,STC上应用很不错的主意 非常感谢!!! http://www.getsoon.com.cn/bbs/viewthread.php?tid=2477&extra=page%3D1
完整的程序可以参考这个贴! 学习一下 #pragma section @@CNST buf1 at 0x0C00
const unsigned char buf1={
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
把一个块定义成一个数组。
读数据: ldata=buf1; 我的方法就是定义一个数组到所用到的块! 写入的数据是怎么读出来的? 回楼主,您这函数的使用是不是这样的:
star() ;
erase(block_num) ;
for(i=0;i<addr_mix;i++)
write(block_num,i,i) ;
stop() ; flash的结构是什么?了解了这个问题就明白为什么要擦页了。否则不就和普通的eeprom一样了嘛。 STC51的FLASH做EEPROM要BANK擦除后才能写,NEC的要吗? 谢谢诶 顶! 78K0S可以这样写,换了78k0就比较麻烦了...78K0S手册直接有各个自编程相关函数的解释,78K0就没 兄弟 支持啊
谢谢! kl 嗯 不错 还是这个方便多了 收藏 原理是一样的,我没有0511的芯片,如果老大支持给我芯片,搞出来是没有什么问题,
不明白NEC为什么这样简单的东西都没有写出来给大家,给的让人难看死的程序。 楼主有没有0511的程序?
页:
[1]