各个型号容量及扇区请查datasheet

#include <reg52.h>
#include "intrins.h" typedef unsigned char byte;
typedef unsigned int word; /* Declare SFR associated with the IAP */
sfr IAP_DATA = 0xC2; //Flash data register
sfr IAP_ADDRH = 0xC3; //Flash address HIGH
sfr IAP_ADDRL = 0xC4; //Flash address LOW
sfr IAP_CMD = 0xC5; //Flash command register
sfr IAP_TRIG = 0xC6; //Flash command trigger
sfr IAP_CONTR = 0xC7; //Flash control register /* Define ISP/IAP/EEPROM command */
#define CMD_IDLE 0 //Stand-By
#define CMD_READ 1 //Byte-Read
#define CMD_PROGRAM 2 //Byte-Program
#define CMD_ERASE 3 //Sector-Erase /* Define ISP/IAP/EEPROM operation const for IAP_CONTR */
#define ENABLE_IAP 0x80 //if SYSCLK < 30MHz
#define ENABLE_IAP 0x81 //if SYSCLK < 24MHz
#define ENABLE_IAP 0x82 //if SYSCLK < 20MHz
#define ENABLE_IAP 0x83 //if SYSCLK < 12MHz
#define ENABLE_IAP 0x84 //if SYSCLK < 6MHz
#define ENABLE_IAP 0x85 //if SYSCLK < 3MHz
#define ENABLE_IAP 0x86 //if SYSCLK < 2MHz
#define ENABLE_IAP 0x87 //if SYSCLK < 1MHz //Start address for STC12C5201AD series EEPROM
#define IAP_ADDRESS 0x0000 void Delay(byte n)
{
word x;
while(n--)
{
x = 0;
while(++x);
}
} /* Disable ISP/IAP/EEPROM function Make MCU in a safe state */ void IapIdle()
{
IAP_CONTR = 0; //close IAP function
IAP_CMD = 0; //clear command to standby
IAP_TRIG = 0; //clear tirgger register
IAP_ADDRH = 0x80; //data ptr point to non EEPROM area
IAP_ADDRL = 0; //clear IAP address to prevent mususe
} /* read one byte from isp/iap/eeprom area input:addr(isp iap eeprom address) output:flash data */
byte IapReadByte(word addr)
{
byte dat; IAP_CONTR = ENABLE_IAP; //Open IAP function and set wait time
IAP_CMD = CMD_READ; //Set ISAP READ command
IAP_ADDRL = addr; //Set ISP address low
IAP_ADDRH = addr >> 8; //Set IAP address high
IAP_TRIG = 0x5a; //Send trigger command1(0x5a)
IAP_TRIG = 0xa5; //Send trigger command2(0xa5)
_nop_(); //MCU will hold here until IAP operation complete dat = IAP_DATA; //Read IAP EEPROM data
IapIdle(); //Close ISP function return dat; //Return Flash data
} /* Program one byte to ISP area Input:addr (address) dat(data) Output:- */
void IapProgramByte(word addr, byte dat)
{
IAP_CONTR = ENABLE_IAP; //Open IAP function, and set wait time
IAP_CMD = CMD_PROGRAM; //Set EEPROM PROGRAM command
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_DATA = dat;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_(); IapIdle();
} /* Erase one sector area Input:addr */
void IapEraseSector(word addr)
{
IAP_CONTR = ENABLE_IAP;
IAP_CMD = CMD_ERASE;
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_(); IapIdle();
} int main()
{
word i; P1 = 0xfe;
Delay(10);
IapEraseSector(IAP_ADDRESS); for(i = 0; i < 512; ++i)
{
if(IapReadByte(IAP_ADDRESS + i) != 0xff)
{}
} P1 = 0xfc;
Delay(10);
for(i = 0; i < 512; ++i)
{
IapProgramByte(IAP_ADDRESS + i, (byte)i);
} P1 = 0xf8;
Delay(10);
for(i = 0; i < 512; ++i)
{
if(IapReadByte(IAP_ADDRESS + i) != (byte)i)
{}
} P1 = 0xf0;
while(1); return 0;
}

