STC单片机Flash做EEPROM的代码
STC官方给出的建议:

/***************************************************************Author:Liming***
* @brief 读取参数
* @param None
* @retval None
****************************************************************0x49E7FC7B*****/
void ReadParam(void)
{
uint16_t i;
uint8_t buffer[][];//1扇区分为64块存储区 1块内的8个字节 EepromReadBytes(IAP_SECTOR0, &buffer[][], 0x200); #ifdef DEBUG
for(i=; i<; i++)//调试模式输出数据
{
SendBytes(&buffer[i][], );
SendString("\r\n");
Delay();
}
#endif for(i=; i<; i++)
{
if((buffer[i][] == 0xff) && buffer[i][] != 0xff)
{
LocalID = buffer[i][];
return;
}
}
} /***************************************************************Author:Liming***
* @brief 保存参数
针对STC单片机Flash作为EEPROM,0只能通过扇区擦除才能变为1,但是1可以
写入改为0,发现如果对单个字节写入一次数据比如0x63,再写入0x00,读出的值为0x40并
不是理论上的0x00,但第一次写入数据都没问题。所以采用以下方法:
一扇区512字节以8字节为一块分为64块,每一块的第一字节为标志位,如果为0xff则后面
的7字节为有效数据,如果为0x00则后面的7字节已经作废。
* @param
* @retval None
****************************************************************0x49E7FC7B*****/
void SaveParam(void)
{
uint16_t i;
uint8_t buffer[][];//1扇区分为64块存储区 1块内的8个字节 EepromReadBytes(IAP_SECTOR0, buffer, 0x200); for(i=; i<; i++)
{
if((buffer[i][] == 0xff) && (buffer[i][] == 0xff))
{
IapProgramByte(IAP_SECTOR0+(i*)+, LocalID);
if(i != 0x00)
{
IapProgramByte(IAP_SECTOR0+(i*)-, 0x00);//用过的存储块更改标志
}
return;
}
}
IapEraseSector(IAP_SECTOR0);
IapProgramByte(IAP_SECTOR0+, LocalID);
}
STC单片机Flash做EEPROM的代码的更多相关文章
- STC单片机 IAP(EEPROM)的使用
STC89C51.52内部都自带有2K字节的EEPROM,54.55和58都自带有16K字节的EEPROM,STC单片机是利用IAP技术实现的EEPROM,内部Flash擦写次数可达100,000 次 ...
- FLASH和EEPROM的最大区别
源:http://www.cnblogs.com/bingoo/p/3551753.html FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储 ...
- 大话FLASH和EEPROM
最近在看代码的时候,遇到了一个使用FLASH模拟EEPROM的情况,看到这个我当时是一脸蒙蔽啊,对于一个有时候连FLASH和EEPROM都分不清的人来说,怎么可能读懂用FLASH来模拟EEPROM呢? ...
- AVR单片机中的EEPROM
1.EEPROM介绍 Electrically Erasable Programmable Read Only Memory 电气可拭除可编程只读存储器 发展过程:ROM – > PROM –& ...
- FLASH和EEPROM的区别
FLASH和EEPROM的最大区别是FLASH按扇区操作,EEPROM则按字节操作,二者寻址方法不同,存储单元的结构也不同,FLASH的电路结构较简单,同样容量占芯片面积较小,成本自然比EEPROM低 ...
- Flash,EEPROM差别
flash是用来存储代码的,在执行过程中不能改:EEPROM是用来保存用户数据,执行过程中能够改变,比方一个时钟的闹铃时间初始化设定为12:00,后来在执行中改为6:00,这是保存在EEPROM里,不 ...
- 单片机成长之路(51基础篇) - 002 STC单片机冷启动和复位有什么区别
STC单片机简介 STC单片机是一款增强型51单片机,完全兼容MCS-51,还增加了新的功能,比如新增两级中断优先级,多一个外中断,内置EEPROM,硬件看门狗,具有掉电模式,512B内存等.还支持I ...
- STM32学习笔记:读写内部Flash(介绍+附代码)
一.介绍 首先我们需要了解一个内存映射: stm32的flash地址起始于0x0800 0000,结束地址是0x0800 0000加上芯片实际的flash大小,不同的芯片flash大小不同. RAM起 ...
- 时空上下文视觉跟踪(STC)算法的解读与代码复现(转)
时空上下文视觉跟踪(STC)算法的解读与代码复现 zouxy09@qq.com http://blog.csdn.net/zouxy09 本博文主要是关注一篇视觉跟踪的论文.这篇论文是Kaihua Z ...
随机推荐
- 洛谷P1434 [SHOI2002]滑雪
题目描述 Michael喜欢滑雪.这并不奇怪,因为滑雪的确很刺激.可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你.Michael想知道在一个区域中最长 ...
- 【CSP-S膜你考】即时战略(模拟)
Problem B. 即时战略 (rts.c/cpp/pas) 注意 Input file: rts.in Output file: rts.out Time Limit : 2 seconds Me ...
- vue+elementui项目打包后样式变化问题
博主刚刚解决了index.html空白问题,刚打开项目页面又发现了样式出现了大问题,样式与开发版本有很大不同,有些样式没有生效.利用搜索引擎,找到了问题所在以及解决办法:main.js中的引入顺序决定 ...
- java 查找数组中最接近的一个数字
public static Integer getNumberThree(Integer[] intarray,Integer number){ int index = Math.abs(number ...
- NIO通信中connect()方法和finishConnect()方法的区别
1.对于阻塞模式下,调用connect()进行连接操作时,会一直阻塞到连接建立完成(无连接异常的情况下).所以可以不用finishConnect来确认. 2.但在非阻塞模式下,connect()操作是 ...
- Mac OS X 10.14.3下如何给Python2.7.10安装MySQL-Python
最近准备再看一下python ,弄个自动化部署的工具,一来就遇到了坑 sudo pip install MySQL-Python --global-option=build_ext --global- ...
- Scrapy之Spider
Spider Spider类定义了如何爬取某个(或某些)网站.包括了爬取的动作(例如:是否跟进链接)以及如何从网页的内容中提取结构化数据(爬取item). 换句话说,Spider就是您定义爬取的动作及 ...
- django入门8之xadmin引入富文本和excel插件
django入门8之xadmin引入富文本和excel插件 Xadmin引入富文本 插件的文档 https://xadmin.readthedocs.io/en/docs-chinese/make_p ...
- 【转载】 CUDA_DEVICE_ORDER 环境变量说明 ( ---------- tensorflow环境下的应用 )
原文地址: https://www.jianshu.com/p/d10bfee104cc ------------------------------------------------------- ...
- 前端解析 excel docx
在研究中... https://www.npmjs.com/package/xlsx https://www.jianshu.com/p/68a420a68ded https://www.jiansh ...