Hi,
um Grunde geht es um das Register CCPR1L und CCPR1H.
CCPR1L beinhaltet die 8 MSB und CCPR1H die beiden LSB eines 10Bit Wertes
(häufig PWM bei PIC)
Da ich in meinem Programmcode ja keine "uint10_t" haben und es diese
wohl auch nicht gibt, muss ich die Variable als uint16_t anlegen.
Nun wird irgendwann diese in CCPR1L und CCPR1H geschoben.
Nun möchte ich eigentlich nur von euch wissen, ob folgender Code richtig
ist und/oder optimiert werden kann:
1 | uint16_t pwm = 0b0000001111111111;
|
2 | CCPR1H = pwm; // ich erwarte, dass von 0b00000011111111xx nur 0bxx bleibt
|
3 | CCPR1L = pwm >> 2;//...0b000000xxxxxxxx11 nur 0bxxxxxxxx bleibt
|
Dabei setze ich mir die 0bxxxxxxxx + 0bxx zu 0bxxxxxxxxxx im Geiste
zusammen.
Richtig? (Gibt es vielleicht eine Möglichkeit dieses im Programmcode
einfacher zu schreiben) -->Der Compiler/Debugger spielt mir irgendwie
übel zu und behauptet die beiden Variablen hätten nach der Zuordnung aus
pwm = 00000011 10101011
CCPR1H = 11101010
CCPR1L = 11101010
Kann ich mir nicht wirklich erklären, denn die Linke Seite einer
Zuweisung dürfe die Variable pwm doch nicht verändern. (?)
Grüße Oekel