Forum: PC Hard- und Software PHP RS232 + Bit-Opertoren AND-Verknüpfung in ASCII/HEX/Byte?


von PHP-Lernender (Gast)


Lesenswert?

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&oumlffnet 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.

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.