mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Ascii und Adressierung


Autor: Daniel Bauer (und3rt4ker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!
Nachdem ich einen langen Beitrag geschrieben habe und diesen aus 
versehen gelöscht habe argh fasse ich mich jetzt kurz.

Mein Problem:"Wie kann ich eine beliebige Zahl(<256) mit 5 
multiplizieren(überlauf?) und mit dem Ergebniss eine Speicheradresse 
größer 255 erreichen?"
font:
.DB   0,   0,   0,   0,   0,    0,   0,  95,   0,   0   ; #32: " ",#33: "!"
.DB   0,   7,   0,   7,   0,    20, 127,  20, 127,  20  ; #34: """,#35: "#"
.DB  36,  42, 127,  42,  18,    35,  19,   8, 100,  98  ; #36: "$",#37: "%"
.DB  54,  73,  85,  34,  80,    0,   5,   3,   0,   0   ; #38: "&",#39: "'"
.DB   0,  28,  34,  65,   0,    0,  65,  34,  28,   0   ; #40: "(",#41: ")"
.DB  20,   8,  62,   8,  20,    8,   8,  62,   8,   8   ; #42: "*",#43: "+"
.DB   0,  80,  48,   0,   0,    8,   8,   8,   8,   8   ; #44: ",",#45: "-"
Ziel: Erreichen der Speicherzelle des ersten bytes des Zeichens ascii36 
("$") mit eingabe seines ascii codes:
Angenommen das Zeichen "$"(Ascii36) soll erreicht werden, dann muss 32 
von ascii36 abgezogen werden, da die tabelle erst bei ascii32
anfängt. Wenn man jetzt die speicherzelle 4(=36-32) anspringt, kommt man 
natürlich beim 4ten byte vom leerzeichen raus und nicht beim ersten byte 
vom "$".
Um zum ersten byte des $ zu gelangen muss man also 4*5(byte)+1 rechnen.
Aber wie rechne ich das? Das mit dem 8bit übersteigenden rechnen 
verstehe ich noch nicht so ganz.

Vielen Dank im Vorraus, an die, die sich meinem Problem widmem!

Mfg Und3rt4ker

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was für ein µC soll das sein? Hat der einen Hardware-Multiplier? Wenn 
nicht, dann geht Multiplizieren mit 5 auch durch zweimal nach links 
schieben und Ausgangswert dazuaddieren (x*5 = x*2*2+x). Das Ergebnis ist 
natürlich 16-bittig, d.h. der Überlauf muss bei jeder Operation beachtet 
werden.

Autor: Daniel Bauer (und3rt4ker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der µC ist ein Attiny 2313. Kannst du mir evtl ein bsp zeigen, wie man 
ein register "mpr" mit 5 multipliziert und das ergebnis in zwei 
registern ausgibt?


THX, Mfg Und3rt4ker

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
z.B. (ohne Gewähr, nicht getestet):
clr r1   ;r1 und r2 löschen
clr r2
mov r0, mpr  ;Ausgangswert in r0
lsl r0   ;16-Bit-Linksshift
rol r1
lsl r0   ;und nochmal
rol r1
add r0, mpr  ;Ausgangswert hinzuaddieren
adc r1, r2   ;Carry zum High-Byte addieren
Ergebnis (16 Bit) steht dann in r1 (High-Byte) und r0 (Low-Byte)

Autor: Daniel Bauer (und3rt4ker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
jetzt habe ich noch ein problem:

wie kann ich den z-pointer um 32 erniedrigen und den unterlauf 
verarbeiten?

"subi zl, 32" kann ja nur bedingt funktionieren.


Mfg Und3rt4ker

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Die 32 must du vor der Multiplikation abziehen. Danach wären es 160.

MfG Spess

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Unddreirtvierker

> "subi zl, 32" kann ja nur bedingt funktionieren.

subi zl, 32
sbci zh, 0

oder

sbiw zh:zl, 32


Peter

Autor: Daniel Bauer (und3rt4ker)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wenn man
subi zl, 160
sbci zh, 0
nachdem *5 rechnen macht, dann gehts, danke an euch alle freu

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.