基于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();//电子擦除只读储存器初始化函数
 }
相关推荐
GilgameshJSS1 小时前
【学习K230-例程21】GT6700-UDP-Client
网络·python·单片机·网络协议·学习·udp
平平无奇。。。2 小时前
解密完全二叉树顺序存储之堆结构
c语言·数据结构·visual studio
溟洵4 小时前
【 C/C++ 算法】入门动态规划-----一维动态规划基础(以练代学式)
c语言·c++·算法
晨非辰5 小时前
#C语言——刷题攻略:牛客编程入门训练(十二):攻克 循环控制(四)、循环输出图形(一),轻松拿捏!
c语言·开发语言·经验分享·笔记·其他·学习方法·visual studio
深圳市尚想信息技术有限公司5 小时前
APT32F0042F6P6 32位微控制器(MCU)单片机 APT爱普特微电子 芯片核心解析
单片机·集成电路·电子元器件·爱普特
沐欣工作室_lvyiyi5 小时前
基于K210和STM32的小区门禁系统(论文+源码)
stm32·单片机·嵌入式硬件·毕业设计·人脸识别·k210·计算机毕业设计
月阳羊8 小时前
【硬件-笔试面试题-93】硬件/电子工程师,笔试面试题(知识点:波特图)
java·经验分享·单片机·嵌入式硬件·面试
Wave84516 小时前
STM32--时间戳,BKB,RTC
stm32·单片机·嵌入式硬件
m0_5557629017 小时前
项目1——单片机程序审查,控制系统流程图和时序图
单片机·mongodb·流程图