mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik String auslesen in ASM 20 byte


Autor: Der Grosse (jonnyk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute habe hier ein kleines Problemchen und komme einfach nicht 
weiter.

Ich habe in ASM (Mega128) einen String mit 20 bytes angelegt.
.dseg
Kartenname: .byte 20

ne..

dann habe ich jetzt eine funktion die die zeichen die ich wo anders rein 
schreibe ausliest

ldi R20,$0

DATEN_DISP:
 lds R25,Kartenname
 inc R20
 sts HW_display_adr,R25 ; Daten ins Display
 cpi R20,$14
 brne DATEN_DISP
 dealy  2 ; warten 1 ms


usw. Funktioniert auch super ich kriege 20 mal das 1-te zeichen 
angezeigt.
Aber ich weiß jetzt nicht wie ich den wert von Kartenname+1 ...+2 und so 
weite bekomme.


Kann mir wer helfen?

bedanke mich im Vorraus.

Autor: Martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich kenne mich AVr zwar nicht aber einfach einen Pointer verwenden 
(indirekte Adressierung) und den Pointer bei jedem Zeichen erhöhen.

Autor: Der Grosse (jonnyk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Martin wrote:
> Ich kenne mich AVr zwar nicht aber einfach einen Pointer verwenden
> (indirekte Adressierung) und den Pointer bei jedem Zeichen erhöhen.

Das ist auch mein Problem hat jemand so´n beispiel also CODE oder so zur 
erklärung.

In asm kommt mir das etwas kompliziert vor.

oder sehe ich da was falsch?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Funktioniert auch super ich kriege 20 mal das 1-te zeichen
>angezeigt.

Logisch. Du springst ja immer an den Anfang deiner Routine zurück.


Das geht so gar nicht. Das LDS wird nicht gehen. Das kann nur statisch 
adressieren.

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das könnte gehen:
(bin schon etwas aus asm raus..)
 ldi r20, 0                    ; Zeichenzähler
 ldi r31, HIGH(Kartenname)
 ldi r30, LOW (Kartenname)     ; Z-Pointer auf Stringanfang
DATEN_DISP:
 ld  r25, z+                   ; erstes Zeichen holen
 sts HW_display_adr,  r25      ; Daten ins Display
; inc r20                       ; Zeichen zählen
 cpi r25, 0                    ; Stringende?
; cpi r20, 20                   ; falls Abbruch nach 20Zeichen gewünscht
 brne DATEN_DISP               ; nein, dann zurück


Du musst natürlich dafür sorgen, dass im D-Seg hinter dem letzten 
Zeichen eine 0 steht.

Autor: Der Grosse (jonnyk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Lipinsky wrote:

> Das geht so gar nicht. Das LDS wird nicht gehen. Das kann nur statisch
> adressieren.

Was meinst du damit? wie geht das?

Autor: Der Grosse (jonnyk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Matthias Lipinsky wrote:
> Das könnte gehen:
> (bin schon etwas aus asm raus..)
>
>
>  ldi r20, 0                    ; Zeichenzähler
>  ldi r31, HIGH(Kartenname)
>  ldi r30, LOW (Kartenname)     ; Z-Pointer auf Stringanfang
> DATEN_DISP:
>  ld  r25, z+                   ; erstes Zeichen holen
>  sts HW_display_adr,  r25      ; Daten ins Display
> ; inc r20                       ; Zeichen zählen
>  cpi r25, 0                    ; Stringende?
> ; cpi r20, 20                   ; falls Abbruch nach 20Zeichen gewünscht
>  brne DATEN_DISP               ; nein, dann zurück
> 
> 
>
> Du musst natürlich dafür sorgen, dass im D-Seg hinter dem letzten
> Zeichen eine 0 steht.

Und es Geht tatsächlich...

Ich bedanke mich hezlich...

so schnell und dann noch so einfach. hätte ich nie gedacht.

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.