Forum: Mikrocontroller und Digitale Elektronik Register einlesen


von Bend G. (frankyfarell0)


Lesenswert?

Hallo an alle,

ich bin neuby in der uController programmierung und möchte den CAN-Error 
Counter Register einlesen (16 bit) uzw. das Register ist wie folg 
gestaltet
1
CAN_NECNTxL ----------------------------------------------
2
           !16!      TEC         !       REC           !0! 
3
            ----------------------------------------------                
4
        
5
TEC : bit 8 - bit 16
6
REC : bit 0 - bit 7
FRAGE: Könnte jemand mir bitte erklären, wie das Register eingelesen 
werden kann?

stimmt dem Vorgang wie folgt  zu?
1
uInt8 gRxErrorCounter ,  gTxErrorCounter ;
2
3
gRxErrorCounter = (uint8)CAN_NECNTxL ;  // erste 8 bit einlesen
4
gTxErrorCounter = (uint8)CAN_NECNTxL << 8; // nächste 8 bit einlesen
5
6
uint8 readREC(void)
7
{
8
 return gRxErrorCounter ;
9
}
10
11
uint8 readTEC(void)
12
{
13
 return gTxErrorCounter ;
14
}

Herzlichen Dank für Ihre Hilfe.
bend

von Karl H. (kbuchegg)


Lesenswert?

Bend Guet schrieb:


> uInt8 gRxErrorCounter ,  gTxErrorCounter ;
>
> gRxErrorCounter = (uint8)CAN_NECNTxL ;  // erste 8 bit einlesen
> gTxErrorCounter = (uint8)CAN_NECNTxL << 8; // nächste 8 bit einlesen

Wenn gTxErrorCounter eine 8 Bit Variable ist, dann bleibt nach dem 
Verschieben um 8 Bit nach links nichts mehr übrig.

Wenn schon, dann musst du nach RECHTS verschieben und nicht nach links.

von Dietrich L. (dietrichl)


Lesenswert?

Bend Guet schrieb:
> CAN_NECNTxL ----------------------------------------------
>            !16!      TEC         !       REC           !0!
>             ----------------------------------------------
>
> TEC : bit 8 - bit 16
> REC : bit 0 - bit 7

Nur damit es nicht zur Gewohnheit wird: die Bits zählen von 0 bis 15.

von Bend G. (frankyfarell0)


Lesenswert?

Dietrich L. schrieb:
> Bend Guet schrieb:
>> CAN_NECNTxL ----------------------------------------------
>>            !16!      TEC         !       REC           !0!
>>             ----------------------------------------------
>>
>> TEC : bit 8 - bit 16
>> REC : bit 0 - bit 7
>
> Nur damit es nicht zur Gewohnheit wird: die Bits zählen von 0 bis 15.

Dietrich


Sorry bit zählen bis 15!!

von Bend G. (frankyfarell0)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Bend Guet schrieb:
>
>
>> uInt8 gRxErrorCounter ,  gTxErrorCounter ;
>>
>> gRxErrorCounter = (uint8)CAN_NECNTxL ;  // erste 8 bit einlesen
>> gTxErrorCounter = (uint8)CAN_NECNTxL << 8; // nächste 8 bit einlesen
>
> Wenn gTxErrorCounter eine 8 Bit Variable ist, dann bleibt nach dem
> Verschieben um 8 Bit nach links nichts mehr übrig.
>
> Wenn schon, dann musst du nach RECHTS verschieben und nicht nach links.

Danke Karl,

besser wärre doch so.

uInt8 gRxErrorCounter ,  gTxErrorCounter ;

gRxErrorCounter = (uint8)CAN_NECNTxL ;  // ersten 8 bit einlesen
gTxErrorCounter = (uint8)CAN_NECNTxL >> 8; // nächsten 8 bit einlesen 
(REC bit überschreiben)


vielen Dank.

von Bend G. (frankyfarell0)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Bend Guet schrieb:
>
>
>> uInt8 gRxErrorCounter ,  gTxErrorCounter ;
>>
>> gRxErrorCounter = (uint8)CAN_NECNTxL ;  // erste 8 bit einlesen
>> gTxErrorCounter = (uint8)CAN_NECNTxL << 8; // nächste 8 bit einlesen
>
> Wenn gTxErrorCounter eine 8 Bit Variable ist, dann bleibt nach dem
> Verschieben um 8 Bit nach links nichts mehr übrig.
>
> Wenn schon, dann musst du nach RECHTS verschieben und nicht nach links.

Danke Karl,

besser wärre doch so.

uInt8 gRxErrorCounter ,  gTxErrorCounter ;

gRxErrorCounter = (uint8)CAN_NECNTxL ;  // ersten 8 bits einlesen
gTxErrorCounter = (uint8)CAN_NECNTxL >> 8; // nächsten 8 bits einlesen 
(REC bit überschreiben)


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.