Hallo zusammen Ich arbeite mit einem at89c2051 und Keil. Nun habe ich ein Array im externen Bereich mit xdata abgespeichert, da es sonst zu gross ist. So weit so gut. Nun möchte ich diese Zahlen auch wieder ausgeben, aber dies funktioniert nicht! :( Könnt ihr mir einen Tipp geben wie ich die zahlen ausgeben kann? Ich habe schon einen Kollegen gefragt und dieser hat mir ein Vorschlag gegeben, aber dieser funktioniert nicht. Hier ist sein Vorschlag (P1 ist der ausgang, Port1) unsigned char xdata arr[126]= {126. zahlen} unsigned char i; void warte(){ //Warteschleife } void main(){ while (i<126){ P1 = (unsigned char *) &(frisch_INF+i); warte(); i++; } }
Ich hab noch ein Fehler in meinem Programm entdeckt. :) es sollte so aussehen: unsigned char xdata arr[126]= {126. zahlen} unsigned char i; void warte(){ //Warteschleife } void main(){ while (i<126){ P1 = (unsigned char *) &(arr+i); warte(); i++; } }
Hat niemand eine Idee was falsch sein könnte oder wie es richtig sein sollte? :(
Das hab ich gemacht, aber hier nicht angegeben. Es funktioniert trotzdem nicht.
> Ich arbeite mit einem at89c2051 und Keil. > Nun habe ich ein Array im externen Bereich mit xdata abgespeichert, da > es sonst zu gross ist. Die fett markierten Begriffe schließen sich aus... Der AT89C2051 hat keinen on-Chip-XData-Speicherbereich. Ralf
Ok Danke für den Hinweis ;) Wie müsste ich dann ein Array mit 126 zahlen speichern? Wenn ich es normal init. also: unsigned char arr [126]= {zahl} gibt es immer ein Fehler, dass mein Array zu lang ist.
> Wie müsste ich dann ein Array mit 126 zahlen speichern?
Vergiss es. Der AT89C2051 hat nur insgesamt 128 Bytes RAM, davon gehen
mindestens acht für die verwendete Registerbank drauf und mindestens ein
paar Bytes für den Stack. Du brauchst also 2052 aufwärts.
Ralf
Ok danke für den Tipp. Wenn ich jetzt z.b. ein 2052 habe: müsste ich dann das array auch mit xdata abspeichern oder nicht? und wie müsste es ausgegeben werden?
...wenn ich ganz tief in mir suche...der 2051 hatte doch nur 128Byte RAM. Davon will das C-Prog noch was abhaben. Fange doch mal mit der Arraygröße klein an und vergrößere Schrittweise. ..und google mal nach RTFM. MfG Pieter
wenn dein gewählter uC das RAM-mässig nicht hergibt, aber so ein kleines
progrämmchen nur hat, könntest du das array ja in den code-speicher
(ROM=FLASH) packen. Wird etwas langsamer sien als aus dem RAM aber tut
es auch mit dem kleinen uC. Wie dieser Zugriff genau mit Keil51 geht
musst Du noch herausfinden (google, etc.).
ausserdem ist das hier wohl (auch) Unfug:
>> P1 = (unsigned char *) &(arr+i);
...wenn der compiler nicht meckert dann tust du hier die adresse von
arr[0] + wert der variable i ausgeben, ist wohl nicht ganz das was sein
soll.
wenn du auf P1 nacheinander die werte des array ausgeben möchtest, dann
besser so:
void main()
{
unsigned char i = 0;
while (i<126)
{
P1 = arr[i];
warte();
i++;
}
}
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.