www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16 bit Addition PIC18


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: asdf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: asdf (Gast)
Datum:

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

Autor: Karol Babioch (johnpatcher)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: asdf (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.