查看:
7950
|
回复:
3
|
STC15f内部EEPROM
|
|
发表于2018-12-29 13:37:22
|
显示全部楼层
1#
电梯直达
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 及其使用方法 2.STC15F2K60S2系列单片机的内部结构图 STC15F2K60S2系列单片机的内部结构框图如下图所示,STC15F2K60S2系列单片机中包含中央处理器(CPU)、程序存储器(Flash)、数据存储器(SRAM)、定时器、IO口、高速A/D转换、看门狗、UART高速异步串行通信口1/串行通信口2,CCP/PWM/PCA,一组高速同步串行端口SPI,片内高精度R/C时钟及高可靠复位等模块,STC15F2K60S2系列单片机几乎包含了数据采集和控制中的所有单元模块。 |
|