Problem Skrive og lese EEPROM av 16F877A

V

vin2403

Guest
eksempel
skrive 22 til adressen 0xFF
skrive 44 til adressen 0xFE
skrive 88 til adressen 0xFC

Da jeg leste
adressen 0xFF lagre 88
adressen 0xFE lagre 44
adressen 0xFC lagre 22

Hvorfor dette skjer? Kan noen pro Hjelp

 
void saveData ()
(
if (RB1 == 0 | | RB2 == 0)
(
forsinkelse (250);

EEADR = 0xFF;
EEDATA = hCount;
Gjerdesmutt = 1;
EECON2 = 0x55;
EECON2 = 0xAA;
WR = 1;
while (WR == 1) continue;

Gjerdesmutt = 0;EEADR = 0xFE;
EEDATA = lCount;
Gjerdesmutt = 1;
EECON2 = 0x55;
EECON2 = 0xAA;
WR = 1;
while (WR == 1) continue;

Gjerdesmutt = 0;EEADR = 0xFC;
EEDATA = powCount;
Gjerdesmutt = 1;
EECON2 = 0x55;
EECON2 = 0xAA;
WR = 1;
while (WR == 1) continue;

Gjerdesmutt = 0;
))

void readData ()
(

EEADR = 0xFF;
powCount = EEDATA;
RD = 1;EEADR = 0xFE;
hCount = EEDATA;
RD = 1;EEADR = 0xFC;
lCount = EEDATA;
RD = 1;

)
hvis jeg legger gjerne TIS, får jeg min ønsket resultat, men hvorfor, y dataene ned lese fra annen adresse.

 
En ting jeg merker med en gang er at du ikke Innstilling / Re-Innstilling EECON1 bit 7 som bestemmer om du skriver til EEPROM eller Program data minne.EEPGD bit av EECON1 register må være "0" for å få tilgang til data minne.

I "lese"-funksjonen,
og du ser ut til å være tilordner verdien av EEDATA før den "RD" flagget til 1.Det betyr at det "gamle" er overført.Med andre ord, den første lese du forsøker faktisk strømmer de siste dataene du forsøkte å skrive.Les funksjon skal se slik ut:

Code:

void readData ()

(

EEADR = 0xFF;

RD = 1;

powCount = EEDATA;EEADR = 0xFE;

RD = 1;

hCount = EEDATA;
EEADR = 0xFC;

RD = 1;

lCount = EEDATA;

)
 
ja, det fungerer, takk hjelper, vil jeg være forsiktig neste gang jeg bruker.

 

Welcome to EDABoard.com

Sponsor

Back
Top