RTV forum PL | NewsGroups PL

Problemy z programowaniem 2KB EEPROM w 89S8252: dziwne wyniki odczytu

Programowanie EEPROM w 89S8252

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Problemy z programowaniem 2KB EEPROM w 89S8252: dziwne wyniki odczytu

I:D
Guest

Sat Nov 13, 2004 4:14 pm   



Próbuje zaprogramować pamięć 2KB EEPROM w uC 89S8252 (przestrzeń adresowa:
0x0000-0x7FF).
Jednak po zaprogramowaniu paru bajtów program się krzaczy.
Wg mojej opinii poniższy program powinien przesłać do kompa (RS232) cos
takiego:
0
01
0123
01234
....
Jednak zauważyłem, że wynikowe znaki zależą (wynika z testów) do wartości
początkowej wskaźnika: BYTE *EE = 0x0000;
np.:
dla BYTE *EE = 0x000F; wydaje się, że działa do 44 znaków:
0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUś@XYZ[
z tym, że V i W źle zapisało jako ś i @. Po powyższym ciągu 44 znaków
zaczyna krzaczyć:
01<0><0><0>01<0><0><0>01<0><0><0>01<0><0><0>01<0><0><0>01<0><0><0>01<0
Quote:
'<0>01



Oto kod:

typedef unsigned char BYTE;
BYTE *EE = 0x0000; //wskaźnik do pamięci EEPROM
//ODCZYT::------------------------------------------------------------------
-------------
void EEPROM_rd(BYTE NoOfBytes, BYTE indexEE, BYTE *to)
{
idata BYTE i,n;
for(i=0;i<NoOfBytes;i++)
{
WMCON |= 0x08;//dostep do EEPROM
n=EE[indexEE+i];
WMCON &= ~0x08;//dostep z powrotem do XData
*(to+i)=n;
}
}
//ZAPIS:--------------------------------------------------------------------
-------------
void EEPROM_wr(BYTE NoOfBytes, BYTE indexEE, BYTE *from)
{
BYTE i,n;
for(i=0;i<NoOfBytes;i++)
{
n=*(from+i);
WMCON |= 0x18;
EE[indexEE+i]=n;
while ( !(WMCON & 0x02) ){}
WMCON &= ~0x18;
}
}
//MAIN:---------------------------------------------------------------------
---------------
//wycinek kodu z main():
....
idata unsigned char daneOdczyt[68]; //Odczytany tekst
idata unsigned char daneZapis[3]; //znak zapisywany do EEPROM
....
while(1)
{
....
daneZapis[0]=j+'0';
EEPROM_wr(1, j, &daneZapis[0]); //EEPROM_wr( ile zapisac, od ktorego
bitu w pamieci, co)
j=j+1;
EEPROM_rd(j, 0, &daneOdczyt[0]); // EEPROM_rd( ile przeczytac, od ktorego
bitu, gdzie )
.... wizualizacja odczytu (RS232->Komp)
}
//--------------------------------------------------------------------------
------------------


Dzięki za sugestie.

Adam Dybkowski
Guest

Sun Nov 14, 2004 10:10 pm   



IVery Happy wrote:

Quote:
Próbuje zaprogramować pamięć 2KB EEPROM w uC 89S8252 (przestrzeń adresowa:
0x0000-0x7FF).
Jednak po zaprogramowaniu paru bajtów program się krzaczy.
[...]


Quote:
typedef unsigned char BYTE;
BYTE *EE = 0x0000; //wskaźnik do pamięci EEPROM

A gdzie niby masz powiedziane, że EE to wskaźnik do pamięci EEPROM?
Wygląda jak zwykły wskaźnik do danych (sam definiujesz typ BYTE) czyli:

unsigned char *EE = 0x0000;

To wygląda na całkiem normalny wskaźnik do pamięci danych. Skąd
kompilator ma wiedzieć, że chodziło ci o pamięć EEPROM?

W zależności od wykorzystywanego kompilatora C dla '51, należy użyć
różnych definicji aby zrealizować dostęp do pamięci EEPROM. Albo zrobić
to ręcznie (na piechotę, rejestrami SFR) - poczytaj o sposobie dostępu
do pamięci EEPROM w dokumentacji AT89S8252.

--
Adam Dybkowski
http://www.amwaw.edu.pl/~adybkows/

Uwaga: przed wysłaniem do mnie maila usuń "123" z adresu.

elektroda NewsGroups Forum Index - Elektronika Polska - Problemy z programowaniem 2KB EEPROM w 89S8252: dziwne wyniki odczytu

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map