Hallo allerseits !! Ich muss von ein paar empfangenen Daten die Parity prüfen. Also es werden 6 Bit übertragen und das 7. ist das Prüfbit. Nun muss ich ja errechnen ob die Summe der gesetzten Bits gerade oder ungerade ist und das dann mit dem Prüfbit vergleichen. Irgendwie sind alle Wege die ich mir so vorstelle um das zu Berechnen total kompliziert. g Zumal ich den µC auch beibringen muss was "gerade" oder "ungerade" ist ?!?! Hat da einer eine elegant einfache Lösung zur Prüfung der Parity? Thanks ! Stefan
hi, mit dem modulo-operator (gibt's in den meisten wenn nicht gar in allen programmiersprachen). der gibt den rest einer division aus, isser 1 isses ungerade, isser 0 isses gerade. gruss, harry
oh sorry, steht ja im header - BASCOM da geht's so: x = y mod 2 wenn x = 1 dann ist y ungerade, ansonsten gerade
ansonsten mach ne und verknüpfung mit 1. kommt aufs gleiche raus und geht auf jeden fall immer! und ich denk mal auch schneller...
@Harry, das ist keine Parity, damit wird nur ermittelt ob die Zahl ungerade oder gerade ist. Es gibt 3 unterschiedliche Algorithmen: 1.) Lookuptabelle: zB. für 8Bit Werte wird eine Lookuptabelle zu jedem der 256 möglichen Werte gespeichert, Dies Tabelle enthält dann zu jedem dieser Werte die Anzahl der gesetzten Bits. Ist diese Anzahl ungerade so wäre Parity = 1. Man kann nun diese Tabelle schrittweise verkürzen. Denn alle Werte von 0 bis 127 haben die negierte Parity zu allen Werten von 128 bis 255. Logisch da Werte >= 128 immer ein Bit mehr haben als deren Parallelwerte zwischen 0 bis 127. Natürlich kann man dies weitertreiben und wiederum die Tabelle halbieren auf 64 Einträge, usw. usw. Herraus käme Algorithmus 2.) 2.) in einer Schleife wird der Wert solange durch 2 dividiert bis er 0 ist. Vor jeder Division durch 2 == rechtsshift wird überprüft ob der Wert ungerade ist, und falls ja der Parity-Zähler inkrementiert. Man zählt also die 1 Bits in dem Wert. Parity = BitAnzahl and 1. 3.) A = 8 Bit Input A = (A div 2^4) xor (A and 2^4 -1) A = (A div 2^2) xor (A and 2^2 -1) A = (A div 2^1) xor (A and 2^1 -1) A = Parity in C A = (A >> 4) ^ (A & 0x0F) A = (A >> 2) ^ (A & 0x03) A = (A >> 1) ^ (A & 0x01) Gruß Hagen
> A = (A >> 4) ^ (A & 0x0F) > A = (A >> 2) ^ (A & 0x03) > A = (A >> 1) ^ (A & 0x01) besser, die "unds" kannst du sparen:
1 | A ^= A >> 4; |
2 | A ^= A >> 2; |
3 | A ^= A >> 1; |
4 | parity = A & 1; |
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.