基于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();//电子擦除只读储存器初始化函数
 }
相关推荐
一路往蓝-Anbo17 分钟前
【第14期】裸机中断优先级:抢占与嵌套的逻辑
c语言·开发语言·stm32·单片机·物联网
贪玩成性44 分钟前
LED5050驱动程序,高效率
单片机·mcu
d111111111d1 小时前
STM32 电源管理模式全解析:低功耗场景该如何选型?
笔记·stm32·单片机·嵌入式硬件·学习
M158227690551 小时前
串口设备联网利器!SG-TCP232-110 单通道串口服务器,让老旧设备秒变智能终端
运维·服务器·单片机
雅欣鱼子酱2 小时前
Type-C受电端芯片ECP5702演示:串口发送电压电流,给外部MCU读取
c语言·人工智能·单片机·嵌入式硬件·芯片·电子元器件
文sir.2 小时前
任务管理--FreeRTOS
单片机·嵌入式硬件·freertos
谁刺我心2 小时前
stm32cubemx外部中断按钮测试
stm32·单片机·嵌入式硬件
DIY机器人工房3 小时前
简单理解:M483SIDAE这款 MCU(微控制器)的核心规格参数
单片机·嵌入式硬件·嵌入式·diy机器人工房·m483sidae
czhaii3 小时前
基于AI8051U的无人机/四轴飞行器 | 全部开源,源程序,SCH/PCB
单片机
福楠3 小时前
从C到C++ | 内存管理
c语言·c++