Hallo zusammen,
Ich habe ein Problem mit Assembler und hoffe, dass dazu
jemand eine Idee hat...
Und zwar programmiere ich einen ATmega8 in Assembler (8mhz). Intention
ist, einen Frequenzzähler (zum kontrollieren von Ventilatoren in
hochspannungsschaltnetzteilen) zu entwickeln. Das Ding funktioniert
soweit, die Frequenz wird im AVR berechnet, und soll jetzt auf einem LCD
ausgegeben werden. Da der bereich von 110 - 1000 kHz geht sind die
anzuzeigenden Zahlen 24 bittig!!! Die sind aufgeteilt in 3 Register,
sagen wir r19:r17:r16. (Genaugenommen sind bei "1 000 000" nur 20 bit
belegt, trotzdem muss ich natürlich mit 3 Registern rechnen (8bit pro
reg) ). Ich muss jetzt 24 bit ins Dezimalsystem umrechnen & als Ascii zur Verfügung haben...
Ich bin nun soweit, dass ich weiss, wie es gehen könnte: von der Zahl
erst 1000000 abziehen, solange wie ein neg.überlauf entsteht. --> das
wäre die 1 000 000 -Stelle (als ASCII),dann die 1 000 000er Stelle von
der zahl abziehn, so dann die 100 000er stelle ermitteln, abziehen, dann
10000er, usw... Dann hätte ich z.b von 490 386 die Ascii-zeichen:
0 4 9 0 3 8 6
das kann ich leicht am LCD ausgeben. NUR : wie subtrahiere ich in
Assembler: 490386 - 100 000, beispielsweise? Das sind jeweils 3
Register, also 24bit - 24bit in Assembler?
Oder hat jemand eine ganz andere Idee zu Ausgabe von 24bit zahlen als
Dezimalzahl aufnem LCD???
Ich bin euch für jede Hilfe dankbar!!!,
Moritz
Schau mal nach Subtract with carry. Evtl den Subtrahend in Register laden. Die unteren 8 Bit macht man bit SUB und von da an mit Carry, genau wie beim Vergleichen: erst CP, dann CPC
Disclaimer: none. Sue me.
Lesezeichen