
关于STC单片机内部EEPROM程序的问题
unionunion_temp16{unsignedintun_temp16;unsignedcharun_temp8[2];}my_unTemp16;//读以字节,调用...
union union_temp16
{
unsigned int un_temp16;
unsigned char un_temp8[2];
}my_unTemp16;
//读以字节,调用前请打开IAP功能
unsigned char EEPROM_ReadOneByte(unsigned int Addr)
{
IAP_DATA = 0;
IAP_CONTR = ENABLE_ISP; //打开IAP功能,设置flash操作等待时间
IAP_CMD = ISP_IAP_BYTE_READ;
my_unTemp16.un_temp16 = Addr;
IAP_ADDRH = my_unTemp16.un_temp8[0];
IAP_ADDRL = my_unTemp16.un_temp8[1];
// EA = 0; //关中断
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
// EA = 1;
IAP_Disable();
return (IAP_DATA);
}
//字节变成,调用前需要先打开IAP功能
void EEPROM_WriteOneByte(unsigned int Addr, unsigned char Data)
{
IAP_CONTR = ENABLE_ISP;//打开IAP功能,设置flash等待时间
IAP_CMD = ISP_IAP_BYTE_PROGRAM;///设置IAP/ISP/EEPROM字节编程模式
my_unTemp16.un_temp16 = Addr;
IAP_ADDRH = my_unTemp16.un_temp8[0];
IAP_ADDRL = my_unTemp16.un_temp8[1];
IAP_DATA = Data;
// EA = 0;
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
// EA = 1;
IAP_Disable();
}
void Sector_Erase(unsigned int Addr)
{
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
IAP_CMD = ISP_IAP_SECTOR_ERASE; //IAP/ISP/EEPROM 扇区擦除命令
my_unTemp16.un_temp16 = Addr;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
//EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}
//关闭IAP功能,清相关的特殊功能寄存器,使CPU处于安全状态
//一次连续的IAP操作完成之后,建议关闭IAP功能,不需要每次都关闭
void IAP_Disable(void)
{
IAP_CONTR = 0;
IAP_CMD = 0;
IAP_TRIG = 0;
IAP_ADDRH = 0xff;
IAP_ADDRL = 0xff;
}
能帮我详细的写一下每句的注释吗?还有每个函数的功能?谢谢了
EEPROM是内部的存储器 展开
{
unsigned int un_temp16;
unsigned char un_temp8[2];
}my_unTemp16;
//读以字节,调用前请打开IAP功能
unsigned char EEPROM_ReadOneByte(unsigned int Addr)
{
IAP_DATA = 0;
IAP_CONTR = ENABLE_ISP; //打开IAP功能,设置flash操作等待时间
IAP_CMD = ISP_IAP_BYTE_READ;
my_unTemp16.un_temp16 = Addr;
IAP_ADDRH = my_unTemp16.un_temp8[0];
IAP_ADDRL = my_unTemp16.un_temp8[1];
// EA = 0; //关中断
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
// EA = 1;
IAP_Disable();
return (IAP_DATA);
}
//字节变成,调用前需要先打开IAP功能
void EEPROM_WriteOneByte(unsigned int Addr, unsigned char Data)
{
IAP_CONTR = ENABLE_ISP;//打开IAP功能,设置flash等待时间
IAP_CMD = ISP_IAP_BYTE_PROGRAM;///设置IAP/ISP/EEPROM字节编程模式
my_unTemp16.un_temp16 = Addr;
IAP_ADDRH = my_unTemp16.un_temp8[0];
IAP_ADDRL = my_unTemp16.un_temp8[1];
IAP_DATA = Data;
// EA = 0;
IAP_TRIG = 0x5A;
IAP_TRIG = 0xA5;
_nop_();
// EA = 1;
IAP_Disable();
}
void Sector_Erase(unsigned int Addr)
{
IAP_CONTR = ENABLE_ISP; //打开IAP 功能, 设置Flash 操作等待时间
IAP_CMD = ISP_IAP_SECTOR_ERASE; //IAP/ISP/EEPROM 扇区擦除命令
my_unTemp16.un_temp16 = Addr;
IAP_ADDRH = my_unTemp16.un_temp8[0]; //设置目标单元地址的高8 位地址
IAP_ADDRL = my_unTemp16.un_temp8[1]; //设置目标单元地址的低8 位地址
//EA = 0;
IAP_TRIG = 0x5A; //先送 5Ah,再送A5h 到ISP/IAP 触发寄存器,每次都需如此
IAP_TRIG = 0xA5; //送完A5h 后,ISP/IAP 命令立即被触发起动
_nop_();
//EA = 1;
IAP_Disable(); //关闭IAP 功能, 清相关的特殊功能寄存器,使CPU 处于安全状态,
//一次连续的IAP 操作完成之后建议关闭IAP 功能,不需要每次都关
}
//关闭IAP功能,清相关的特殊功能寄存器,使CPU处于安全状态
//一次连续的IAP操作完成之后,建议关闭IAP功能,不需要每次都关闭
void IAP_Disable(void)
{
IAP_CONTR = 0;
IAP_CMD = 0;
IAP_TRIG = 0;
IAP_ADDRH = 0xff;
IAP_ADDRL = 0xff;
}
能帮我详细的写一下每句的注释吗?还有每个函数的功能?谢谢了
EEPROM是内部的存储器 展开
若以下回答无法解决问题,邀请你更新回答
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询