📄 eeprom.c
字号:
/**************************************************************************************
* 子程序:底层程序 *
* 功能:内部EEPROM IAP功能,存放闹钟值; *
* 调用子程序; *
* *
***************************************************************************************/
#include <intrins.h>
# include "stc12c5a60s2.h"
#define uchar unsigned char
#define uint unsigned int
////以下是ISP/IAP操作时间宏定义选项
#define EN_IAP 0x83 //系统时钟 ≤ 12MHz//
/****************【IAP功能使用时调用的3个函数】****************/
uchar R_EROM(uchar n,uint x); //读第n扇区,第x字节的数据
void W_EROM(uchar n,uint x,uchar dat); //向第n扇区,第x字节写入数据dat
void C_EROM(uchar n); //擦除第n扇区
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:禁止IAP操作,清IAP相关寄存器┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void Q0()
{
IAP_CONTR = 0;
IAP_CMD = 0;
IAP_TRIG = 0;
IAP_ADDRH = 0x80;
IAP_ADDRL = 0;
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:读一字节入口:第n扇区,第x字节 出口:dat┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
uchar R_EROM(uchar n,uint x)
{
uchar dat;
uint addr;
addr =(n-1)*0x0200 + x-1;
IAP_CONTR = EN_IAP;
IAP_CMD = 1; //允许读取EEPROM
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
dat = IAP_DATA;
Q0();
return dat;
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:写一字节入口:第n扇区,第x字节,待写入数据dat┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void W_EROM(uchar n,uint x,uchar dat)
{
uint addr;
addr = (n-1)*0x0200 + x-1;
IAP_CONTR = EN_IAP;
IAP_CMD = 2; //允许编写EEPROM
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_DATA = dat;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
Q0();
}
/*┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈函数:擦除某一扇区 入口:第n扇区 ┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈┈*/
void C_EROM(uchar n)
{
uint addr;
addr = (n-1)*0x0200;
IAP_CONTR = EN_IAP;
IAP_CMD = 3; //允许擦除EEPROM
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;
_nop_();
Q0();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -