Problem zapisu i odczytu pamięci EEPROM 16F877A

V

vin2403

Guest
przykład napisać 22 do 0xFF adres zapisu 44 w 0xFE adres napisać 88 do 0xFC adres kiedy czytam adres 0xFF przechowywać 88 adres 0xFE przechowywać 44 adres 0xFC przechowywać 22 Dlaczego tak się dzieje? Czy każdy pro Pomoc
 
Możesz pisać kod, którego używasz do zapisu danych?
 
void SaveData () {if (RB1 == 0 | | RB2 == 0) {opóźnienia (250); EEADR = 0xFF; EEDATA = hCount; WREN = 1; EECON2 = 0x55; EECON2 = 0xAA; WR = 1; while ( WR == 1) continue; WREN = 0; EEADR = 0xFE; EEDATA = lCount; WREN = 1; EECON2 = 0x55; EECON2 = 0xAA; WR = 1; while (WR == 1) continue; WREN = 0; EEADR = 0xFC; EEDATA = powCount; WREN = 1; EECON2 = 0x55; EECON2 = 0xAA; WR = 1; while (WR == 1) continue; WREN = 0;}} void readData () {EEADR = 0xFF; powCount = EEDATA; RD = 1; EEADR = 0xFE; hCount = EEDATA; RD = 1; EEADR = 0xFC; lCount = EEDATA; RD = 1;} jeśli mogę umieścić jak tis, i aby moja pożądanego rezultatu, ale dlaczego, y dane ned odczytać z inny adres.
 
Jedno zauważyłem od razu, że nie jesteś Ustawienia / Re-Ustawianie EECON1 bit 7, który określa, czy piszesz do EEPROM lub danych w pamięci programu. EEPGD trochę EECON1 rejestru musi być '0 ', aby uzyskać dostęp do pamięci danych. W "czytać" funkcji, to wydaje się przypisanie wartości EEDATA przed ustawieniem "RD" flagi na 1. Oznacza to, że "stare" wartości są transferowane. Innymi słowy, najpierw przeczytaj próbie rzeczywiście karmi ostatnich danych, próbował napisać. Czytaj funkcja powinna wyglądać tak:
Code:
 void readData () {EEADR = 0xFF; RD = 1; powCount = EEDATA; EEADR = 0xFE; RD = 1; hCount = EEDATA; EEADR = 0xFC; RD = 1; lCount = EEDATA;}
Również nie wiem, o reszcie kodu (główne), ale należy wyłączyć przerwania (bit GIE) przed rozpoczęciem zapisu / odczytu sekwencji i ponowne włączenie go przed powrotem. Ponadto, nie ma inicjalizacji lCount, hCount lub powCount widoczny, więc nie jestem pewien, jakie wartości są przechowywane w tych zmiennych. Nie zapominaj, że wszystkie zmienne muszą być inicjowane (lub bezpośrednio przypisane wartości / wynik) od wartości, na starcie nie gwarantuje się zero lub cokolwiek innego. Jeśli po prostu starał się przyrost hCount bez ustawienie go na zero nie możesz być pewien, co dostaniesz.
 
tak, to działa, dziękuję pomoc, będę następnym razem będzie ostrożniejszy i pomocą.
 

Welcome to EDABoard.com

Sponsor

Back
Top