unsigned int Temp_Buf[3]; //定義緩存:
Read_Flash_Message(ks_Addr,Temp_Buf, 3);//讀取:函數是:void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len);
Save_Flash_Message(ks_Addr,Temp_Buf, 3);//保存 函數是 :void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len);
//保存內容到Flash
void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len);
//從Flash讀取內容
void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len);
//讀取某地址一個字節
unsigned char Read_One_Byte(unsigned int addr);
void Erase_IAP(unsigned int addr);
void Write_One_Byte(unsigned int addr,unsigned char dat);
#endif
以下為.c文件
#include "IAP_EEPROM.h"
//#include<Uart_1.h> //用來CLI交互
//STC15W4K48S4 單片機,可以使用IAP命令擦寫內部Flash
//起始地址 0X0000 結束 0X27FF 其中,512Byte一個扇區
//關閉IAP功能
void Close_IAP(void)
{
IAP_CONTR = 0;
IAP_CMD = 0;
IAP_TRIG = 0;
IAP_ADDRH = 0;
IAP_ADDRL = 0;
}
//擦除某地址所在的扇區
void Erase_IAP(unsigned int addr)
{
IAP_CONTR = 0x82;//允許IAP操作,設置IAP操作速度
IAP_CMD = 0x03;//扇區擦除命令
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;//地址賦值
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;//觸發命令
_nop_();_nop_();_nop_();
Close_IAP();//清空IAP操作寄存器等
}
//在某地址寫入一個字節
void Write_One_Byte(unsigned int addr,unsigned char dat)
{
IAP_CONTR = 0x82;//允許IAP操作,設置IAP操作速度
IAP_CMD = 0x02;//IAP寫命令
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;//地址賦值
IAP_DATA = dat;//更新寫寄存器
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;//觸發
_nop_();
Close_IAP();//清空IAP操作寄存器等
}
//讀取某地址一個字節
unsigned char Read_One_Byte(unsigned int addr)
{
unsigned char dat=0;//定義一個待返回的數據
IAP_CONTR = 0x82;//允許IAP
IAP_CMD = 0x01;//IAP讀命令
IAP_ADDRL = addr;
IAP_ADDRH = addr >> 8;//地址賦值
IAP_TRIG = 0x5a;
IAP_TRIG = 0xa5;//觸發
_nop_();_nop_();_nop_();_nop_();
dat = IAP_DATA;
Close_IAP();//清空IAP操作寄存器等
return dat;
}
//保存內容到Flash
void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len)
{
unsigned int i=0;
Erase_IAP(Addr);//擦除對應扇區
if(Len >= 511)
Len = 511;
Write_One_Byte(Addr,Len>>8);//長度寫入首地址
Write_One_Byte(Addr+1,(Len&0X00FF));//長度寫入首地址
for(i=0;i<Len;i++) //順序存儲有效信息
{
Write_One_Byte((Addr+2+i),Buf[i]);
}
}
//從Flash讀取內容
void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len)
unsigned int Temp_Buf[3]; //定義緩存:
Read_Flash_Message(ks_Addr,Temp_Buf, 3);//讀取:函數原型是:void Read_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int *Len);