Incrementieren einer 16Bit Zahl

Gast #116843
Lesenswert?

Das erhöhen get so einfacher:
add ZahlLow, eins
adc ZahlHigh, null
(natürlich müssen vorher noch ein Register mit 0 und 1 geladen
werden).
Am Ende dann überprüfen ob das Ergebnis 10000 beträgt. fertig.
Gast #116845
Lesenswert?

Hallo,
Das Addieren in 16-Bit Breite geht mit nur einem Befehl, wenn man eines
der Doppelregister X, Y, oder Z verwendet. z.B.

adiw r24,1

erhöht r25:r24 um eins, r24 ist dabei das untere Byte. Carry wird
intern behandelt. Der Befehl benötigt zwei Taktzyklen. SBIW ist der
entsprechende Befehl zur Subtraktion.

Gruß
Gast #116848
Lesenswert?

Hier das ganze stark vereinfacht mit rückwärts zählen:

.def    Time1L = r24
.def    Time1H = r25

HAUPT:    ldi  Time1L,low(10000)  ;Counter auf 10000 (low-byte in r24)
setzen
    ldi  Time1H,high(10000)  ;Counter auf 10000 (high-byte in r25) 
setzen

ZAEHL:    sbiw  Time1L,1    ;16-Bit Counter um 1 verringern
    brne  ZAEHL      ;und solange widerholen solange <> 0

OVER:    rjmp  HAUPT      ;Das ganze von vorne

Mach es Dir doch einfacher in dem Du die Anweisungen low und high
verwendest dann brauchst Du das nicht immer auszurechnen.

Gruß
Andi

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren