Problem schreiben und lesen EEPROM 16F877A

V

vin2403

Guest
Schreiben Sie zB 22 in Adresse 0xFF schreiben 44 in Adresse 0xFE schreiben 88 in Adresse 0xFC, wenn i-Adresse 0xFF speichern lesen 88 Anschrift 0xFE speichern 44 Anschrift 0xFC speichern 22 Warum passiert das? Kann jeder Pro-Hilfe
 
Können Sie nach dem Code, den Sie verwenden, um diese Daten zu schreiben sind?
 
void SaveData () {if (RB1 == 0 | | RB2 == 0) {Delay (250); EEADR = 0xFF; EEDATA = hCount; WREN = 1; EECON2 = 0x55; EECON2 = 0xAA; WR = 1; while ( WR == 1) fortzusetzen; WREN = 0; EEADR = 0xFE; EEDATA = lCount; WREN = 1; EECON2 = 0x55; EECON2 = 0xAA; WR = 1; while (WR == 1) fortzusetzen; WREN = 0; EEADR = 0xFC; EEDATA = powCount; WREN = 1; EECON2 = 0x55; EECON2 = 0xAA; WR = 1; while (WR == 1) fortzusetzen; WREN = 0;}} void readData () {EEADR = 0xFF; powCount = EEDATA; RD = 1; EEADR = 0xFE; hCount = EEDATA; RD = 1; EEADR = 0xFC; lCount = EEDATA; RD = 1;} if Ich mag tis gesagt, ich meine gewünschte Ergebnis zu erhalten, aber warum, lesen Sie y die Daten ned aus andere Adresse.
 
Eines merke ich sofort, dass du nicht einstellen / Re-Setting EECON1 Bit 7, ob Sie auf EEPROM oder Program Datenspeicher schriftlich fest. EEPGD bisschen EECON1 registrieren muss '0 'werden auf den Datenspeicher zugreifen. In der "read"-Funktion, du scheinst zu sein Zuweisung Wert EEDATA vor der Einstellung des "RD"-Flag auf 1. Das heißt, die "alte" Wert übertragen wird. Mit anderen Worten: Lesen Sie die erste Sie versuchen wirklich nährt die letzten Daten, die Sie versucht, zu schreiben. Die Lese-Funktion sollte wie folgt aussehen:; RD = 1; powCount = EEDATA; EEADR = 0xFE; RD = 1; hCount = EEDATA; EEADR = 0xFC; RD = 1;
Code:
 void readData () {EEADR = 0xFF lCount = EEDATA;}
Auch glaube ich nicht, über den Rest des Codes (Haupt-) wissen, aber man sollte Interrupts (GIE-Bit) vor Beginn der Schreib / Lese-Reihenfolge und wieder aktivieren bevor er zurückkehrt. Auch gibt es keine Initialisierung lCount, hCount oder powCount sichtbar, so dass ich bin mir nicht sicher, welche Werte in dieser Variablen gespeichert werden. Vergessen Sie nicht, dass alle Variablen initialisiert werden muss (oder direkt ein Wert zugewiesen / Ergebnis), da die Werte beim Start nicht garantiert werden auf Null oder irgend etwas anderes sein. Wenn Sie gerade versucht, hCount, ohne zuerst auf Null setzen können nicht sicher sein, was Sie bekommen Zuwachs.
 
ja, es funktioniert, ich danke Ihnen helfen, werde ich vorsichtig sein, beim nächsten Mal i mit.
 

Welcome to EDABoard.com

Sponsor

Back
Top