Stránka 1 z 1

jak pristoupit k XRAM pameti v C51ED2

Napsal: 06 lis 2009, 12:23
od alvr
Zdravim. Prosim vas, poradite mi nekdo? Jsem zacatecnik a trochu se motam s pametovymi prostory v procesoru AT89C51ED2 a IDE Keil uVision3. Docela jsem pochopil vyznamy a pouziti jednotlivych pametovych prostoru, ale stale nemuzu prijit na to, proc mi nefunguje zapis/cteni do XRAM. Uvedu zde jednoduchy priklad kde testuji jednotlive pametove prostory. Prostory data, idata, bdata, pdata jsou OK, ale k XRAM pomoci xdata pristoupit neumim a testovani neprobehne dobre. Docetl jsem se ze se musi nastavit AUXR registr, ale ten jsem testoval a ma hodnotu 0x08 coz by melo odpovidat 768B XRAM. Poradite mi nekdo v cem delam chybu u pristupu k XRAM?? Diky moc!

priklad:

#include <at89c51xd2.h>

//deklarace testovacich promennych
unsigned char d[80];
unsigned char idata i[80];
unsigned char bdata b[16];
unsigned char pdata p[200];
unsigned char xdata x[500];

void main() {
int z;
P0_1=1;//nastaveni testovaciho pinu


//testovaci zapis data pameti
for (z=0;z<80;z++) {
d[z]=z;
}
//testovaci cteni data pameti
for (z=0;z<80;z++) {
if (d[z]!=z) {//rozhodnuti, zda je cteni OK a nastaveni pinu
P0_0=0;
}
else {
P0_0=1;
}
}

//testovaci zapis idata pameti
for (z=0;z<80;z++) {
i[z]=z;
}
//testovaci cteni idata pameti
for (z=0;z<80;z++) {
if (i[z]!=z) {//rozhodnuti, zda je cteni OK a nastaveni pinu
P0_1=0;
}
else {
P0_1=1;
}
}

//testovaci zapis bdata pameti
for (z=0;z<16;z++) {
b[z]=z;
}
//testovaci cteni bdata pameti
for (z=0;z<16;z++) {
if (b[z]!=z) {//rozhodnuti, zda je cteni OK a nastaveni pinu
P0_2=0;
}
else {
P0_2=1;
}
}

//testovaci zapis pdata pameti
for (z=0;z<200;z++) {
p[z]=z;
}
//testovaci cteni pdata pameti
for (z=0;z<200;z++) {
if (p[z]!=z) {//rozhodnuti, zda je cteni OK a nastaveni pinu
P0_3=0;
}
else {
P0_3=1;
}
}

//testovaci zapis xdata pameti
for (z=0;z<500;z++) {
x[z]=z;
}
//testovaci cteni xdata pameti
for (z=0;z<500;z++) {
if (x[z]!=z) {//rozhodnuti, zda je cteni OK a nastaveni pinu
P0_4=0;
}
else {
P0_4=1;
}
}

while (1);
}

Napsal: 08 lis 2009, 00:32
od Bernard
Já pracoval jen s uVision2 a ani s tím ED2 ne, tak jen taková úvaha, když se nikdo jiný nechytá.
Ten Keil měl soubor STARTUP.A51, který se vždy automaticky přilinkoval. V něm je nastaven i začátek a délka datových bloků, i toho xdata. Možná to chce změnit a potom přilinkovat manuálně.
Pokud výsledek testu kontroluješ staticky po spuštění, zjistíš jen výsledek zápisu/čtení posledního bajtu, ale to není podstatné.

Napsal: 08 lis 2009, 10:15
od alvr
To testovani vlastne neni podstatne. To jsem uvadel vlastne pouze jako priklad ze jsem to nejakou zpetnou vazbou overoval pres analyzer v debuggeru. Je mi ale divne, proc funguji vsechny ostatni datove uloziste, ale prave XRAM ne. Na ten STARTUP.A51 se kouknu...neporadis mi aspon na co se v nem zamerit? Kde konkretne by mohla byt zrada? Diky moc vsem.