#ifndef _EEPROM_H_
#define _EEPROM_H_
#include<STC15W408AS.h>
#define u16 unsigned int
#define u8 unsigned char
//STCµ¥Æ¬»úIAP¶¨Òå
//sfr IAP_DATA=0xC2;
//sfr IAP_ADDRH=0xC3;
//sfr IAP_ADDRL=0xC4;
//sfr IAP_CMD=0xC5;
//sfr IAP_TRIG=0xC6;
//sfr IAP_CONTR=0xC7;
#define ISP_IAP_BYTE_READ 1 //×Ö½Ú¶Á¡
#define ISP_IAP_BYTE_PROGRAM 2//×Ö½Ú±à³Ì
#define ISP_IAP_SECTOR_ERASE 3//ÉÈÇø²Á³ý
#define WAIT_TIME 0//µÈ´ýʱ¼ä
#define ENABLE_IAP 0x82
u8 Read_IAP(u16 Adres);
extern void Write_IAP(u8 Value,u16 Adres);
extern void Sector_Erase_IAP(u16 Sector);
extern void DISAble_IAP(void);
#endif
#include"eeprom.h"
#include <intrins.h>
//IAP´¦Àí²¿·Ö¿ªÊ¼
//¹Ø±ÕIAP¹¦ÄÜ
void Disable_IAP(void)
{
IAP_CONTR=0;
IAP_CMD=0;
IAP_TRIG=0;
IAP_ADDRH=0x80;
IAP_ADDRL=0x00;
}
//¶ÁÈ¡IAPÊý¾Ý²¢·µ»Ø
//ADRES=ÐèÒª¶Á³öÊý¾ÝµÄµØÖ·
//µ÷Ó㺹رÕIAP¹¦Äܺ¯Êý
u8 Read_IAP(u16 Adres)
{
u8 Value=0;
IAP_CONTR=ENABLE_IAP;//´ò¿ªIAP¹¦ÄÜ
IAP_CMD=ISP_IAP_BYTE_READ;//¶ÁIAP
IAP_ADDRL=Adres;//È¡µÍλµØÖ·
IAP_ADDRH=Adres>>8;//È¡¸ßλµØÖ·
EA=0;//¹ØÖжÏ
IAP_TRIG=0x5A;//´¥·¢¼Ä´æÆ÷
IAP_TRIG=0xA5;//IAP´¥·¢Æô¶¯
_nop_();
Value=IAP_DATA;//¶ÁÈ¡×Ö½ÚÊý¾Ý
EA=1;
Disable_IAP();//¹Ø±ÕIAP¹¦ÄÜ
return Value;
}
//×Ö½Ú±à³Ì
//value=ÐèҪд½øIAPÄÚ²¿µÄÊý¾Ý
//adres=ÐèҪдÈëÊý¾ÝµÄµØÖ·
//µ÷ÓùرÕIAP¹¦Äܺ¯Êý
void Write_IAP(u8 Value,u16 Adres)
{
IAP_CONTR=ENABLE_IAP;//´ò¿ªIAP¹¦ÄÜ
IAP_CMD=ISP_IAP_BYTE_PROGRAM;//×Ö½Ú±à³Ì
IAP_ADDRL=Adres;
IAP_ADDRH=Adres>>8;//È¡µØַλ
IAP_DATA=Value;//дÈëÊý¾Ý
EA=0;
IAP_TRIG=0x5A; //´¥·¢IAP¹¦ÄÜ
IAP_TRIG=0xA5;
_nop_();
EA=1;
Disable_IAP();//¹Ø±ÕIAP¹¦ÄÜ
}
//²Á³ýÉÈÇø¹¦ÄÜ
//Sector=ÐèÒª²Á³ýµÄÉÈÇøµØÖ·
//µ÷Óú¯Êý£º¹Ø±ÕIAP¹¦Äܺ¯Êý
void Sector_Erase_IAP(u16 Sector)
{
IAP_CONTR=ENABLE_IAP;
IAP_CMD=ISP_IAP_SECTOR_ERASE;
IAP_ADDRL=Sector;
IAP_ADDRH=Sector>>8;
EA=0;
IAP_TRIG=0x5A;
IAP_TRIG=0xA5;
_nop_();
EA=1;
Disable_IAP();
}
主函数里关于这个部分:
js=Read_IAP(0x3000);
delayms(10);
js++;
Sector_Erase_IAP(0x3000);
delayms(10);
Write_IAP(js,0x3000);
delayms(10);
js1=Read_IAP(0x3000);
senddata(js1);
搞了一天没搞定啊 大侠们帮我看看问题在哪啊 MCU是STC15W408AS 停电后 数据从0开始,按道理应该接着后边啊。证明没有保存进去。 |