jak pristoupit k XRAM pameti v C51ED2
Napsal: 06 lis 2009, 12:23
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);
}
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);
}