Forum: Mikrocontroller und Digitale Elektronik 89c2051 16Bit Addieren


von Forest (Gast)


Lesenswert?

Hat jemand eine Ahnung wie ich in Assambler Sprache ein 16Bit register
mit einem 8 Bit Register Addieren kann? Hab es mit dem Dptr Register
Probiert, dieses ist 16 Bit groß. Aber es gibt kein Befehl zum Addieren
mit dem Register.

Versuche grad eine höhere Auflösung beim DS1621 zu erreichen.
Vielleicht hab das schonmal jemand gemacht und könne mir verraten wie
er die ganze Sache gelöst hab.
mfg

von crazy horse (Gast)


Lesenswert?

mit dem DPTR wird das nichts.
Eine 16-Bit-Addition wird in 2 8-Bit-Additionen erledigt, jeweils die
low- und high-Bytes getrennt addieren, dabei einen evtl. Übertrag vom
low zum high-Byte beachten.
8051er-Syntax ist mir nicht mehr so geläufig, aber dass bekommst du
schon hin.
add low1, low2    //addition1 ohne carry (oder auch mit, wenn C null
ist)
addc high1,high2   //addition2 mit carry

wenn dein 2.Operand ist nur eine 8bit-Zahl ist, reicht als 2. Addition
ein ADDC A, #0 (nur das carry wird addiert)

von Thomas Zepf (Gast)


Lesenswert?

hier eine Keil C Kompatible Funktion
;Parameter R6/R7 Var16 (LSB In R7)
;          R5    Var8
;Result    R6/R7
;c Prototype:
;UINT16 Add8_16(UINT16 var1, UINT8 var2)
_Add8_16:
MOV  A,R7
ADD  A,R5
MOV  R7,A
JNC  exit
INC  R6
exit: RET

Anwendung in Assembler:

MOV   R6,#HIGH (1000h)
MOV   R7,#LOW  (1000h)
MOV   R5,#20h
LCALL _Add8_16 ;Result in R6R7 = 1020h
...

Thomas

von Forest (Gast)


Lesenswert?

Danke Thomas, es funktioniert!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.