CRC előállítása táblázattal konyha nyelven

Táblázatos módszer:

Végy két 256 elemű táblát. Ezekbe a  táblábka helyezz el előre számolt értékeket. (példákat kell keresni. pl. AN730).
Az egyik tábla a High (TH), a másik a Low (TL)

Végy három segédváltozót: 1. CBuff, 2. CHigh, 3. CLow

Eljárás:

- A CRC-zni kívánt adatokból sorban az első hármat töltsd a segédváltozókba.
- A CBuff tartalmával megcímezzük a TH egyik elemét és ezzel XOR kapcsolatba hozzuk a CHigh-t úgy, hogy az eredmény CHigh-ba kerüljön.
- A CBuff tartalommal megcímezzük a TL egyik elemét és ezzel XOR kapcsolatba hozzuk a CLow-t, az eredményt hasonlóan az előzőhöz, CLow-ba irányítjuk.
- ezután: CHigh -> CBuff,  CLow -> CHigh, következő adatunk -> CLow. Ha nincs következő adatunk a CLow-ba, akkor ide nullát töltünk. (ez a végén kétszer fordulhat elő)
- A folyamatot az adataink elfogyásáig ismételjük.

A végeredmény a CHigh és a CLow, ban kapjuk. Ezt csatoljuk az elküldendő adataink mögé.

A célban az egész eljárást megismételjük és a kapott eredményt összehasonlítjuk az elküldöttel. Egyeznie kell jó esetben.

Na ennyi :)

Itt a CRC16 szabványos táblázata:   (polinom: x16+x15+x2+1) (forrás AN730)

