|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
各位大佬,关于STC这芯片的EEPROM在进行操作时,如果不按照扇区顺序操作控擦写,能不能有效存入数据?例如:开机初始化时使用第二扇区进行擦写,后面需要设置时使用第一扇区擦写存数据,我经过测试发现第二扇区不能存数据,如下:" ^/ o. O* l9 F+ w) ^
void main(void)9 h/ g5 c+ S* O- Z3 l- d6 H
{
. q, J( h7 T% K4 {/ c- t/ S- U7 P' h- A( J G6 j2 w; Z
IO_Init();
( w6 ~5 M( i3 X% P/ `Delay(100);
( |- w9 ]! a- X) {3 L! p9 a$ |5 _' U
TempSum=IapRead(0x0001);//读第一扇区
c+ \% r, U# O; v) y, ITempSum=TempSum<<8|IapRead(0x0002);
% T7 @% t( E7 E2 i' lADsodo_flag=IapRead(0x0203);//读第二扇区
6 Z8 ~1 s1 f' c& ^& s* Vcamp_dataFlag=ADsodo_flag;7 `, @4 q# z# y# s8 Q
TESample=IapRead(0x0404);//读第三扇区5 o* s l+ l& h' i3 c" Y
TESample=camp_data<<8|IapRead(0x0405);0 v- f% I, f0 T e4 ~
Delay(500);
% b" y' |6 S. S6 S' O2 ITimer0_Init();
' U. `2 c" D" f0 |
8 ]/ K1 ^1 l+ s# D8 \/ e
H* @' g8 w+ T/ U8 ?0 O while(1)- d7 E$ ~& m$ E' A% l) r+ z' o J8 T
{, K' }. ^" F4 p5 V2 O- ?' `8 d
3 c" }6 t! D5 n; r' ^8 O& N8 K
2 w4 U5 E% k! L! P' e) |- c if(AD_cmaxizuFlag_1)/ Z8 |' {! h4 ]7 _/ t
{
9 D+ e" ^. C& x$ y" f& N TESample=tertpe-Set_temp;! L. J: v; ?1 F
4 f. @3 G9 l( g% z3 h7 J0 k/ { AD_cmaxizuFlag_1=0;4 n8 u9 F8 G# g( t3 |
}
\0 ~- P7 a% P( U else3 a: [; k4 T7 l, o0 e
if(AD_cmaxizuFlag_2)
& C0 I" s x( C% F4 [ {
" d; I) D" ^4 V+ o* _ TESample=Set_temp-tertpe;
. x1 E" s5 d8 Q" b$ d& }! t0 t6 ~" X S3 K
AD_cmaxizuFlag_2=0;
0 ~1 Z- H6 a4 |1 x0 A" n }( l! y' k' P9 l
9 o# J: P" Y7 _+ j* \: I1 T
if(EepromFlag_1==2). _- Q/ D) s7 c- ], |
{
8 ?5 q, `. U7 l' D IapErase(0x0000);//擦除第一扇区
- _: g8 ?& ~. v( }( K' p. A# O# | IapProgram(0x0001,TempSum>>8);//写入第一扇区7 K' U, v7 T {7 n
IapProgram(0x0002,TempSum);
8 y3 s) F. j3 }# _- G9 @1 } EepromFlag_1=0;4 C8 Q o) o" s$ A1 H
}; V+ v1 X5 |. W
7 X/ L' T( }7 \7 ?8 @6 X s if(EepromFlag_2==2)
2 j) G" z' ]( k% x O( Z3 s {% ^+ m9 L) m* ?1 m7 p% y6 Z
% ?% M* T: L" V# n( F; y4 l IapErase(0x0200);//擦除第二扇区
" a$ ]4 J- T) n& Y$ f3 G% K& G IapProgram(0x0203,ADsodo_flag);//写入第二扇区
7 Q* H" l; M; d2 ]0 p8 c( K) U IapErase(0x0400);//擦除第三扇区
/ C! W; h k2 j8 i6 v# @( p# A IapProgram(0x0404,TESample>>8);//写入第三扇区/ C/ J3 h7 W' J: b0 O
IapProgram(0x0405,TESample);( y( i% e; H. L' E' b/ d' v* b
EepromFlag_2=0;
% W( {9 @5 m$ c! O5 |7 \ }' @. y& X9 _8 p, |0 k
if(Eepromflag_A)//开机按键初始化第一次写入5 a* j @) I% G+ @$ p) i `& C N
{, p$ u9 |9 m7 {& b3 c- M! G
IapErase(0x0200);//擦除第二扇区7 `% }8 [7 J0 K$ s, N" V8 k
IapProgram(0x0203,ADsodo_flag);//写入第二扇区' }/ r9 P* K3 ?5 c9 i& X
Eepromflag_A=0;
: H& n0 h0 J# ?; Z8 d7 C9 L9 a}7 [2 f; Y# n0 i5 r% X6 _
}/ q" T+ k, ~0 D p% i: q' C# f! ~
}$ M" R$ g1 b& }: G& w( H# a
! Y4 d9 _+ M0 x; A) t }* D. C1 K6 ?; N: X
} 9 p1 R* P" \1 y( D: B6 U
6 [: ?. O3 X' j! l+ \6 y1 ~* n% R8 i" {6 }* D
|
|