当前位置: 首页 > news >正文

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

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

eeprom.c

#include "eeprom.h"/*----------------------------
Disable ISP/IAP/EEPROM function
Make MCU in a safe state
----------------------------*/
void IapIdle()
{IAP_CONTR = 0;                  //Close IAP functionIAP_CMD = 0;                    //Clear command to standbyIAP_TRIG = 0;                   //Clear trigger registerIAP_ADDRH = 0x80;               //Data ptr point to non-EEPROM areaIAP_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 bufferIAP_CONTR = ENABLE_IAP;         //Open IAP function, and set wait timeIAP_CMD = CMD_READ;             //Set ISP/IAP/EEPROM READ commandIAP_ADDRL = addr;               //Set ISP/IAP/EEPROM address lowIAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address highIAP_TRIG = 0x5a;                //Send trigger command1 (0x5a)IAP_TRIG = 0xa5;                //Send trigger command2 (0xa5)_nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation completedat = IAP_DATA;                 //Read ISP/IAP/EEPROM dataIapIdle();                      //Close ISP/IAP/EEPROM functionreturn 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 timeIAP_CMD = CMD_PROGRAM;          //Set ISP/IAP/EEPROM PROGRAM commandIAP_ADDRL = addr;               //Set ISP/IAP/EEPROM address lowIAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address highIAP_DATA = dat;                 //Write ISP/IAP/EEPROM dataIAP_TRIG = 0x5a;                //Send trigger command1 (0x5a)IAP_TRIG = 0xa5;                //Send trigger command2 (0xa5)_nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation completeIapIdle();
}/*----------------------------
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 timeIAP_CMD = CMD_ERASE;            //Set ISP/IAP/EEPROM ERASE commandIAP_ADDRL = addr;               //Set ISP/IAP/EEPROM address lowIAP_ADDRH = addr >> 8;          //Set ISP/IAP/EEPROM address highIAP_TRIG = 0x5a;                //Send trigger command1 (0x5a)IAP_TRIG = 0xa5;                //Send trigger command2 (0xa5)_nop_();                        //MCU will hold here until ISP/IAP/EEPROM operation completeIapIdle();
}

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); 

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

相关文章:

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

参考范例程序。 eeprom.c #include "eeprom.h"/*---------------------------- Disable ISP/IAP/EEPROM function Make MCU in a safe state ----------------------------*/ void IapIdle() {IAP_CONTR 0; //Close IAP functionIAP_CMD 0; …...

搭建测试平台开发(一):Django基本配置与项目创建

一、安装Django最新版本 1 pip install django 二、创建Django项目 首先进入要存放项目的目录&#xff0c;再执行创建项目的命令 1 django-admin startproject testplatform 三、Django项目目录详解 1 testplatform 2 ├── testplatform  # 项目的容器 3 │ ├──…...

JavaWeb教程笔记

JavaWeb Java Web 1、基本概念 1.1、前言 web开发&#xff1a; web&#xff0c;网页的意思 &#xff0c; www.baidu.com静态web html&#xff0c;css提供给所有人看的数据始终不会发生变化&#xff01; 动态web 淘宝&#xff0c;几乎是所有的网站&#xff1b;提供给所有人…...

数据库压力测试方法小结

一、前言 在前面的压力测试过程中&#xff0c;主要关注的是对接口以及服务器硬件性能进行压力测试&#xff0c;评估请求接口和硬件性能对服务的影响。但是对于多数Web应用来说&#xff0c;整个系统的瓶颈在于数据库。 原因很简单&#xff1a;Web应用中的其他因素&#xff0c;…...

Spring Boot——Spring Boot自动配置原理

系列文章目录 Spring Boot启动原理 Spring Boot自动配置原理 系列文章目录前言一、Spring Boot自动配置原理剖析二、自动配置生效三、总结&#xff1a; 前言 一直在使用Spring Boot特别好奇的是为什么Spring Boot比Spring在项目构建和开发过程中要方便很多&#xff0c;无需编…...

深度学习:Pytorch最全面学习率调整策略lr_scheduler

深度学习&#xff1a;Pytorch最全面学习率调整策略lr_scheduler lr_scheduler.LambdaLRlr_scheduler.MultiplicativeLRlr_scheduler.StepLRlr_scheduler.MultiStepLRlr_scheduler.ConstantLRlr_scheduler.LinearLRlr_scheduler.ExponentialLRlr_scheduler.PolynomialLRlr_sched…...

【uniapp】更改富文本编辑器图片大小

代码块 //<view v-html"productDetails"></view><rich-text :nodes"productDetails"></rich-text>// 假设htmlContent字段是后台返回的富文本字段var htmlContent res.result.productDetailsconst regex new RegExp(<img, gi…...

数据结构和算法一(空间复杂度、时间复杂度等算法入门)

时间复杂度&#xff1a; 空间复杂度&#xff1a; 时间比空间重要 递归&#xff1a; 递归特征&#xff1a; 递归案例&#xff1a; 汉诺塔问题&#xff1a; def hanoi(n,A,B,C):if n>0:hanoi(n-1,A,C,B)print("moving from %s to %s"%(A,C))hanoi(n-1,B,A,C)hanoi…...

Pytorch深度学习-----神经网络的基本骨架-nn.Module的使用

系列文章目录 PyTorch深度学习——Anaconda和PyTorch安装 Pytorch深度学习-----数据模块Dataset类 Pytorch深度学习------TensorBoard的使用 Pytorch深度学习------Torchvision中Transforms的使用&#xff08;ToTensor&#xff0c;Normalize&#xff0c;Resize &#xff0c;Co…...

QT开发快捷键

QT开发快捷键 alt enter // 自动创建类的定义 Ctrl / 注释当前行 或者选中的区域 Ctrl R 运行程序 Ctrl B Build 项目 CtrlShiftF 查找内容 F5 开始调试 ShiftF5 停止调试 F9 设置和取消断点 F10 单步前进 F11 单步进入函数 Shift F11 单步跳出函数 F1 // 查看帮助&#…...

RabbitMQ 教程 | RabbitMQ 入门

&#x1f468;&#x1f3fb;‍&#x1f4bb; 热爱摄影的程序员 &#x1f468;&#x1f3fb;‍&#x1f3a8; 喜欢编码的设计师 &#x1f9d5;&#x1f3fb; 擅长设计的剪辑师 &#x1f9d1;&#x1f3fb;‍&#x1f3eb; 一位高冷无情的编码爱好者 大家好&#xff0c;我是 DevO…...

【雕爷学编程】MicroPython动手做(10)——零基础学MaixPy之神经网络KPU2

KPU的基础架构 让我们回顾下经典神经网络的基础运算操作&#xff1a; 卷积&#xff08;Convolution&#xff09;:1x1卷积&#xff0c;3x3卷积&#xff0c;5x5及更高的卷积 批归一化&#xff08;Batch Normalization&#xff09; 激活&#xff08;Activate&#xff09; 池化&…...

BUG分析以及BUG定位

一般来说bug大多数存在于3个模块&#xff1a; 1、前台界面&#xff0c;包括界面的显示&#xff0c;兼容性&#xff0c;数据提交的判断&#xff0c;页面的跳转等等&#xff0c;这些bug基本都是一眼可见的&#xff0c;不太需要定位&#xff0c;当然也不排除一些特殊情况&#xf…...

Day46 算法记录| 动态规划 13(子序列)

这里写目录标题 300.最长递增子序列 674. 最长连续递增序列718. 最长重复子数组 300.最长递增子序列 视频解析&#xff1a; 第一层for循环遍历每一个元素&#xff0c; ------- 第二层for循环找到当前元素前面有几个小于该值的元素 结尾需要统计最多的个数 class Solution {pu…...

结构型-桥接模式(Bridge Pattern)

概述 桥接模式&#xff08;Bridge Pattern&#xff09;是一种结构型设计模式&#xff0c;将抽象部分和实现部分分离&#xff0c;使它们可以独立地变化。桥接模式通过将继承关系转化为关联关系&#xff0c;将抽象部分和实现部分分离开来&#xff0c;从而使它们可以独立地变化。…...

基于小波哈尔法(WHM)的一维非线性IVP测试问题的求解(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f308;4 Matlab代码实现 &#x1f4a5;1 概述 小波哈尔法&#xff08;WHM&#xff09;是一种求解一维非线性初值问题&#xff08;IVP&#xff09;的数值方法。它基于小波分析的思想&#xf…...

前端(Electron Nodejs)如何读取本地配置文件

使用electron封装了前端界面之后&#xff0c;最终打包为一个客户端&#xff08;exe&#xff09;。但是&#xff0c;最近项目组内做CS&#xff08;c开发&#xff09;的&#xff0c;想把所有的配置都放进安装目录的配置文件中&#xff08;比如config.json&#xff09;。这做法&am…...

没有 telnet 不能测试端口?容器化部署最佳的端口测试方式

写在前面 生产中遇到&#xff0c;整理笔记在容器中没有 telnet &#xff0c;如何测试远程端口理解不足小伙伴帮忙指正 他的一生告诉我们&#xff0c;不能自爱就不能爱人&#xff0c;憎恨自己也必憎恨他人&#xff0c;最后也会像可恶的自私一样&#xff0c;使人变得极度孤独和悲…...

漏洞发现-BurpSuite插件-Fiora+Fastjson+Shiro

BurpSuite插件安装 插件&#xff1a;Fiora Fiora是LoL中的无双剑姬的名字&#xff0c;她善于发现对手防守弱点&#xff0c;实现精准打击。该项目为PoC框架nuclei提供图形界面&#xff0c;实现快速搜索、一键运行等功能&#xff0c;提升nuclei的使用体验。 该程序即可作为burp插…...

Elasticsearch-倒排索引

Elasticsearch和Lucene的关系 Lucene 是一个开源、免费、高性能、纯 Java 编写的全文检索引擎&#xff0c;可以算作是开源领域最好的全文检索工具包。ElasticSearch 是基于Lucene实现的一个分布式、可扩展、近实时性的高性能搜索与数据分析引擎。 Lucene索引层次结构 Lucene的…...

3分钟上手PCL2-CE:打造专属Minecraft启动环境的完整指南

3分钟上手PCL2-CE&#xff1a;打造专属Minecraft启动环境的完整指南 PCL2-CE社区版是一款开源游戏配置工具&#xff0c;致力于为Minecraft玩家提供高效、灵活的游戏环境管理方案。通过智能化配置和模块化设计&#xff0c;让玩家告别繁琐设置&#xff0c;轻松掌控游戏入口&…...

论文魔法盒:书匠策AI,期刊论文写作的“超级外挂”

在学术的奇妙世界里&#xff0c;论文写作就像是一场充满挑战的魔法冒险。尤其是期刊论文&#xff0c;它要求学者们不仅要有深厚的学术功底&#xff0c;还得掌握各种写作技巧和规范。不过&#xff0c;现在有了书匠策AI这个神奇的“魔法盒”&#xff0c;期刊论文写作不再是令人望…...

从收音机到WiFi:LC并联谐振电路在实际通信系统里是怎么用的?

从矿石收音机到5G基站&#xff1a;LC并联谐振电路的百年进化史 当你拧动老式收音机的调谐旋钮时&#xff0c;金属指针在刻度盘上滑过不同电台的频率标记&#xff0c;耳机里传来忽大忽小的静电噪声&#xff0c;直到某个瞬间——声音突然清晰起来。这个看似简单的动作背后&#x…...

Evo-1两阶段训练拆解:如何像“冻住”VLM backbone一样,保住你的模型语义不漂移?

Evo-1两阶段训练拆解&#xff1a;如何像“冻住”VLM backbone一样&#xff0c;保住你的模型语义不漂移&#xff1f; 当你尝试将一个预训练的视觉语言模型&#xff08;VLM&#xff09;适配到机器人控制任务时&#xff0c;是否遇到过这样的困境&#xff1a;模型在训练集上表现良…...

多进程和多线程的特点和区别

小编觉得&#xff0c;多进程和多线程的差异主要体现在以下三个方面&#xff1a; 1. 资源隔离 多线程属于同一进程&#xff0c;共享进程的堆内存和全局变量&#xff0c;因此线程间可以直接访问彼此共享的数据。但需要注意的是&#xff0c;每个线程也拥有自己私有的栈空间&…...

别再用subprocess了!Mojo原生FFI直连Python C API的5种安全模式,含CPython 3.11+PyPy兼容性矩阵表

第一章&#xff1a;Mojo 与 Python 混合编程案例 生产环境部署Mojo 作为新兴的系统级编程语言&#xff0c;原生兼容 Python 生态&#xff0c;支持在关键性能路径中无缝调用 Mojo 编译模块&#xff0c;同时复用 Python 的成熟工具链与部署基础设施。在生产环境中&#xff0c;典型…...

QMCDecode:3分钟快速解锁QQ音乐加密文件,实现跨平台音乐自由

QMCDecode&#xff1a;3分钟快速解锁QQ音乐加密文件&#xff0c;实现跨平台音乐自由 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac&#xff0c;qmc0,qmc3转mp3, mflac,mflac0等转flac)&#xff0c;仅支持macOS&#xff0c;可自动识别到QQ音乐下载目录…...

Java互联网大厂求职面试实录:Spring Boot、微服务与全栈技术深度解析

Java互联网大厂求职面试实录&#xff1a;Spring Boot、微服务与全栈技术深度解析 面试场景介绍 本文以互联网大厂面试为背景&#xff0c;通过严肃的面试官与搞笑的水货程序员“谢飞机”的对话&#xff0c;深入探讨Java求职者面试中常见的技术问题。涵盖Java SE、Jakarta EE、Sp…...

乙巳马年春联生成终端步骤详解:横批居中与上下联基线对齐的CSS技巧

乙巳马年春联生成终端步骤详解&#xff1a;横批居中与上下联基线对齐的CSS技巧 1. 引言&#xff1a;从创意到像素的挑战 想象一下&#xff0c;你正在开发一个充满年味的Web应用——一个能自动生成马年春联的“皇城大门”。AI模型已经为你写出了文采斐然的上下联和横批&#x…...

企业级数据治理最后一公里:Polars 2.0清洗审计日志、血缘追踪与合规性验证(GDPR-ready)

第一章&#xff1a;企业级数据治理最后一公里&#xff1a;Polars 2.0清洗审计日志、血缘追踪与合规性验证&#xff08;GDPR-ready&#xff09;在现代数据平台中&#xff0c;审计日志的结构化清洗与可追溯性验证常成为数据治理落地的瓶颈。Polars 2.0 凭借其零拷贝惰性执行引擎、…...