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

这篇具有很好参考价值的文章主要介绍了STC12C5A系列单片机内部 EEPROM 的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

STC12C5A系列单片机内部 EEPROM 的应用,单片机,嵌入式硬件
STC12C5A系列单片机内部 EEPROM 的应用,单片机,嵌入式硬件
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 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); 

运行结果如下:
STC12C5A系列单片机内部 EEPROM 的应用,单片机,嵌入式硬件文章来源地址https://www.toymoban.com/news/detail-605482.html

到了这里,关于STC12C5A系列单片机内部 EEPROM 的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STC15系列单片机学习6:外部中断

    外部中断,就是通过单片机IO引脚电平的变化触发的中断。 STC15系列单片机的外部中断源一共有5个,分别是外部中断0(INT0)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)、外部中断4(INT4);当然不是所有的STC15系列单片机都有着5个外部中断。 中断源 触发行为

    2024年03月12日
    浏览(173)
  • stc89C51系列单片机介绍

    STC89C51 是一款基于 8051 内核的高性价比单片机,由国内的 STC 微电子公司生产。STC89C51 系列单片机的特点是具有高速运行、丰富的外设接口、广泛的应用领域等优点。本文将从以下几个方面介绍 STC89C51 系列单片机。 STC89C51 系列单片机基于 80C51 内核,具有 1T 和 2T 两种不同的时

    2024年02月01日
    浏览(53)
  • STC89C51系列单片机与ADC0832通信

    ADC0832是一种常用的8位模数转换器,它可以将模拟信号转换为数字信号,以供单片机进行处理。STC89C51系列单片机是一款常见的8位单片机,具有强大的处理能力和丰富的外设资源,可以与ADC0832通信,实现模拟信号采集的功能。 本文将介绍如何使用STC89C51单片机与ADC0832通信,并

    2024年02月13日
    浏览(48)
  • STC8H系列单片机IAP实现不停电下载(通过串口)

    在使用串口往STC单片机烧录程序时,需要冷启动,先点击下载再上电。这样做有一定的缺点。首先,一些特殊的外围电路要求一直保持有电状态,有些客户需求我们能远程操控设备就可以升级程序,而不需要去现场断电设备。其次,频繁的断电上电操作也比较麻烦。 STC 单片

    2024年02月03日
    浏览(79)
  • STC15系列单片机:定时器/计数器16位自动重装载模式

    STC15系列单片机内部有5个16位定时器/计数器,分别是T0、T1、T2、T3、T4。 定时器与计数器,东西还是同一个东西,只是用法和功效不一样,就好比黄瓜,既可以内服也可以外敷,黄瓜还是那个黄瓜,作用就不一样了。 就拿T0来说,T0用于定时,那T0就是定时器,如果T0用于计数

    2024年01月25日
    浏览(53)
  • STC8H系列单片机入门教程之ADC基础知识(四)

    目录 一、A/D转换过程 二、ADC转换流程图 三、采样定理 四、ADC基本参数 4.1、分辨率 4.2、采样速率 4.3、转换时间 4.4、量程  4.5、最低有效位 五、静态参数 5.1、微分非线性 5.2、积分非线性 六、逐次逼近型模数转换器 七、ADC常用分压电路 八、示例代码 ADC即模数转换器,用来

    2024年04月11日
    浏览(59)
  • STC8H系列单片机入门教程之GPIO基本知识(一)

    IO口即输入输出口,STC8H系列单片机支持四种工作模式, 即准双向口、推挽输出、高阻输入、开漏输出,每个IO通过两个寄存器进行配置,如下图所示,注:n = 0,1,2,3,4,5,6,7。 PnM1 PnM0 I/O 口工作模式 0 0 准双向口(弱上拉),灌电流可达 20mA ,拉电流 150-270uA 0 1 推挽输出,强上拉

    2024年04月14日
    浏览(67)
  • 【期末不挂科-单片机考前速过系列P8】(第八章:21题速过AT89S51单片机的内部硬件结构)经典例题盘点(带图解析)

    前言 大家好吖,欢迎来到 YY 滴C++系列 ,热烈欢迎! 本章主要内容面向接触过C++的老铁 主要内容含: 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏 YY的《C++11》专栏 YY的《Linux》专栏 YY的《数据结构》专栏 YY的《C语言基础》专栏 YY的《初学者易

    2024年01月19日
    浏览(66)
  • 【期末不挂科-单片机考前速过系列P12】(第十二章:单片机的并行拓展例题)经典例题盘点(带图解析)

    前言 大家好吖,欢迎来到 YY 滴单片机系列 ,热烈欢迎! 本章主要内容面向接触过单片机的老铁 主要内容含: 欢迎订阅 YY 滴C++专栏!更多干货持续更新!以下是传送门! YY的《C++》专栏 YY的《C++11》专栏 YY的《Linux》专栏 YY的《数据结构》专栏 YY的《C语言基础》专栏 YY的《

    2024年01月19日
    浏览(95)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包