jak pristoupit k XRAM pameti v C51ED2

Diskuze a poradna o programátorech a programování různých obvodů

Moderátor: Moderátoři

Odpovědět
Zpráva
Autor
Uživatelský avatar
alvr
Příspěvky: 288
Registrován: 25 led 2008, 00:00

jak pristoupit k XRAM pameti v C51ED2

#1 Příspěvek 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);
}
Uživatelský avatar
Bernard
Příspěvky: 3654
Registrován: 27 kvě 2005, 00:00

#2 Příspěvek 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é.
Uživatelský avatar
alvr
Příspěvky: 288
Registrován: 25 led 2008, 00:00

#3 Příspěvek 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.
Odpovědět

Zpět na „Programování PIC, ATMEL, EEPROM a dalších obvodů“