Gast
#284758
Hallo!
Ich habe folgendes Problem.
Ich möchte den Wert eines 16Bit Timers mit einer Methode auslesen und
diesen dann zurück geben. Dazu muß ich aus dem High und Low Register
einen short basteln. Ich hab mir folgenden Code ausgedacht.
read_16Bit_Timer_Value(char Timern){
short value=0x0000;
if(Timern==1){
char low = TCNT1L;
char high = TCNT1H;
value = value | high;
value = value<<8;
value = value | low; // hier geht scheinbar was schief
return(value);
}
Ich arbeite mit AVRStudio und Zielplattform ist ein AT90CAN128.
Bei meinem code passiert jetzt folgendes. Ich lese das high und das
low Register jeweils in ein char aus. Die Werte stimmen laut AVRstudio.
Danach kommt zuerst der high teil in die short variable. Das paßt auch
noch. Der shift ist auch ok. Wenn ich dann aber die Low variable dazu
haben will dann ist der "high"teil in der shortvariablen
aufeinmal 0xFF! (vorher 0x01). Warum? Hab ich da einen Denkfehler?
Gibt es für mein Problem eine bessere Lösung?
Vielen Dank :-)