Forum: Mikrocontroller und Digitale Elektronik 8Bits und 2Bits in eine Integer-Variable


von Paarthurnax (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,

wenn ich von einem Register ein spezielles Bit ansprechen möchte, kann 
ich ja xxxxbits.xxxx verwenden. Wird dann aber nur das entsprechende Bit 
aufgerufen und die anderen Bits des Register als unknown betrachtet oder 
werden wirklich auch nur die speziellen Bits aufgerufen? Denn ich möchte 
bei meiner PWM die 10bit-Auflösung benutzen, doch die besteht aus zwei 
Teilen zum Einen aus dem CCP1L Register (8bit) und die zwei speziellen 
Bits (DC1B-Bits) aus dem CCP1CON Register (2Bits). Ich möchte diese 
10Bits, die aus 8 und 2 Bits bestehen in eine Variable aus 16 Bits 
(integer) schreiben, doch ich habe null Ahnung, wie ich das machen kann. 
Ich wäre für eure Hilfe sehr dankbar, da ich langsam am Verzweifeln bin 
:-)

Mit freundlichen Grüßen

Paarthurnax

von Uhu U. (uhu)


Lesenswert?

Einfach zuweisen - die Bits 10 bis 15 werden automatisch auf einen 
konstanten Wert gesetzt, welcher das ist, hängt von der Harware ab.

Da sie keine Information tragen, kannst du sie anschließend durch 
bitweises & mit 0x3ff auf 0 setzen, falls sie nicht 0 sind.

von Bernd R. (Firma: Promaxx.net) (bigwumpus)


Lesenswert?

???

Du errechnest den 10-Bit-PWM-Wert in eine 16-Bit-Variable.

Dann nimmst Du Bit0 aus der Variable und speicherst es in das 
entsprechende Bit in CCP1CON.
Mit Bit1 verfährst Du genauso.

Also etwa:
CCP1CON.x=Variable.0
CCP1CON.y=Variable.1

Und dann nimmst Du Bit2 bis Bit9 und schreibst es in CCP1L

CCP1L=Variable>>2

Ich denke mal, man schaltet vorher das Update der Timer-Register ab und 
nachher wieder an, hab den Typen jetzt nicht genau im Kopf.

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.