Forum: Mikrocontroller und Digitale Elektronik 16 bit Addition PIC18


von asdf (Gast)


Lesenswert?

Ich bin gerade dabei meinen PIC18F46k22 in C zu programmieren und bin 
auf folgendes Problem gestoßen: Ich müsste zu einem Registerpaar (CCPR1H 
und CCP1L) aus zwei 8-bit Register eine 16-bit Integer addieren. In ASM 
hätte ich damit kein Problem:
CCPR1H = INThigh + CCPR1H
CCPR1L = INTlow + CCPR1L
wenn carry = 1 : Increment CCPR1H

Wie kann ich das in C machen? kann ich auch einfach das Carry Flag 
abfragen?
Gibt es eine elegantere Lösung?

von Peter D. (peda)


Lesenswert?

asdf schrieb:
> Wie kann ich das in C machen?

Einfach addieren.
In C sind alle Operationen immer mindestens 16bittig.

Der Compiler darf aber auf 8Bit optimieren, wenn das Eergebnis keinen 
Unterschied macht.

von asdf (Gast)


Lesenswert?

Ich habe aber da Problem, dass CCPR1 keine 16-bit Zahl sit, sonder 2 
getrennte 8-bit Register

von Karol B. (johnpatcher)


Lesenswert?

Ich kenne weder die PIC Architektur noch die dazugehörigen Werkzeuge, 
aber im Falle von AVRs könnte man auch mittels "CCPR1" zugreifen. Der 
Compiler wandelt das dann entsprechend in zwei Zugriffe um.

Laut [1] sollte das auch in deinem Fall klappen. Ansonsten wird dort 
auch noch die Möglichkeit mittels Bit-Shift vorgestellt.

Mit freundlichen Grüßen,
Karol Babioch

[1]: http://www.mikroe.com/forum/viewtopic.php?t=19166

von asdf (Gast)


Lesenswert?

Ich habe eine Lösung gefunden: Ich kann einfach schreiben:
CCPR1+=zahl;

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.