查看: 736|回复: 0

[经验] STC15f内部EEPROM

[复制链接]

该用户从未签到

发表于 2021-9-2 15:15:02 | 显示全部楼层 |阅读模式
分享到:
1.EEPROM我使用的时候查看了使用手册了解相关寄存器的使用(寄存器设置没看懂只是看着用)
查看例程只用擦除扇区函数,读和写操作,(都是可用的函数拿来就可以用),关闭IAP寄存器操作函数,在进行操作的时候初始化一边即可多次调用读写函数


我遇到的问题1.STC15F2K60S2只有2个扇区每个扇区512个字节,字节数1K,我当时不明白,在进行多个扇区读写失败 用IAP字节读时EEPROM起始扇区首地址: 0000h;用IAP字节读时EEPROM结束扇区末地址: 03FFh




2.不明白怎么调用读写函数
写入函数调用 void IapProgramByte( 扇区地址, 写入的数据)读写函数调用 unsigned char IapReadByte(想要读出数据的扇区地址) 总体而言开始之前我了解EEPROM的作用能做什么,然后我才想怎么开始使用,我看了看数据手册,看完我不懂,我随后百度查EERPOM的应用和初始化,以及函数的编写,最后是调用测试


在使用EEPROM 的时候操作步骤先开始对EEPROM进行初始化操作sfr IAP_DATA = 0xC2;  //IAP数据寄存器sfr IAP_ADDRH = 0xC3; //IAP地址寄存器高字节sfr IAP_ADDRL = 0xC4; //IAP地址寄存器低字节sfr IAP_CMD = 0xC5;     //IAP命令寄存器sfr IAP_TRIG = 0xC6;  //IAP命令触发寄存器sfr IAP_CONTR = 0xC7; //IAP控制寄存器#define CMD_IDLE 0     //空闲模式#define CMD_READ 1  //IAP字节读命令#define CMD_PROGRAM 2 //IAP字节编程命令#define CMD_ERASE 3       //IAP扇区擦除命令注具体看使用手册然后在进行编写函数操作擦除函数(函数的格式是固定的)void IapEraseSector(WORD addr){       IAP_CONTR= ENABLE_IAP;      //使能IAP       IAP_CMD= CMD_ERASE;                     //使能IAP命令       IAP_ADDRL= addr;                      //设置IAP低地址       IAP_ADDRH= addr >> 8;             //设置IAP高地址       IAP_TRIG= 0x5a;                      //写触发命令0x5a       IAP_TRIG= 0xa5;                      ///写触发命令0xa5       _nop_();                                  //等待写ISP/IAP/EEPROM数据完成       IapIdle();                        //关闭IAP功能}写入EEPROM区域数据函数(单字节写入)void IapProgramByte(WORD addr, BYTE dat){       IAP_CONTR= ENABLE_IAP; //使能IAP       IAP_CMD= CMD_PROGRAM; //设置IAP命令       IAP_ADDRL= addr;               //设置IAP低地址       IAP_ADDRH= addr >> 8;      //设置IPA高地址       IAP_DATA= dat;                   //写ISP/IAP/EEPROM数据       IAP_TRIG= 0x5a;            //写触发命令0x5a       IAP_TRIG= 0xa5;            //写触发命令0xa5       _nop_();                         //等待写ISP/IAP/EEPROM数据完成       IapIdle();                 //关闭IAP功能}读出单字节EEPROM区域数据unsigned char IapReadByte(WORD addr){       BYTE dat;                     //数据缓冲区       IAP_CONTR= ENABLE_IAP;        //使能IAP       IAP_CMD= CMD_READ;          //设置读取命令       IAP_ADDRL= addr;                //设置IAP低八位地址       IAP_ADDRH= addr >> 8;          //设置IAP高八位地址         IAP_TRIG= 0x5a;               //写触发命令(0x5a)       IAP_TRIG= 0xa5;               //写触发命令(0xa5)       _nop_();                       //等待ISP/IAP/EEPROM操作完成          dat= IAP_DATA;                //读ISP/IAP/EEPROM数据       IapIdle();                      //关闭IAP功能       return dat;                           //返回}关闭对IAP寄存器操作函数void IapIdle(){       IAP_CONTR= 0;                  //关闭IAP功能 寄存器读写开关       IAP_CMD= 0;                    //清除指令待机       IAP_TRIG= 0;                   //清空触发器寄存器       IAP_ADDRH= 0x80;               //地址寄存器高八位       IAP_ADDRL= 0;                             //地址寄存器低八位}


目的:
单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用内部EEPROM (EEPROM可以擦写100000)FLASHROM 等存储器来实现。在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通过IIC SPI 等接口来进行数据通信。这样不光会增加开发成本,同时在程序开发上也要花更多的心思。在STC 单片机中内置了EEPROM(其实是采用ISP/IAP技术读写内部FLASH 来实现EEPROM),正是因为有了IAP,从而可以使单片机可以将数据写入到程序存储器中,使得数据如同烧入的程序一样,掉电不丢失。当然写入数据的区域与程序存储区要分开来,以使程序不会遭到破坏。这样就节省了片外资源,使用起来也更加方便。
下面就详细介绍STC 单片机内置EEPROM 及其使用方法


2STC15F2K60S2系列单片机的内部结构图
STC15F2K60S2系列单片机的内部结构框图如下图所示,STC15F2K60S2系列单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时器、IO口、高速A/D转换、看门狗、UART高速异步串行通信口1/串行通信口2,CCP/PWM/PCA,一组高速同步串行端口SPI,片内高精度R/C时钟及高可靠复位等模块,STC15F2K60S2系列单片机几乎包含了数据采集和控制中的所有单元模块。


  EEPROM

回复

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条



手机版|小黑屋|与非网

GMT+8, 2025-1-11 23:38 , Processed in 0.106642 second(s), 15 queries , MemCache On.

ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

苏公网安备 32059002001037号

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.