Gast
#667190
Hallo alle zusammen,
und zwar wollte ich auch einmal anfangen einen ATMega 8 zu
programmieren. (in Assembler)
Mein Projekt: Thermometeranzeige für meine Ätzanlage
Da ich aber noch keine Ahnung habe, habe ich mir erst einmal ein
ähnliches Programm gesucht und das analysiert.
Ich hab ein paar Fragen zu diesem Programm „Mehrere 7-Segment Anzeigen
gleichzeitig (Multiplexing)“ (siehe Anhang).
Das hier kann ich nicht nachvollziehen:
out_number:
push temp
push temp1
ldi temp2, -1 ; Die Tausenderstelle
bestimmen
_out_tausend:
inc temp2
subi temp, low(1000) ; -1000
sbci temp1, high(1000)
brcc _out_tausend
ldi ZL, low(2*Codes) ; fuer diese Ziffer das
Codemuster fuer
ldi ZH, high(2*Codes) ; die Anzeige in der
Codetabelle nachschlagen
add ZL, temp2
lpm
sts Segment3, r0 ; und dieses Muster im SRAM
ablegen
; die OvI Routine sorgt
dann duer die Anzeige
ldi temp2, 10
Was ist hier mit der 1000 gemeint ? Ich hab das mal durchs AVR Studio
laufen lassen und er schreibt in das Register temp nur „19“ , in das
Register temp1 „ FC “ . Bei dem Teil mit der 1000 verstehe ich
irgendwie nur Bahnhof.
Als Kommentar steht „; -1000“, obwohl in den Klammern nur 1000 steht.
Ist das so eine Festlegung, dass man + und - vertauschen muss?
Woran kann es liegen, dass er den Befehl „call“ im AVR Studio als Fehler
deklariert? Ich habe diesen durch den Befehl rjmp ersetzt.
Könntet ihr mir vielleicht einmal die Berechnung erklären ? Da steig ich
nicht hinter.
Danke und Gruß von Dirk