STC12C5A系列单片机内部 EEPROM 的应用

2023-10-27

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
参考范例程序。

eeprom.c

#include "eeprom.h"

/*----------------------------
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 trigger register
    IAP_ADDRH = 0x80;               //Data ptr point to non-EEPROM area
    IAP_ADDRL = 0;                  //Clear IAP address to prevent misuse
}

/*----------------------------
Read one byte from ISP/IAP/EEPROM area
Input: addr (ISP/IAP/EEPROM address)
Output:Flash data
----------------------------*/
BYTE IapReadByte(WORD addr)
{
    BYTE dat;                       //Data buffer

    IAP_CONTR = ENABLE_IAP;         //Open IAP function, and set wait time
    IAP_CMD = CMD_READ;             //Set ISP/IAP/EEPROM READ command
    IAP_ADDRL = addr;               //Set ISP/IAP/EEPROM address low
    IAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address high
    IAP_TRIG = 0x5a;                //Send trigger command1 (0x5a)
    IAP_TRIG = 0xa5;                //Send trigger command2 (0xa5)
    _nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation complete
    dat = IAP_DATA;                 //Read ISP/IAP/EEPROM data
    IapIdle();                      //Close ISP/IAP/EEPROM function

    return dat;                     //Return Flash data
}

/*----------------------------
Program one byte to ISP/IAP/EEPROM area
Input: addr (ISP/IAP/EEPROM address)
       dat (ISP/IAP/EEPROM data)
Output:-
----------------------------*/
void IapProgramByte(WORD addr, BYTE dat)
{
    IAP_CONTR = ENABLE_IAP;         //Open IAP function, and set wait time
    IAP_CMD = CMD_PROGRAM;          //Set ISP/IAP/EEPROM PROGRAM command
    IAP_ADDRL = addr;               //Set ISP/IAP/EEPROM address low
    IAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address high
    IAP_DATA = dat;                 //Write ISP/IAP/EEPROM data
    IAP_TRIG = 0x5a;                //Send trigger command1 (0x5a)
    IAP_TRIG = 0xa5;                //Send trigger command2 (0xa5)
    _nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation complete
    IapIdle();
}

/*----------------------------
Erase one sector area
Input: addr (ISP/IAP/EEPROM address)
Output:-
----------------------------*/
void IapEraseSector(WORD addr)
{
    IAP_CONTR = ENABLE_IAP;         //Open IAP function, and set wait time
    IAP_CMD = CMD_ERASE;            //Set ISP/IAP/EEPROM ERASE command
    IAP_ADDRL = addr;               //Set ISP/IAP/EEPROM address low
    IAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address high
    IAP_TRIG = 0x5a;                //Send trigger command1 (0x5a)
    IAP_TRIG = 0xa5;                //Send trigger command2 (0xa5)
    _nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation complete
    IapIdle();
}

eeprom.h

#ifndef _EEPROM_H_
#define _EEPROM_H_

#include "stc12c5a60s2.h"
#include "intrins.h"

typedef unsigned char BYTE;
typedef unsigned int WORD;

