基于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();//电子擦除只读储存器初始化函数
 }
相关推荐
花落已飘32 分钟前
STM32中实现shell控制台(shell窗口输入实现)
stm32·单片机·嵌入式硬件
牵牛老人3 小时前
Qt处理USB摄像头开发说明与QtMultimedia与V4L2融合应用
stm32·单片机·qt
宇钶宇夕4 小时前
针对工业触摸屏维修的系统指南和资源获取途径
单片机·嵌入式硬件·自动化
黑听人4 小时前
【力扣 简单 C】70. 爬楼梯
c语言·leetcode
杜子不疼.4 小时前
二分查找,乘法口诀表,判断闰年,判断素数,使用函数实现数组操作
c语言
和风化雨4 小时前
stm32的三种开发方式
stm32·单片机·嵌入式硬件
kanhao1005 小时前
三态逻辑详解:单片机GPIO、计算机总线系统举例
单片机·嵌入式硬件
竹照煜_ysn7 小时前
STM32
stm32·单片机·嵌入式硬件
蓬荜生灰8 小时前
永磁无刷电机旋转原理
单片机·嵌入式硬件