A więc jak działa mój algorytm:
1. Dekoduję otrzymane 128 zbocz za pomocą manchesteru i otrzymuję ciąg 64 bitów - cała ramkę tego standardu (od razu w przerwaniu ICR timera 1)
2. Szukam 9-ciu jedynek rotując cały czas zmienną o 1 bit w lewo (zmienna<<1) - jeśli znajdę 9 jedynek to mam pewność że to początek ramki, bo: a) poprzednia ramka musiała się skończyć zerem b) nawet jeśli 10-ty bit ramki ma wartość 1 (może tak być), to i tak wcześniej wykryłem 9 jedynek, więc jest wszystko wyrównane OK. Jeśli nie ma 9-ciu jedynek to idź do 4.
3. liczę bity parzystości pionowej i poziomej, jeśli są zgodne to skocz do 6, jeśli nie to do 4
4. jeśli nie znalazłem 9-ciu jedynek w pkt 2, lub nie zgadza się parzystość to neguję całe dane i powtarzam czynność z punktu 2 (na wypadek, gdybym zaczął odbiór od złego zbocza), jeśli dalej nie ma 9-ciu jedynek to odebrano śmieci, i zaczynamy odbiór od początku, jeśli są jedynki to idź do 5.
5. liczę bity parzystości pionowej i poziomej, jeśli są zgodne to skocz do 6, jeśli nie to zaczynamy odbiór od początku
6. przystępujemy do dekodowania wyrównanej ramki - to już bułeczka z masełkiem
Taki jest mój algorytm i działa bardzo dobrze, a ponadto w tle - w sumie kod wystawia flagę po zdekodowaniu i zapisaniu do zmiennej globalnej zdekodowanego numeru karty, a kolejny odbiór rozpoczyna po wykasowaniu tej flagi przez program główny.
---
kodów na razie nie chcę udostępniać na forum, gdyż zamierzam opisać całą tematykę tego typu kart w artykule na konkurs.