/*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  0x83            //if SYSCLK<12MHz

//Start address for STC12C5A60S2 EEPROM - 两个扇区
#define IAP_ADDRESS 0x0000  			 // 第一扇区
#define IAP_SECOND_ADDRESS 0x0200  // 第二扇区

// 函数声明
extern BYTE IapReadByte(WORD addr);
extern void IapProgramByte(WORD addr, BYTE dat);
extern void IapEraseSector(WORD addr);

#endif

STC12C5A60S2 只有两个扇区,每个扇区有 512 个字节。

测试读取功能:

dat = IapReadByte(IAP_ADDRESS);
dat2 = IapReadByte(IAP_ADDRESS+0x0001);
printf("dat = %bx , dat2 = %bx.\r\n",dat, dat2);  // 若以十进制形式读取用 %bu , 若以十六进制则 %bx 

测试写入功能:

IapProgramByte(IAP_ADDRESS,0x32);
IapProgramByte(IAP_ADDRESS+0x0001, 0x52);
dat = IapReadByte(IAP_ADDRESS);
dat2 = IapReadByte(IAP_ADDRESS+0x0001);
printf("dat = %bx , dat2 = %bx.\r\n",dat, dat2); 

测试擦除功能:
注意:如果擦除将擦除整个扇区。

IapEraseSector(IAP_ADDRESS);
dat = IapReadByte(IAP_ADDRESS);
dat2 = IapReadByte(IAP_ADDRESS+0x0001);
printf("dat = %bx , dat2 = %bx.\r\n",dat, dat2); 

运行结果如下:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

STC12C5A系列单片机内部 EEPROM 的应用 的相关文章

  • linux学习(五)解决github网页无法进入

    文章目录 前言 1 问题 2 解决 前言 准确来说这个内容不属于linux学习 但是使用git管理代码时需要用到 这里就提前准备一下 1 问题 github网页无法刷出来 一直转圈 2 解决 step1 找到C Windows System
  • 取整函数_6个Excel取整函数技巧,让你的数据规规矩矩!

    Excel技巧是十分神奇的 可以用来娱乐 也能用来工作 更重要的是可以工作效率 不管是在什么地方 最不讨人喜欢的就是有小数点的数据 那怎么办了 今天就来教给大家6个超简单又很实用的Excel取整函数 1 CEILING 函数取整 CEILI
  • windows10编译open3d 0.13

    目录 写在前面 准备 获取源码 cmake cmake版本 开始cmake 1 命令行 2 cmake gui 编译 安装 测试 完 写在前面 1 环境 win10 visual studio2019 cmake3 22 0 rc1 下载源
  • C语言浮点数存储规则

    1 浮点型数据类型 float double long double 目前常用的类型为float 用于存储单精度浮点数和双精度浮点数 浮点数使用IEEE 电气和电子工程协会 格式 浮点类型的32位浮点数具有 4 个字节 包括一个符号位 一个
  • 【FPGA学习】状态机实现UART通信

    文章目录 前言 一 数据帧结构 二 接收模块 2 1 状态设置 2 1 状态跳转 2 2 奇校验 2 3 数据输出 三 发送模块 3 1 状态跳转 3 2 数据输出 四 顶层模块 总结 前言 在之前的文章中 FPGA学习 实例一 Cyclo
  • 7、Java入门教程【面向对象】

    面向对象是Java编程的核心概念 如果不能充分了解面向对象的思想 那么会给你在实际的项目开发过程中 带来很多业务设计上的困扰 一 构造器 我们在设计完一个类 在使用这个类去创建对象实例的时候 有些场景是需要对实例做初始化操作的 那么Java

随机推荐

  • 雅思备考资料整理

    单纯想整理一下自己使用过的素材 梳理一下自己学习到的经验 万一以后还需要考呢 一 听力 何琼听力网课 王陆语料库 王陆建议听写前先过一遍单词 进行同义词整理 听写到后面几章速度很快 写下来很耽误时间也跟不上 我是边听脑子里就同时反应单词怎么
  • java自定义数组_java创建自定义类的数组

    今天在学图论的最小生成树 开始一直在想是用邻接矩阵还是关联矩阵来表示图 但是发现这样都会有好多空间浪费 于是我就自定义一个边的类 里面包含了权值 关联的端点1 端点2 和图的表示字母 发现我想创建11条边 Bian new Bian 11
  • 第6章 K8s基础篇-资源调度

    杜宽老师k8s课程学习记录 6 1 Replication Controller和ReplicaSet Replication Controller 复制控制器 RC 和ReplicaSet 复制集 RS 是两种简单部署Pod的方式 因为在
  • python全栈开发优势条件_Python全栈开发-day01-初识python

    一 Python学习的大致框架 1 linux基础 计算机以及日后我们开发的程序放置的服务器的简单操作 2 Python开发 1 Python基础 2 网络编程 断点续传 一般情况下不需要我们自己开发 3 web框架 用于写网站 4 设计模
  • 等保测评:SQLServer操作超时

    一 说明 本文说的是等级保护1 0中SQLServer数据库操作超时的内容 实际在SQLServer中有很多种超时选项 很容易将其混为一谈 本文将尽力将之说清楚 二 操作超时的意义 操作超时在sqlserver数据库中可能包含好几个意思 2
  • BeagleBone 嵌入式操作

    特点 BeagleBone Black 是一个嵌入式系统 能够运行完整的 GNU Linux 发行版 例如 Debian 或 Ubuntu BeagleBone Black 具有强大的分发功能 并配有易于扩展的嵌入式板卡 是一款允许用户构建
  • JAVA浏览器控件JxBrowser v7.3上线!最新API文档打包带走!

    JxBrowser是将基于Chromium的浏览器与Java应用程序集成 以处理和显示HTML5 CSS3 JavaScript Flash等 近日 JxBrowser v7 3发布上线 支持最新macOS Catalina 支持Java1
  • QT 信号和槽的使用笔记

    目录 信号和槽介绍 回调机制 信号槽机制 信号 槽 信号槽和直接调用效率问题 信号和槽的使用对比 QT5 写法 QT4 写法 总结 信号和槽介绍 信号与插槽机制 提供对象间的通信机制 可以取代原始的回调和消息映射机制 信号与槽是迅速的 类型
  • 计算机网络--基础篇(IP地址,端口号,协议,五元组,封装分用,客户端,服务器)

    目录 一 IP地址 1 IP地址的概念及格式 2 IP地址的编址方法阶段 3 IP地址的分类 二 端口号 1 定义 2 格式 三 协议 三要素 四 五元组 五 发送端和接收端 六 封装分用 七 客户端和服务器 1 服务端 2 客户端 一 I
  • MyBatis查询单表返回List

    本来以为把List
  • python dict 写入 json 文件 编码问题

    esports 0 subject list sign 2 name aa desc 听阿红的 sign 3 name bb desc 成绩啊啊啊 id 1
  • idea 模块名后面有个中括号别名(1)

    步骤 第一步 第二步 为什么不直接改名字 最近项目正在从Springboot改造成SpringCloud微服务架构 所以会涉及到新增模块的情况 这里我直接复制了项目中的一个 模块 并且通过修改文件夹名的方式命名该模块 之后该模块名后面出现了
  • IntelliJ IDEA 2019(Ultimate Edition)激活方法

    IntelliJ IDEA 2019 Ultimate Edition 激活方法 https blog csdn net halen001 article details 81137092
  • 常见算法题整理

    算法题 数据结构 数组 链表 字符串 树 数学 栈 hash表 图 动态规划 中心扩散 回溯算法 递归 迭代 贪心算法 从整体到细节 自顶向下 从抽象到具体的框架思维是通用的 不只是学习数据结构和算法 学习其他任何知识都是高效的 一 数组
  • 树莓派4B安装详细教程,从零开始!(2)

    树莓派4B安装详细教程 从零开始 2 前言 一 准备材料 1 硬件材料 2 软件材料 二 配置步骤 1 获取树莓派IP地址 1 通过有线网进行连接 这时候还需要 一根网线 2 通过无线网进行连接 这时候还需要一个 读卡器 2 连接电脑 3
  • 学习《R语言之书-编程与统计》

    R语言学习笔记1 1 新手入门 1 winows ctrl R 表示执行当前编辑器的代码 多个编辑窗口 编辑器外观设置 preference Edit GUI preferences 2 代码添加注释 gt This is a compen
  • 从Java的角度理解前端框架,nodejs,reactjs,angularjs,requirejs,seajs

    http www cnblogs com siwy p 5045556 html 从Java的角度理解前端框架 nodejs reactjs angularjs requirejs seajs 前端神秘的面纱 对后端开发来说 前端是神秘的
  • Chrome,IE等浏览器主页被hao123等篡改的解决方法

    概述 今天自己装了一个破解版的软件 然后我电脑上所有浏览器主页都被篡改了 不管是chrome IE 搜狗全部中招 MD Fuck 忍不了啊 上网搜解决方法 然后一步一步试吧 最后问题解决了 但是在网上找到的答案并不完整 我还算对电脑熟悉 摸
  • <python爬虫之JS逆向实例-2>某宇创-状态码521-加速乐

    声明 本文只作学习研究 禁止用于非法用途 否则后果自负 如有侵犯了您的合法权益 请告知 我将及时更正 删除 谢谢 邮箱地址 lc1139411732 163 com 目标站点 aHR0cHM6Ly93d3cuc2VlYnVnLm9yZy92
  • STC12C5A系列单片机内部 EEPROM 的应用

    参考范例程序 eeprom c include eeprom h Disable ISP IAP EEPROM function Make MCU in a safe state void IapIdle IAP CONTR 0 Close