www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 7 Segment-Anzeige AVR-Assembler


Autor: Quiddi Quiddinson (quiddi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

ich habe mir mal das AVR-Tutorial für Assembler angesehen. Es geht genau 
um diesen Artikel:
http://www.mikrocontroller.net/articles/AVR-Tutori...

Ich verstehe wie die 7-S-A funktioniert, wie die Codetabelle zustande 
kommt. Was ich aber nicht verstehe ist, wie sage ich dem AVR, wann 
welche Zeile von der Codetabelle kommt. Also wie lege ich fest, dass 
wenn Dezimal eine 1 im Register ist die 2. Zeile rausgeschoben wird, 
bzw. Dezimal 0 --> Zeile 1...

Ich hoffe ich schreibe den Artikel nicht zum zweiten mal, aber in der 
SUFU habe ich nichts gefunden.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>wie sage ich dem AVR, wann welche Zeile von der Codetabelle kommt.
>Also wie lege ich fest, dass wenn Dezimal eine 1 im Register ist
>die 2. Zeile rausgeschoben wird,bzw. Dezimal 0 --> Zeile 1...

Hier mal der relevante Codeabschnitt:
     ldi     ZL, low(2*Codes)     
     ldi     ZH, high(2*Codes)
     add     ZL, temp2
     lpm

Du lädst Z mit der Adresse des Tabellenanfangs, addierst deine Ziffer 
(0...9) zu Z. Damit ist in Z die Adresse des zugehörigen Codes. Mit 
'lpm' wird das Byte von der Adresse in Z nach r0 geladen.
Du musst aber folgendes beachten: 'Codes' repräsentiert eine 
Word-Adresse, zeigt also auf 2 Bytes. Für 'lpm' wird aber eine Adresse 
erwartet, die auf ein Byte zeigt. Deshalb wird bei 'ldi     ZL, 
low(2*Codes)' mit '2*Codes' die Adresse verdoppelt. Aus dem gleichen 
Grund müssen auch 2 Codes der Tabelle in einer Zeile stehen. Sonst fügt 
der Assembler nach jeder .db-Anweisung ein $00 ein und bringt die 
Tabelle durcheinander.

MfG Spess

Autor: Quiddi Quiddinson (quiddi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo nochmal,

Danke für deine Antwort.

So ganz habe ich es noch nicht verstanden.
Angenommen es steht folgendes in meinem Quellcode.
Codes:
           .db     0b11000000
           .db     0b11111001
           .db     0b10100100


Wenn ich jetzt die Befehle

     ldi     ZL, low(2*Codes)
     ldi     ZH, high(2*Codes)

ausführe. Was steht dann im Z Register, wegen dem *2? Steht da 11000000 
und im H noch mal 11000000 oder hat das 16bit und es steht 
1100000011000000 drin.

Wenn ich den Befehl add  ZL, temp2 ausführe mein Z-Register in der 
ersten Zeile ist und temp2 einer 1 entspricht. Steht dann jetzt im 
Z-Register die 2. Zeile also 11111001 drin?

Den Befehl lpm glaube ich verstanden zu haben, ich muss dann halt r0 
noch an meinen Ausgangsport, wo meine 7-S-A dranhängt, ausgeben.

Mfg
quiddi

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ins Z-REgister lädt er die Adresse, nicht den Inhalt.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
z.B. Deine Daten stehen an Adresse Wort Nr. 42 (Byte 84 im 
Flash-Speicher)
=> Überall wo du jetzt "Codes" hinschreibst, ersetzt es der Assembeler 
durch die 42. DIe Multiplizierst du mit 2 => 84.
Jetzt kann der lpm-Befehl die Daten bei Byte Nr. 84 laden.

Autor: Ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du kannst zu den 84 noch was dazuzählen, z.B. 7, dann lädt er die Daten 
bei Byte Nr. 91, was der Code für eine Sieben ist.

Autor: Quiddi Quiddinson (quiddi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat mir einer von euch einen guten Link, wo erklärt wird wie die 
Wort-Nr. zustande kommt?

Beitrag #2649011 wurde von einem Moderator gelöscht.

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.