基于STC12C5A60S2系列1T 8051单片机EEPROM应用

基于STC12C5A60S2系列1T 8051单片机EEPROM应用

  • STC12C5A60S2系列1T 8051单片机管脚图
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置
  • STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍
  • STC12C5A60S2系列1T 8051单片机EEPROM介绍
  • 基于STC12C5A60S2系列1T 8051单片机EEPROM的特殊功能寄存器列表
    • 基于STC12C5A60S2系列1T 8051单片机EEPROM用到的特殊功能寄存器
      • ISP/IAP数据寄存器IAP_DATA
      • ISP/IAP地址寄存器IAP_ADDRH和IAP_ADDRL
      • ISP/IAP命令寄存器IAP_CMD
      • ISP/IAP命令触发寄存器IAP_TRIG
      • ISP/IAP控制寄存器IAP_CONTR
      • ISP/IAP功率控制寄存器PCON
      • 基于STC12C5A60S2系列1T 8051单片机EEPROM掉电保存数据

STC12C5A60S2系列1T 8051单片机管脚图

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式及配置

STC12C5A60S2系列1T 8051单片机I/O口各种不同工作模式介绍

STC12C5A60S2系列1T 8051单片机EEPROM介绍

基于STC12C5A60S2系列1T 8051单片机EEPROM的特殊功能寄存器列表

基于STC12C5A60S2系列1T 8051单片机EEPROM用到的特殊功能寄存器

ISP/IAP数据寄存器IAP_DATA

作用:用来设置STC12C5A60S2系列1T 8051单片机EEPROM读写数据

ISP/IAP地址寄存器IAP_ADDRH和IAP_ADDRL

作用:用来设置STC12C5A60S2系列1T 8051单片机EEPROM高八位低八位地址寄存器

ISP/IAP命令寄存器IAP_CMD

作用:用来设置STC12C5A60S2系列1T 8051单片机EEPROM待机、读、写、擦除操作

ISP/IAP命令触发寄存器IAP_TRIG


作用:用来设置STC12C5A60S2系列1T 8051单片机EEPROM命令触发

ISP/IAP控制寄存器IAP_CONTR

作用:用来设置STC12C5A60S2系列1T 8051单片机EEPROM以下功能

(1)、读、写、擦除使能

(2)、选择从用户应用程序区或系统ISP监控程序区启动EEPROM

(3)、软件系统复位

(4)、读、写、擦除是否成功标志位

(5)、写入数据给EEPROM等待时间

ISP/IAP功率控制寄存器PCON

作用:用来检测STC12C5A60S2系列1T 8051单片机EEPROM工作电压

基于STC12C5A60S2系列1T 8051单片机EEPROM掉电保存数据