TH:
 dt 0, 0x80, 0x80, 0
 dt 0x80, 0, 0, 0x80
 dt 0x80, 0, 0, 0x80
 dt 0, 0x80, 0x80, 0
 dt 0x80, 0, 0, 0x80
 dt 0, 0x80, 0x80, 0
 dt 0, 0x80, 0x80, 0
 dt 0x80, 0, 0, 0x80
 dt 0x80, 0, 0, 0x80
 dt 0, 0x80, 0x80, 0
 dt 0, 0x80, 0x80, 0
 dt 0x80, 0, 0, 0x80
 dt 0, 0x80, 0x80, 0
 dt 0x80, 0, 0, 0x80
 dt 0x80, 0, 0, 0x80
 dt 0, 0x80, 0x80, 0
 dt 0x81, 0x1, 0x1, 0x81
 dt 0x1, 0x81, 0x81, 0x1
 dt 0x1, 0x81, 0x81, 0x1
 dt 0x81, 0x1, 0x1, 0x81
 dt 0x1, 0x81, 0x81, 0x1
 dt 0x81, 0x1, 0x1, 0x81
 dt 0x81, 0x1, 0x1, 0x81
 dt 0x1, 0x81, 0x81, 0x1
 dt 0x1, 0x81, 0x81, 0x1
 dt 0x81, 0x1, 0x1, 0x81
 dt 0x81, 0x1, 0x1, 0x81
 dt 0x1, 0x81, 0x81, 0x1
 dt 0x81, 0x1, 0x1, 0x81
 dt 0x1, 0x81, 0x81, 0x1
 dt 0x1, 0x81, 0x81, 0x1
 dt 0x81, 0x1, 0x1, 0x81
 dt 0x83, 0x3, 0x3, 0x83
 dt 0x3, 0x83, 0x83, 0x3
 dt 0x3, 0x83, 0x83, 0x3
 dt 0x83, 0x3, 0x3, 0x83
 dt 0x3, 0x83, 0x83, 0x3
 dt 0x83, 0x3, 0x3, 0x83
 dt 0x83, 0x3, 0x3, 0x83
 dt 0x3, 0x83, 0x83, 0x3
 dt 0x3, 0x83, 0x83, 0x3
 dt 0x83, 0x3, 0x3, 0x83
 dt 0x83, 0x3, 0x3, 0x83
 dt 0x3, 0x83, 0x83, 0x3
 dt 0x83, 0x3, 0x3, 0x83
 dt 0x3, 0x83, 0x83, 0x3
 dt 0x3, 0x83, 0x83, 0x3
 dt 0x83, 0x3, 0x3, 0x83
 dt 0x2, 0x82, 0x82, 0x2
 dt 0x82, 0x2, 0x2, 0x82
 dt 0x82, 0x2, 0x2, 0x82
 dt 0x2, 0x82, 0x82, 0x2
 dt 0x82, 0x2, 0x2, 0x82
 dt 0x2, 0x82, 0x82, 0x2
 dt 0x2, 0x82, 0x82, 0x2
 dt 0x82, 0x2, 0x2, 0x82
 dt 0x82, 0x2, 0x2, 0x82
 dt 0x2, 0x82, 0x82, 0x2
 dt 0x2, 0x82, 0x82, 0x2
 dt 0x82, 0x2, 0x2, 0x82
 dt 0x2, 0x82, 0x82, 0x2
 dt 0x82, 0x2, 0x2, 0x82
 dt 0x82, 0x2, 0x2, 0x82
 dt 0x2, 0x82, 0x82, 0x02

 TL:
 dt 0, 0x5, 0xf, 0xa
 dt 0x1b, 0x1e, 0x14, 0x11
 dt 0x33, 0x36, 0x3c, 0x39
 dt 0x28, 0x2d, 0x27, 0x22
 dt 0x63, 0x66, 0x6c, 0x69
 dt 0x78, 0x7d, 0x77, 0x72
 dt 0x50, 0x55, 0x5f, 0x5a
 dt 0x4b, 0x4e, 0x44, 0x41
 dt 0xc3, 0xc6, 0xcc, 0xc9
 dt 0xd8, 0xdd, 0xd7, 0xd2
 dt 0xf0, 0xf5, 0xff, 0xfa
 dt 0xeb, 0xee, 0xe4, 0xe1
 dt 0xa0, 0xa5, 0xaf, 0xaa
 dt 0xbb, 0xbe, 0xb4, 0xb1
 dt 0x93, 0x96, 0x9c, 0x99
 dt 0x88, 0x8d, 0x87, 0x82
 dt 0x83, 0x86, 0x8c, 0x89
 dt 0x98, 0x9d, 0x97, 0x92
 dt 0xb0, 0xb5, 0xbf, 0xba
 dt 0xab, 0xae, 0xa4, 0xa1
 dt 0xe0, 0xe5, 0xef, 0xea
 dt 0xfb, 0xfe, 0xf4, 0xf1
 dt 0xd3, 0xd6, 0xdc, 0xd9
 dt 0xc8, 0xcd, 0xc7, 0xc2
 dt 0x40, 0x45, 0x4f, 0x4a
 dt 0x5b, 0x5e, 0x54, 0x51
 dt 0x73, 0x76, 0x7c, 0x79
 dt 0x68, 0x6d, 0x67, 0x62
 dt 0x23, 0x26, 0x2c, 0x29
 dt 0x38, 0x3d, 0x37, 0x32
 dt 0x10, 0x15, 0x1f, 0x1a
 dt 0xb, 0xe, 0x4, 0x1
 dt 0x3, 0x6, 0xc, 0x9
 dt 0x18, 0x1d, 0x17, 0x12
 dt 0x30, 0x35, 0x3f, 0x3a
 dt 0x2b, 0x2e, 0x24, 0x21
 dt 0x60, 0x65, 0x6f, 0x6a
 dt 0x7b, 0x7e, 0x74, 0x71
 dt 0x53, 0x56, 0x5c, 0x59
 dt 0x48, 0x4d, 0x47, 0x42
 dt 0xc0, 0xc5, 0xcf, 0xca
 dt 0xdb, 0xde, 0xd4, 0xd1
 dt 0xf3, 0xf6, 0xfc, 0xf9
 dt 0xe8, 0xed, 0xe7, 0xe2
 dt 0xa3, 0xa6, 0xac, 0xa9
 dt 0xb8, 0xbd, 0xb7, 0xb2
 dt 0x90, 0x95, 0x9f, 0x9a
 dt 0x8b, 0x8e, 0x84, 0x81
 dt 0x80, 0x85, 0x8f, 0x8a
 dt 0x9b, 0x9e, 0x94, 0x91
 dt 0xb3, 0xb6, 0xbc, 0xb9
 dt 0xa8, 0xad, 0xa7, 0xa2
 dt 0xe3, 0xe6, 0xec, 0xe9
 dt 0xf8, 0xfd, 0xf7, 0xf2
 dt 0xd0, 0xd5, 0xdf, 0xda
 dt 0xcb, 0xce, 0xc4, 0xc1
 dt 0x43, 0x46, 0x4c, 0x49
 dt 0x58, 0x5d, 0x57, 0x52
 dt 0x70, 0x75, 0x7f, 0x7a
 dt 0x6b, 0x6e, 0x64, 0x61
 dt 0x20, 0x25, 0x2f, 0x2a
 dt 0x3b, 0x3e, 0x34, 0x31
 dt 0x13, 0x16, 0x1c, 0x19
 dt 0x8, 0xd, 0x7, 0x02