mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Hilfe zu AVR-Tutorial ADC


Autor: Roderrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo erst einmal, bin dabei mich in Assambler einzuarbeiten.Und gehe 
das AVR Tutorial durch. Nun habe ich ein Verständnisproblem, mit 
folgendem Code, nach *Int_to_ASCII_schleife:* folgt* ldi  temp6, -1+'0'* 
was ist das für eine Konstante _-1+'0'_?
MFG Roderrich



Int_to_ASCII:

    push    ZL                      ; Register sichern
    push    ZH
    push    temp5
    push    temp6

    ldi     ZL,low(Tabelle*2)       ; Zeiger auf Tabelle
    ldi     ZH,high(Tabelle*2)
    ldi     temp5, 10               ; Schleifenzähler

*Int_to_ASCII_schleife:*
    *ldi     temp6, -1+'0' *          ; Ziffernzähler zählt direkt im 
ASCII Code
    lpm     z0,Z+                   ; Nächste Zahl laden
    lpm     z1,Z+
    lpm     z2,Z+
    lpm     z3,Z+

Int_to_ASCII_ziffer:
    inc     temp6                   ; Ziffer erhöhen
    sub     temp1, z0               ; Zahl subrahieren
    sbc     temp2, z1               ; 32 Bit
    sbc     temp3, z2
    sbc     temp4, z3
    brge    Int_to_ASCII_ziffer     ; noch kein Unterlauf, nochmal

    add     temp1, z0               ; Unterlauf, eimal wieder addieren
    adc     temp2, z1               ; 32 Bit
    adc     temp3, z2
    adc     temp4, z3
    st      X+,temp6                ; Ziffer speichern
    dec     temp5
    brne    Int_to_ASCII_schleife   ; noch eine Ziffer?
[avrasm]Int_to_ASCII:

Code:Auszug aus AVR Tutorial ADC 
[[http://www.mikrocontroller.net/articles/AVR-Tutorial:_ADC]]

Autor: Herr Mueller (herrmueller)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Assembler kann Ausdruecke auswerten, bzw ausrechenn. Die '0' ist der 
ASCII Code fuer das Zeichen '0' = $30 und -1 = -1 dh. zusammen $2F. Die 
minus 1 deswegen, weil in der Schleife 'Int_to_ASCII_ziffer' als erstes 
temp6 um 1 erhoeht wird - ergibt also wieder den ASCII Code von der 
Ziffer 0, um dann bei jedem Schleifendurchlauf weiterhin um 1 erhoeht zu 
werden, bis das Ergebnis der Subtr. <0 ist. Dann hat man direkt den 
ASCII Code der Ziffer zum Anzeigen.
Wenn man den Assembler rechnen laesst, spart man sich Zeit und es wird 
uebersichtlicher, weil man den Sinn der Konstanten einfacher erkennen 
kann. Wenn da nur $2F steht, ist das schwerer nachzuvollziehen.

andere Beispiele:

subi LcdChar,-$14   ;
    Addiere $14 - weil es keinen ADDI Befehl gibt, muss man den
    negativen Wert subtrahieren. Den errechnet mir der Assembler mit dem
    Minuszeichen.

ldi YL,$40+$80    ; $40 und Bit7 gesetzt

ldi Befbyte,1<<3
    ;Flag für Komma drucken / 3 Nachkommastellen
    1<<3 schiebt eine 1 3 mal nach links, dh. Bit 3 ist gesetzt.

ADC_Init0:
ldi temp, (1<<REFS1) | (1<<REFS0) | (0<<MUX3) |(0<<MUX2) | (0<<MUX1) | 
(0<<MUX0)  ; Kanal 0  int. ref Spannung 2,56V
out ADMUX, temp
ldi temp, (1<<ADEN) | (1<<ADPS2) | (1<<ADPS1) | (1<<ADPS0)
out ADCSRA, temp

Die Namen REFS1 usw. beinhalten die Bitnummern, die dann mit '|' 
ver-odert werden und die jeweiligen Bits somit gesetzt werden.
Bei 0<<MUX1 wird eine 0 geschoben und kein Bit gesetzt. Das ist so 
natuerlich unnoetig. Man kann allerdings so einfacher Aenderungen machen 
und sieht eher, dass zB oben der ADC Kanal auf 0 0 0 steht.


Wenn man damit arbeitet, vereinfacht sich vieles und es wird vor allem 
uebersichtlicher.

Autor: Roderrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok Danke, Die Information das, in Hochkomma geschrieben ASCII Code ist 
fehlte mir. Jetzt konnte ich den ganzen Assembler Code nachvollziehen.
Vielen dank für die Ausführliche Antwort.
MFG Roderrich
Ps. ganz schön verzwickt das Ganze.

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.