forum.mcontrollers.com - hlavní stránka forum.mcontrollers.com - fórum

 

.: fórum - hlavní stránka :.
Technology Stronghold by Rudolf Vesely
How to build Microsoft System Center hosted cloud series
FAQFAQ HledatHledat Seznam uživatelůSeznam uživatelů Uživatelské skupinyUživatelské skupiny RegistraceRegistrace
ProfilProfil StatistikaStatistika Soukromé zprávySoukromé zprávy PřihlášeníPřihlášení

 
Přístup do EEPROM AT89C51ED2 - nelze zapsat data z XRAM

 
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052
 
doktor.rakev
Častý přispěvatel
Častý přispěvatel


Založen: 23.3.2010
Příspěvky: 37

PříspěvekZaslal: 14 listopad 2010, 19:23    Předmět: Přístup do EEPROM AT89C51ED2 - nelze zapsat data z XRAM Citovat

Zdravim,

resim ted problem zapisu do interni EEPROM, mam kod, kterej funguje, ale nemuzu zapsat data ktery jsou v promenne, ktera je v XRAM (aspon si to myslim Smile )

kód:
void write_eeprom(unsigned int adr,unsigned char value){
   bit ea_help;
   while(EECON & 0x01){
      
   }
   ea_help=EA;   //ulozime si bit ea
   EA=0;
   EECON |= 0x02;
   *(unsigned char xdata*)adr=value;
   EECON |= ~0x02;
   EA=ea_help;

}


Takhle vypada funkce, tohle funguje:

write_eeprom(0x00,0x99);

tohle taky funguje:
kód:
unsigned int x;
x=0x00;
write_eeprom(x,0x99);


tohle uz nefunguje:
kód:
unsigned char xdata coords[3][2][10];
unsigned int x;
coords[0][0][0]=0x99;
x=0x00;
write_eeprom(x,coords[0][0][0]);


Respektive funguje to pouze pro prvni clen toho pole (zapisuju ty data v cyklu), pro
coords[0][0][1];

uz mi to zapise pouze 0xFF, zkousel jsem vytvorit pomocnou promenou ktera neni v XRAM a prevest do ni hodnotu z coords a pote ji zapsat ale taky nejde.

URcite to bude jenom nejaka kravinka ale resim to tady cely odpoledne Smile

Arrow administrator: přejmenováno z "Přístup do interní EEPROM at89C51ED2"


Naposledy upravil doktor.rakev dne 18 listopad 2010, 16:35, celkově upraveno 1 krát.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
piityy
Profesionál
Profesionál


Založen: 1.4.2008
Příspěvky: 2138

PříspěvekZaslal: 15 listopad 2010, 12:27    Předmět: Citovat

S tou pomocnou proměnnou by to chodit mělo. Zkus ji deklarovat jako volatile aby ji překladač nemohl vyhodit.

Zkus ještě přidat závorky *((unsigned int xdata*)adr)=value;
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
doktor.rakev
Častý přispěvatel
Častý přispěvatel


Založen: 23.3.2010
Příspěvky: 37

PříspěvekZaslal: 15 listopad 2010, 19:53    Předmět: RE Citovat

Diky, ted nemam sanci vyzkouset ale ve stredu dam vedet jak jsem dopad.

BTW. Ta stabilita serveru je posledni dobou desna, hodne casto se mi stranky vubec nenactou.
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

 
doktor.rakev
Častý přispěvatel
Častý přispěvatel


Založen: 23.3.2010
Příspěvky: 37

PříspěvekZaslal: 18 listopad 2010, 16:16    Předmět: RE Citovat

Tak jsem to dnes testoval a bohuzel se nepodarilo Sad Zkousel jsem jak zavorky tak pouzit to volatile.

Nasel sem tento link kde se pise mimo jine:

The instruction EECON = 0x02 disables the on-chip XDATA RAM, so it is no longer available. Therefore the code may fetch unpredictable values from the overlaying EEPROM space.

Takze opravdu bude asi nutne prevest tu hodnotu do RAM, ale nedari se mi na to prijit Sad

Co je dost divne je ze kdyz to zapisuju timto cyklem, prvni hodnota se na pozici 0x00 vzdy zapise pote uz nic:

kód:

unsigned int x;
unsigned char p;
            x=0x00;
            for(i=0;i<coords_count;i++){
               for(j=0;j<2;j++){
                  for(k=0;k<coords_num;k++){
                     //pokud neni souradnice zadana
                        if(coords[i][j][k]==0x00){
                        write_eeprom(x,0xFF);
                        }
                     else{
                        p=coords[i][j][k];
                        write_eeprom(x,p);
                        
                     }
                     x+=1;
               }
              }
            }
Návrat nahoru
Zobrazit informace o autorovi Odeslat soukromou zprávu
 

Zobrazit příspěvky z předchozích:   
Zobrazit předchozí téma :: Zobrazit následující téma  
Přidat nové téma   Zaslat odpověď    Obsah fóra mcontrollers.com -> 8051 / 8052 Časy uváděny v GMT + 2 hodiny
 
Strana 1 z 1
Přejdi na:  
Můžete přidat nové téma do tohoto fóra.
Můžete odpovídat na témata v tomto fóru.
Nemůžete upravovat své příspěvky v tomto fóru.
Nemůžete mazat své příspěvky v tomto fóru.
Nemůžete hlasovat v tomto fóru.
Můžete k příspěvkům připojovat soubory
Můžete stahovat a prohlížet přiložené soubory
 



Num Lock Holder - app to hold Numlock
Copyright © 2017 Rudolf Veselý, mcontrollers.com.
Je zakázáno používat části tohoto webu bez souhlasu autora. || Powered by phpBB © 2001, 2002 phpBB Group - with RedSquare DoubleJ(Jan Jaap)