javascript 复制代码
#include <stc12c5a60s2.h>
#include <intrins.h>
//#include <uart.h>
#define uchar unsigned char//自定义无符号字符型为uchar
#define uint unsigned int//自定义无符号整数型为uint
#define IAP_ADDRESS 0x0000;//自定义EEPROM扇区地址
//void UartInit();//串口初始化函数
void EepromInit();//电子擦除只读储存器初始化函数
void ReadEepromByte();//读电子擦除只读储存器字节函数
void WriteByteToEeprom();//写字节给电子擦除只读储存器函数
void EraseEepromSectorByte();//擦除电子擦除只读储存器扇区字节函数
 void main()//主函数
{
  uchar Data;//声明数据变量
  //UartInit();//串口初始化函数
  //printf("MCU EEPROM TEXTr\n\");//串口打印输出
  //Data = ReadEepromByte(IAP_ADDRESS);//从EEPROM第1扇区0000地址的ISP/IAP数据寄存器IAP_DATA读出数据赋给数据变量
  //printf("Data = 0x%bxr\n\",Data);//串口打印输出从EEPROM第1扇区0000地址的ISP/IAP数据寄存器IAP_DATA读出的数据
  EraseEepromSectorByte(IAP_ADDRESS);//擦除EEPROM第1扇区0000地址的ISP/IAP数据寄存器IAP_DATA内的数据
  WriteByteToEeprom(IAP_ADDRESS,uchar Value);//往EEPROM第1扇区0000地址的ISP/IAP数据寄存器IAP_DATA写数据 Value为写入的数据
  Data = ReadEepromByte(IAP_ADDRESS);//从EEPROM第1扇区0000地址的ISP/IAP数据寄存器IAP_DATA读出数据赋给数据变量
  //printf("Data = 0x%bxr\n\",Data);//串口打印输出从EEPROM第1扇区0000地址的ISP/IAP数据寄存器IAP_DATA读出的数据
  while(1)//主循环
 {
  
  }
 }
 /******
 void UartInit()//串口初始化函数
{
  PCON &= 0x7f;//
  SCON = 0x50;//
  TMOD &= 0x0f;//
  TMOD = 0x20;//
  TH1 = 0xfd;//
  TL1 = 0xxf0xf 
  ET1 = 0;//
  ES = 1;//
  TR1 = 1;//
 }
 ******/
 void EepromInit();//电子擦除只读储存器初始化函数
{
  IAP_CONTR = 0;//禁止ISP/IAP控制寄存器控制EEPROM
  IAP_CMD   = 0;//禁止ISP/IAP命令寄存器控制EEPROM
  IAP_TRIG  = 0;//禁止ISP/IAP命令触发寄存器控制EEPROM
  IAP_ADDRH = 0x80;//设置数据指针指向EEPROM无储存区
  IAP_ADDRL = 0;//EEPROM低八位地址寄存器清0
 }
 uchar ReadEepromByte(uint Address);//读电子擦除只读储存器字节函数
{
  uchar Value;//声明数据变量
  IAP_CONTR = 0x82;//允许ISP/IAP控制寄存器控制EEPROM
  IAP_CMD   = 0x01;//允许ISP/IAP命令寄存器从EEPROM里读字节
  IAP_ADDRH = Address >> 8;//保存EEPROM高八位数据
  IAP_ADDRL = Address;//保存EEPROM低八位数据
  IAP_TRIG  = 0x5a;//禁止ISP/IAP命令触发寄存器控制EEPROM
  IAP_TRIG  = 0xa5;//禁止ISP/IAP命令触发寄存器控制EEPROM
  _nop_();//晶振频率为12MHz时 延时1us
  Value = IAP_DATA;//从EEPROM的ISP/IAP数据寄存器IAP_DATA读出数据赋给数据变量
  EepromInit();//电子擦除只读储存器初始化函数
  return Value;//返回从EEPROM的ISP/IAP数据寄存器IAP_DATA读出的数据
 }    
 void WriteByteToEeprom(uint Address,uchar Value);//写字节给电子擦除只读储存器函数
{
  IAP_CONTR = 0x82;//允许ISP/IAP控制寄存器控制EEPROM
  IAP_CMD   = 0x02;//允许ISP/IAP命令寄存器往EEPROM写字节
  IAP_ADDRH = Address >> 8;//保存EEPROM高八位数据
  IAP_ADDRL = Address;//保存EEPROM低八位数据
  IAP_DATA = Value;//把数据变量所带数据写给EEPROM的ISP/IAP数据寄存器IAP_DATA
  IAP_TRIG  = 0x5a;//禁止ISP/IAP命令触发寄存器控制EEPROM
  IAP_TRIG  = 0xa5;//禁止ISP/IAP命令触发寄存器控制EEPROM
  _nop_();//晶振频率为12MHz时 延时1us
  EepromInit();//电子擦除只读储存器初始化函数
 }
 void EraseEepromSectorByte(uint Address);//擦除电子擦除只读储存器扇区字节函数
{
  IAP_CONTR = 0x82;//允许ISP/IAP控制寄存器控制EEPROM
  IAP_CMD   = 0x03;//允许ISP/IAP命令寄存器擦除EEPROM扇区字节
  IAP_ADDRH = Address >> 8;//保存EEPROM高八位数据
  IAP_ADDRL = Address;//保存EEPROM低八位数据
  IAP_TRIG  = 0x5a;//禁止ISP/IAP命令触发寄存器控制EEPROM
  IAP_TRIG  = 0xa5;//禁止ISP/IAP命令触发寄存器控制EEPROM
  _nop_();//晶振频率为12MHz时 延时1us
  EepromInit();//电子擦除只读储存器初始化函数
 }
相关推荐
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
FreakStudio11 天前
W55MH32L-EVB 上手测评:硬件 TCP/IP 加持的以太网单片机,MicroPython 零门槛开发
python·单片机·嵌入式·大学生·面向对象·并行计算·电子diy·电子计算机
LDR00616 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
✎ ﹏梦醒͜ღ҉繁华落℘16 天前
单片机基础知识---stm32单片机的优先级
stm32·单片机·mongodb
Luminous.16 天前
C语言--day30
c语言·开发语言
玖玥拾16 天前
C/C++ 数据结构(七)栈、容器适配器
c语言·数据结构·c++··容器适配器
謓泽16 天前
C语言不是语法,是通往机器的地图。
c语言·开发语言
不会C语言的男孩16 天前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
zd84510150016 天前
RS485 总线详解
单片机·嵌入式硬件
2601_9516438816 天前
C语言长文整理,关键字和数据类型
c语言·数据类型·关键字·嵌入式开发·格式化输出