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 ...
随机推荐
- cpu的发现
system.cpu.discovery 检测到的CPU/CPU内核列表.用于低级发现 返回的cpu从0开始编号,其他关于cpu的监控项就可以使用cpu的id进行单个cpu的资源监控
- 常用方法 Entitys转换为DataTable
效率比较屁,将近可以用 public static DataTable EntitiesToDataTable<T>(List<T> entitys) { Type t = t ...
- openjudge1.3
目录 1.3.1 1.3.2 1.3.3 1.3.4 1.3.5 1.3.6 1.3.7 1.3.8 1.3.9 1.3.10 1.3.11 1.3.12 1.3.13 1.3.14 1.3.15 1 ...
- Java中的long类型和Long类型比较大小
Java中我们经常要做一些判断,而对于判断的话,用的最多的便是“>”.“==”.“<”的比较,这里我们进行一个Long类型数据和long类型数据的比较大小的讲解. Java中Long和lo ...
- Redis内存数据库
remote dictionary server 远程字典服务器 Redis默认支持16个数据库,不同的应用应该使用不同的Redis实例存储数据. 支持数据类型:字符串,哈希散列,列表,集合,有序 ...
- Navicat 12.x for MySQL最新版安装破解教程(附安装包和注册机,全网独家可用
title: "Navicat 12.x for MySQL最新版安装破解教程(附安装包和注册机,全网独家可用" categories: soft tags: soft autho ...
- dd命令笔记
dd命令 用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换 参数 if=FILE 指定输入源文件, 缺省为标准输入, < if=input file > iflag=FLAGS 指 ...
- easyui datagrid的editor编辑器如何为validatebox控件添加改变事件
项目中需要为行编辑器Editor的某个列的文本框添加改变事件 需求:新增行时,为用户名输入特殊字符进行验证,不允许保存用户数据 html页面 <table id="gridlist&q ...
- 利用Superlance监控Supervisor运行状态并实现报警
Superlance是基于supervisor的事件机制实现的一系列命令行的工具集,它实现了许多supervisor本身没有实现的实用的进程监控和管理的特性,包括内存监控,http接口监控,邮件和短信 ...
- python开发笔记-python调用webservice接口
环境描述: 操作系统版本: root@9deba54adab7:/# uname -a Linux 9deba54adab7 --generic #-Ubuntu SMP Thu Dec :: UTC ...