mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik In einem Register nur einzelne Bits ändern


Autor: Variable in 2 Register schreiben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich möchte eine Variable:

unsigned int duty_cycle

die die Werte von 0 bis 1023 annehmen kann in folgende Register 
schreiben:

CCPR1L für die höherwertigen 8 Bits und CCP1CON, wobei die Bits 
0b00xx0000 die zwei LSBs sind.

wie mache ich das jetzt am geschicktesten?

bisher habe ich es so:
CCPR1L = duty_cycle >> 2;
CCP1CON = ( 16 * (duty_cycle - (CCPR1L << 2)))  //duty cycle 2 LSBs
  | ( 1 * PWM_MODE );

den PWM Mode möchte man ja eigentlich nicht jedes mal neu einstellen. 
Nur wie schreib ich die Bits da rein ohne die anderen Bits zu verändern?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>wobei die Bits
>0b00xx0000 die zwei LSBs sind.
>bisher habe ich es so:
>
>CCPR1L = duty_cycle >> 2;
>CCP1CON = ( 16 * (duty_cycle - (CCPR1L << 2)))  //duty cycle 2 LSBs
>  | ( 1 * PWM_MODE );

Ja, ziemlicher Schwachsinn den Microchip da verzapft hat.

CCP1CON &= ~0x30;
CCP1CON |= (duty_cycle & 0x03) << 4;

Autor: Variable in 2 Register schreiben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke für die Antwort!

Also erst auf Null setzen und dann den neuen drüber.

Vielen Dank

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
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




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.