基于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();//电子擦除只读储存器初始化函数
}