Hallo,
Ich habe an der Seriellen schnittstelle einen ATMEGA168 mit DS3231
hängen. Er ist auf verschiedene Kommandos bei Empfang eines Bytes vom
Computer Programmiert:
So sollte z.b. bei senden von 'C' durch den Computer die aktuelle
Systemzeit des DS3231 zurückgegeben werden.
Dass funktioniert auch, problem ist jedoch dass umrechnen dieser als
Byte empfangenen Zeit in eine als ASCII darstelbare Zeit.
Ich kann die Zeit nicht auswerten, da ich mit den Bitoperatoren nicht
zurech komme.
Die Auswertung sieht wie folgt aus:
1 | $Zeit="ABCD";
|
2 | echo "Die serielle Schnittstelle konnte geöffnet werden!</br>";
|
3 | fwrite($fp,'C');
|
4 | sleep(2);
|
5 | $inhalt='ABCD';
|
6 | $inhalt=fread($fp, strlen($zeit));
|
7 |
|
8 | $flag1 = 0x0f;
|
9 | echo "</br> InhaltGes ";
|
10 | echo $inhalt;
|
11 | echo "</br> Inhalt[0] ";
|
12 | echo $inhalt[0];
|
13 |
|
14 | echo "</br>AND-Verknüpfung ";
|
15 | echo $inhalt[0] & $flag1;
|
16 |
|
17 | $sek1 = $inhalt[0] & 0x0f;
|
18 | $sek10 = $inhalt[0] & 0xf0;
|
19 | echo "</br>1: SEK 1 : ";
|
20 | echo $sek1;
|
21 | echo "</br>1: SEK 10 : ";
|
22 | echo $sek10;
|
23 |
|
24 | $sek10 >> 4;
|
25 | echo "</br>2: SEK 10 : ";
|
26 | echo $sek10;
|
Angenommen inhalt[0]='U' oder 85 oder 0x55.
Dann wird als AND-Verknüpfung von inhalt[0] und 0x0f = 0 ausgegeben.
Ebenso wird sek1 und sek10 = 0.
Scheinbar mache ich einen entscheidenden fehler.
Erstaunlich ist jedoch, dass bei inhalt[0]='8' oder 56 oder 0x38
tatsächlich 8 für die AND-Verknüpfung des gesamten Bytes mit 0x0f
erscheint.
Scheinbar scheint PHP inhalt[0] als char zu interpretieren und in ASCII
auszuwerten?
So etwas habe ich aber nochnie erlebt, und auch einiges suchen brachte
bisher keine Erklärung oder Lösungsmöglichkeit.