www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR-Assembler+Byte "zersägen"


Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo
Ich habe hier ein LCD-Display, was im 4-Bit Modus an PB0-PB3 eines 
Atmega16
betrieben werden soll. Der Controller (HD44780) verlangt, daß das Byte 
des anzuzeigenden Zeichens in 2 "Etappen" je 4 Bit übertragen werden 
muß.
So lese ich jedenfalls das Datenblatt.

Angenommen, ich hätte das Register R16 mit dezimal 65 geladen, was dem 
Buchstaben "A" entspricht. Jetzt möchte ich in R18 die  oberen 4 Bit 
davon
und in R17 die unteren haben. Dann muß ich den Inhalt beider Register 
nacheinander auf PB0-PB3 ausgeben.

Ich habe in Assembler keine Idée, wie ich das Byte "zersägen" soll.
Kann mir mal jemand auf die Sprünge helfen?
Im 8-Bit Modus möchte ich nicht dran, weil das zwar einfacher wäre, aber 
ich brauche den "Rest" des Ports B noch für andere Sachen.

Ratlos
Paul

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Paul,

diese Art der Aufbereitung ist standard und es gibt zig Beispiele. Im 
Prinzip maskierst Du das 1. Nibble und gibst es aus, dann "swapst" Du 
die Nibbles, maskierst und gibst wieder aus.

Gruss Otto

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

Bewertung
0 lesenswert
nicht lesenswert
Schau Dir am besten mal den swap-Befehl an.
Bsp.:
mov r17, r16       ;r16 nach r17 kopieren
andi r17, 0x0F     ;High-Nibble 0 setzen
mov r18, r16       ;r16 nach r18 kopieren
swap r18           ;Byte "umdrehen" (High- und Low-Nibble vertauschen)
andi r18, 0x0F     ;wie oben: High-Nibble 0 setzen
(Schuss aus der Hüfte, ohne Gew(a)ehrleistung...)

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für Eure Tips.

Habe ich eben probiert:
$asm
ldi r16, 65     Lade `R16 mit dez.65
mov r17, r16    Schiebe den Inhalt von R16 in R17
andi r17, 0x0F  Setze die oberen 4 Bits auf 0
mov r18, r16    Schiebe den Inhalt von R16 in R18
swap r18        Vertausche die unteren4 und oberen4 Bits in R18 
miteinander
andi r18, 0x0F  Setze die oberen 4 Bits auf 0
$end Asm

End

Was passiert im Simulator? Zum Schluss steht in R16 noch dez. 65 und in 
den
R17 und R18 steht 0!  Ich denke, daß in R17 zum Schluss dez.1 stehen 
müßte und in R18 dez.4   Wo ist der Denkfehler? (Oder ist der Simulator 
ein Spitzbube ;-))

MfG Paul

Autor: Troll Blaubär (blaubeer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das kommt davon, wenn man das Rad nochmal erfinden will. ;-) Meine 
eigene
Initialisierungsroutine sieht fast so aus, wie die aus dem Tutorial...


Trotzdem wundere ich mich über das Simulationsergebnis von dem Codestück 
weiter oben. Mal sehen, ob das AVR-Studio auch deas gleiche Resultat 
zeigt.

MfG Paul

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So, im AVR-Studio funktioniert es wie es soll. Der Simulator von Bascom
hat einen Bug: Der ANDI-Befehl setzt in dem Byte alle Mann zu null, 
nicht nur die oberen 4 Bit. :-(
...da kann ich lange suchen.

MfG Paul

Autor: Troll Blaubär (blaubeer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Paul Baumann wrote:
> So, im AVR-Studio funktioniert es wie es soll. Der Simulator von Bascom
> hat einen Bug: Der ANDI-Befehl setzt in dem Byte alle Mann zu null,
> nicht nur die oberen 4 Bit. :-(
> ...da kann ich lange suchen.
>
> MfG Paul

Soviel zum Thema "ordentliches Werkzeug"...

Gruß in die Mitte Deutschlands, Troll Blaubär

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.