|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
各位大佬,关于STC这芯片的EEPROM在进行操作时,如果不按照扇区顺序操作控擦写,能不能有效存入数据?例如:开机初始化时使用第二扇区进行擦写,后面需要设置时使用第一扇区擦写存数据,我经过测试发现第二扇区不能存数据,如下:7 X$ W q8 e; A! b; |6 F) L' P
void main(void)
, A6 X2 p8 j0 Y" |7 W{
$ ~% ]9 S$ [ g, i4 i! d3 b- E1 I: q4 W; E {& l+ I6 I! q7 v& L3 }
IO_Init();
0 }1 P+ J' B0 A* \' Y6 H( U$ {Delay(100);' H3 K( K6 F) x+ |
6 m% s8 |* `4 FTempSum=IapRead(0x0001);//读第一扇区
P7 @* F; L5 o/ w7 ?3 q9 T9 ITempSum=TempSum<<8|IapRead(0x0002);6 ~5 B. X; a- b
ADsodo_flag=IapRead(0x0203);//读第二扇区
' y7 W, h5 Y! u5 Rcamp_dataFlag=ADsodo_flag;" W' ?# [. L' H$ W7 o F% d5 i
TESample=IapRead(0x0404);//读第三扇区
# u0 w" G l$ X! T% J. f# C TESample=camp_data<<8|IapRead(0x0405);* J/ ?3 X) Z; a7 d4 u1 s! {& M
Delay(500);: z* k Z5 o6 c" [3 z' ~8 P
Timer0_Init();3 h$ R k. A# V5 r1 A( l% k& N# k: V
# z3 Y/ T! y) c5 K
7 p4 I$ L2 a3 B2 L0 R while(1)$ C5 ~8 M2 q' ^0 h2 r
{
6 Z* G4 V& ^4 J2 ^/ \! |5 C: K1 q. q5 l- j: t" R
, p6 _* i0 O9 E; }: A' _ W/ m$ h if(AD_cmaxizuFlag_1)/ B$ ]2 s) R% C! |# a2 g2 c( z/ \
{6 O P' u/ \) W( }
TESample=tertpe-Set_temp;
1 T' S4 M, R( ^ ^- F: g- n. q
0 b3 Y& q/ x. u( A4 o% _4 X3 Q; d AD_cmaxizuFlag_1=0;% e+ y. z4 _% ?# p
} U% p2 I" a: M: M1 v1 \+ c
else
0 t# V& h3 C+ S: j if(AD_cmaxizuFlag_2)
& F( b4 f5 \; o( k8 r6 b {. g( }0 q8 ^, s) T% P- ]; I5 W
TESample=Set_temp-tertpe;
U: r2 h/ Y( a4 x0 \2 |
! Y0 m( M: ]! x' n; ^9 z' a# }6 K0 ^ AD_cmaxizuFlag_2=0;; g; E4 c5 [1 y3 T0 {6 y- b
}
/ r/ ^' G" [; v% {2 |4 N( R: O- |$ p0 u- D
if(EepromFlag_1==2), _ [: b2 I- w: w
{
; v# O5 u) z5 n9 h; J IapErase(0x0000);//擦除第一扇区
8 g" q1 U D' N2 x IapProgram(0x0001,TempSum>>8);//写入第一扇区0 R1 ?: v$ C) I1 Z
IapProgram(0x0002,TempSum);+ D- f& V- ?% x0 o8 a0 }. P+ A T
EepromFlag_1=0;
: M% v% N5 x8 C* Z% i }
6 q4 ?! i& f5 M5 F9 l/ \* B3 G8 ]) S4 \ m9 J5 p
if(EepromFlag_2==2)
7 L& v" W6 V2 P {% J7 C# w3 y1 L1 l; C2 x
5 I- d+ t( J4 ?& t% L IapErase(0x0200);//擦除第二扇区 j& `% k8 |$ z3 X9 u* {' b$ z
IapProgram(0x0203,ADsodo_flag);//写入第二扇区
9 h& b( J, d0 f) P7 | IapErase(0x0400);//擦除第三扇区
5 }) n" T2 r: I* B$ R! R I0 {& U& D IapProgram(0x0404,TESample>>8);//写入第三扇区0 P4 x) ]' [, \, P* ~
IapProgram(0x0405,TESample);* ^7 o" N( X# d4 d4 b7 N
EepromFlag_2=0;
% X. ^0 l( ~% n7 l! M: M) A }
: E$ M- E5 Y% H. }2 _- I. Dif(Eepromflag_A)//开机按键初始化第一次写入* E% m6 F) a. g! E/ Z
{
) q. ~- V' c8 T$ p% ^ IapErase(0x0200);//擦除第二扇区
( t; f/ {! L) x4 k, `! C IapProgram(0x0203,ADsodo_flag);//写入第二扇区8 D6 H7 {# w/ w
Eepromflag_A=0;
! A X9 F6 n8 f5 P6 [8 M% o. ^5 T}2 | j" O7 v: C ^
}
* l6 {! j# b4 ~3 H ?}
: f5 w) w$ V6 @6 n$ j% c& K' Q) i/ A: j
4 p1 e3 b/ t, D9 ^' i) ~1 f }
* V/ s4 J. V8 _/ M5 z}
( S2 H2 y# l4 \& ^$ u3 U- a( i- l1 T
/ u9 E4 c3 n6 O4 Q0 \
|
|