Forum: Mikrocontroller und Digitale Elektronik Teil eines Registers auslesen


von lori (Gast)


Lesenswert?

Hallo ,

ich hoffe ich werde hier fündig...ich möchte einen Teil eines  Registers 
auslesen und zwar in C1RX0B1 (16 bits lang) sind von bit 0-7 der Status 
einer "Position" hinterlegt und von bit 8-15 der Status der 
"Temperature" aber ich brauche nur die "Position" ...wie kann ich nur 
diese ersten 8 bits in einer variable speichern ?

Ich bedanke mich für Eure Rückmeldung !!

von Lucas K. (lucas_k)


Lesenswert?

Schön wären noch ein paar Infos, mit welcher Hard- und Software du 
arbeitest und als was du deinen Wert speichern willst. Als Byte oder 
wieder als 16bit-UINT...

von Peter II (Gast)


Lesenswert?

int pos = C1RX0B1 & 127

von Martin K. (maart)


Lesenswert?

X = C1RX0B1

von lori (Gast)


Lesenswert?

Ohh Danke Danke
@Lukas ...ds-PIC30F4013 mikrocontroller -- MPLAB IDE 
(ICD3)---Programmiersprache C.
Die Variable ,wo der Wert gespeichert werden soll ist vom Typ  unsigned 
int.

@Peter C1RX0B1 & 127 --- warum diese Schreibweise? ja gut 255/2 =127,5 
.Sorry der Nachfrage ich will es genauer verstehen


@Martin --so wird sowohl Position als auch  Temp in X gespeichert ..das 
ich ich ja gar nicht ich brauche nur den Wert der Position.


Nochmal Danke an alle

von Ingo (Gast)


Lesenswert?

Pos = Register & 0xff

Was Peter schrieb ist falsch, da fehlt dann das achte Bit, denn 0...7 = 
8!


Ingo

von Peter II (Gast)


Lesenswert?

Ingo schrieb:
> Pos = Register & 0xff
> Was Peter schrieb ist falsch, da fehlt dann das achte Bit, denn 0...7 =
> 8!
> Ingo

ingo hat recht, hatte gedacht es waren 7bits gemeint.

von lori (Gast)


Lesenswert?

ok vielen Dank Ingo..ist mir jetzt klar geworden kann erst am Montag 
beim Testen überprüfen.

Ich hätte noch eine Frage

meine 4 Receive Registers sehen so aus (jeder ist 16 bits lang also 2 
Bytes)

C1RX0B1:[Byte1 enthält "current_Position"][Byte0 enthält "Last commanded 
command"]

C1RX0B2:[Byte3 enthält "Temperature"][Byte2 enthält "current_Position"]

C1RX0B3:[Byte5 enthält "Voltage"][Byte4 enthält "Status Code"]

C1RX0B4:[Byte7 enthält "Motor Effort"][Byte6 "not defined"]

Die Position ist ein Wert zwischen 0-1000 je nach welcher Spannung 
(0-5v) am µC anliegt.
Wie man sieht ist die Position in 2 Buffer (B1 von bit 8-15 und B2 von 
bit 0-7) hinterlegt.

Zum Speichern diese Position wollte ich so vorgehen:

a= C1RX0B1&0xFF00 (Danke Ingo !!!)
b= C1RX0B2&0x00FF (Danke Ingo !!!)
pos= a+b ?????

Würde das Endergebnis der Position so stimmen ??? wie würdet Ihr da 
vorgehen ? wie gesagt ich kann erst wieder am Montag Testen denn beim 
Testen sieht man schon ob den Wert diesen Endergebnis so stimmen kann 
oder nicht.... aber was sagt Ihr jetzt erstmal zu dieser Überlegung bzw 
Zuweisungen ?

Danke !!!

von Ingo (Gast)


Lesenswert?

Wenn a und b 16Bit sind passt das.


Ingo

von lori (Gast)


Lesenswert?

euuuh ich wollte a,b und pos als Tpy unsigned int deklarieren...passt 
das immer noch ?? oder welcher Datentyp sollte a,b haben ???
Danke !!

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.