- 打卡等级:偶尔看看III
- 打卡总天数:45
- 最近打卡:2025-12-16 15:39:07
超级版主
- 积分
- 2577
|
STC8H1K08-36I-TSSOP20测试 内部11.0592 MHz
EEPROM无法掉电保存 请指教
void IapIdle()
{
IAP_CONTR = 0; //关闭IAP功能
IAP_CMD = 0; //清除命令寄存器
IAP_TRIG = 0; //清除触发寄存器
IAP_ADDRH = 0x80; //将地址设置到非IAP区域
IAP_ADDRL = 0;
// EA = 1;
}
char IapRead(int addr)
{
char dat;
EA = 0;
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 11; //设置等待参数12MHz
IAP_CMD = 1; //设置IAP读命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //
_nop_(); //
_nop_(); //
_nop_(); //
dat = IAP_DATA; //读IAP数据
IapIdle(); //关闭IAP功能
EA = 1;
return dat;
}
void IapProgram(int addr, char dat)
{
EA = 0;
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 12; //设置等待参数12MHz
IAP_CMD = 2; //设置IAP写命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_DATA = dat; //写IAP数据
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //
_nop_(); //
_nop_(); //
_nop_(); //
IapIdle(); //关闭IAP功能
EA = 1;
}
void IapErase(int addr)
{
EA = 0;
IAP_CONTR = 0x80; //使能IAP
IAP_TPS = 11; //设置等待参数12MHz
IAP_CMD = 3; //设置IAP擦除命令
IAP_ADDRL = addr; //设置IAP低地址
IAP_ADDRH = addr >> 8; //设置IAP高地址
IAP_TRIG = 0x5a; //写触发命令(0x5a)
IAP_TRIG = 0xa5; //写触发命令(0xa5)
_nop_(); //
_nop_(); //
_nop_(); //
_nop_(); //
IapIdle(); //关闭IAP功能
EA = 1;
}
/********************************************************************
结束
*********************************************************************/
void Save_LocalAddr()
{
// unsigned char temp;
IapErase(EE_address_Motor);
//temp=IapRead(EE_address_Motor);
IapProgram(EE_address_Motor,LocalAddr);
// MotorID=IapRead(EE_address_Motor);
}
void Read_LocalAddr()
{
MotorID[0]=IapRead(EE_address_Motor);
if(MotorID[0]<1)
{
MotorID[0]=1;
}
LocalAddr=MotorID[0];
//IapErase(0x0400);
//P0 = IapRead(0x0400); //P0=0xff
//IapProgram(0x0400, 0x12);
//P1 = IapRead(0x0400); //P1=0x12
}
|
|