mikrocontroller.net

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


Autor: Klaus De lisson (kolisson)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht 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.

...

Autor: Hc Zimmerer (mizch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: A. K. (prx)
Datum:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus De lisson (kolisson)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.