Forum: Mikrocontroller und Digitale Elektronik LD – Load Indirect from Data Space to Register using Index X -- atmel -- grosse Frage


von Klaus D. (kolisson)


Lesenswert?

hallo leute,

da habe ich eine gewisse zeit darauf verbracht, etwas in Atmel manuell 
zu programmieren. eigentlich sind es nur ein paar kleine befehle . 
aufgrund einer funktion meiner programmierung, die nicht erwartet war, 
bin ich der sache mal auf den grund gegangen und bin derzeit sehr 
skeptisch über die ursache:

das Mysterium tritt auf beim Befehl:
LD – Load Indirect from Data Space to Register using Index X


und hier ein Beispiel:


angenommener memory content:
$0100 = 01
$0101 = 02
$0102 = 03
$0103 = 04


testprogramm mit

LDI r26,00  'x lowbyte
LDI r27,01  'x highbyte

LD  r24,x+


nach diesem durchlauf würde ich nun erwarten,
dass der inhalt von r24 = 01 ist,
da der speicher bei $100 gelesen wurde.

Das ist auch so...  also bin ich damit zufrieden!!!

gleichzeitig sollte doch das lowbyte des x registers
bereits auf 01 stehen ,da das x-register ja den post-increment 
durchgeführt hat.

   ... oder verstehe ich das instruction set falsch?

Das ist bei meinem Prozessor leider nicht so.
ob nun die daten oder das incremet zuerst kommen (innerhalb des zyklus) 
kann ich nicht sagen.
defakto ist aber die ADRESSE und DATA nach dem befehl immer sychron auf 
dem gleichen stand.

Das datenblatt des M88 verspricht mir aber // selbst nach 10maligen 
lesen der halben seite // etwas anderes


es handelt sich um einen atmega 88.

kennt jemand das problem oder habe ich da was falsch verstanden.

Gruss klaus

von Hannes L. (hannes)


Lesenswert?

Du denkst richtig. Das von Dir beschriebene Verhalten des Mega88 konnte 
ich noch nicht erleben. Ich habe den Mega88 allerdings noch nicht 
simuliert, kann also keinen Fehler des Simulators ausschließen. Ich 
vermute allerdings ein Missverständnis beim Benutzen und Bedienen der 
Software.

...

von Hc Z. (mizch)


Lesenswert?

> gleichzeitig sollte doch das lowbyte des x registers
> bereits auf 01 stehen ,da das x-register ja den post-increment
> durchgeführt hat.

So ist es.

> ob nun die daten oder das incremet zuerst kommen (innerhalb des zyklus)
> kann ich nicht sagen.

Es handelt sich um Post-Inkrement, es erfolgt also zunächst der Zugriff 
und dann das Inkrement.

> kennt jemand das problem oder habe ich da was falsch verstanden.

Da es unwahrscheinlich ist, dass ausgerechnet dieser Teil des Prozessors 
kaputt ist und der Rest tut, sitzt das Problem meist in solchen Fällen 
vor der  Tastatur.  Bei der Fülle an Bedienbefehlen kann man sich leicht 
vertun, vor allem am Anfang.  Oder man programmiert eine Schleife und 
springt zum ldi zurück.

von (prx) A. K. (prx)


Lesenswert?

NB: Die Befehlssatzbeschreibung findet man bei Atmel nicht im Datasheet, 
das ist ein eigenes Buch.

von spess53 (Gast)


Lesenswert?

Hi

>defakto ist aber die ADRESSE und DATA nach dem befehl immer sychron auf
>dem gleichen stand.

Wie hast du das festgestellt? Programm?

MfG Spess

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

>defakto ist aber die ADRESSE und DATA nach dem befehl immer sychron auf
>dem gleichen stand.

Muss ja (abgesehen vom Offset 0x100) so sein:
>angenommener memory content:
>$0100 = 01
>$0101 = 02
>$0102 = 03
>$0103 = 04
>
>testprogramm mit
>LDI r26,00  'x lowbyte
>LDI r27,01  'x highbyte
>LD  r24,x+
In r24 steht jetzt 0x01 und die Adresse ist nach dem Increment 0x101.

Passt also  :-o

Besser hättest du solche Daten verwendet:
$0100 = 00
$0101 = 01
$0102 = 02
$0103 = 03

von Klaus D. (kolisson)


Lesenswert?

danke für die antworten.
zumindest kann ich jetzt davon ausgehen, dass ich die 
befehlsbeschreibung korrekt interpretiert habe.

ich werde das nun nochmals genauer untersuchen und dann wieder darauf 
zurückkommen

gruss klaus

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
Noch kein Account? Hier anmelden.