基于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();//电子擦除只读储存器初始化函数
 }
相关推荐
影阴2 分钟前
stm32实现CAN通讯测试
stm32·单片机·嵌入式硬件·hal
Silicore_Emma2 分钟前
芯谷科技—D2010:高效电机控制与保护的卓越之选
单片机·电机控制·工业自动化·电动工具调速·智能家电设备·绍兴芯谷·d2010
创界工坊工作室24 分钟前
DPJ-137 基于单片机的公交车自动报站系统设计(源代码+proteus仿真)
stm32·单片机·嵌入式硬件·51单片机·proteus
qs701639 分钟前
c直接调用FFmpeg命令无法执行问题
c语言·开发语言·ffmpeg
疯狂的豆包1 小时前
ESP32与MAX98357:打造智能收音机的奇妙之旅
单片机
啃硬骨头1 小时前
Aurix TC387 Ethernet代码解析之六_MAC的LwIP初始化3
单片机·嵌入式硬件
福尔摩斯张1 小时前
【实战】C/C++ 实现 PC 热点(手动开启)+ 手机 UDP 自动发现 + TCP 通信全流程(超详细)
linux·c语言·c++·tcp/ip·算法·智能手机·udp
不想写笔记1 小时前
算法 C语言 冒泡排序
c语言·笔记·算法·排序算法
历程里程碑1 小时前
C++ 4:内存管理
java·c语言·开发语言·数据结构·c++·笔记·算法
2301_789015621 小时前
C++:多态(面向对象的主要手段之一)
c语言·开发语言·c++·多态