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


von Variable in 2 Register schreiben (Gast)


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:
1
CCPR1L = duty_cycle >> 2;
2
CCP1CON = ( 16 * (duty_cycle - (CCPR1L << 2)))  //duty cycle 2 LSBs
3
  | ( 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?

von holger (Gast)


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;

von Variable in 2 Register schreiben (Gast)


Lesenswert?

danke für die Antwort!

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

Vielen Dank

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.