51 EEPROM操作模板的更多相关文章

  1. PIC XC8 EEPROM操作

    要做一个报警功能的东东,要求可以通过遥控来改变遥控内容.由于对系统的稳定性要求很高,所以用了看门狗. 可是看门狗复位会引起所有寄存器重置,恢复到默认状态.遥控要改变的内容也被复位了,所以只能借助EEP ...

  2. C语言链表操作模板(添加,删除,遍历,排序)

    C语言链表操作模板,摘自郝斌的C语言视频教程,简单的修改成了纯C格式.当年照着视频学习的时候记录下来的,在使用的时候直接拿来修改修改修改能节约不少时间的. /********************* ...

  3. 像51一样操作STM32的IO(转)

    源:像51一样操作STM32的IO //-------------------------------------------------------------------------------- ...

  4. 子树大小平衡树(Size Balanced Tree,SBT)操作模板及杂谈

    基础知识(包括但不限于:二叉查找树是啥,SBT又是啥反正又不能吃,平衡树怎么旋转,等等)在这里就不(lan)予(de)赘(duo)述(xie)了. 先贴代码(数组模拟): int seed; int ...

  5. python 外键用法 多对多关系 ORM操作 模板相关

    一.app/models中写类(设计表结构) 1.普通类 class  A(models.Model): id=modles.AutoField(primary_key=True) name=mode ...

  6. Jaba_Web--JDBC 删除记录操作模板

    import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...

  7. STM8S EEPROM 操作

    STM8S 内置EEPROM,对于非常大须要带记忆的产品来说,是个非常好的资源,下面是我个人摸索出来的,而且验证OK,大家如须要可放心使用. #define EEPROMADDR0X000 ((u32 ...

  8. jeecg入门操作—模板配置(录入界面)

    点击online表单的模板配置,进入模板设计列表页面,点击创建模板 点击创建模板 点击激活 设计完成,点击激活(表单模板可以多个,激活状态只能有一个) 激活后,重新加入功能测试,点击添加页面,效果如下 ...

  9. 51: Luogu 2485 模板

    $des$ 1.给定y.z.p,计算y^z mod p 的值: 2.给定y.z.p,计算满足xy ≡z(mod p)的最小非负整数x: 3.给定y.z.p,计算满足y^x ≡z(mod p)的最小非负 ...

随机推荐

  1. PooledDataSource--mybatis-3-mybatis-3.2.3

    org.apache.ibatis.executor.SimpleExecutor public <E> List<E> doQuery(MappedStatement ms, ...

  2. 转:修改类不重启tomcat 自动加载项目

    可以修改类不用重启Tomcat加载整个项目(手工启动)     配置reloadable=true(自动重载)     使用Debug模式,前提是仅限于局部修改.(修改类不用重启--热加载) (rel ...

  3. 转:完善eclipse+pdt作php开发中的代码提示能力

    在eclipse开发中 ,可能由于各种原因导致项目文件(eclipse内置)丢失或错乱, 因而, 失去一些能力.. 以下是经过被痛苦折磨后查阅总结的一点东西 设置完下面内容, 支持以下特性 PHP: ...

  4. ulimit -c unlimited

    tomcat 产生core日志: app:/usr/local/apache-tomcat-7.0.55_8082/logs# ulimit -a core file size (blocks, -c ...

  5. 【转】git与github在ubuntu下的使用 -- 不错

    原文网址:http://www.cnblogs.com/cocowool/archive/2010/10/19/1855616.html 最近开始使用git对kohana3的文档做一些补充的工作,使用 ...

  6. hdu1067-Gap(bfs+哈希)

    Let's play a card game called Gap. You have 28 cards labeled with two-digit numbers. The first digit ...

  7. ubuntu 16.04 一些使用过程中遇到的问题

    1  安装ssh 和 openssh-server之后通过SecureCRT 可以连接,FileZilla不能使用sftp方式进行连接, 安装vsftpd后测试ftp可以连接, 修改 /etc/ssh ...

  8. qt model/view 架构自定义模型之QFileSystemModel

    # -*- coding: utf-8 -*- # python:2.x #QFileSystemModel """ Qt  内置了两种模型:QStandardItemM ...

  9. Biorhythms(中国剩余定理)

    Biorhythms Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 127339   Accepted: 40342 Des ...

  10. BZOJ 2648/2716(SJY把件-KD_Tree)[Template:KD_Tree]

    2648: SJY把件 Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 1180  Solved: 391 [id=2648" style= ...