Dear all,
Maybe someone might find this useful:
Maybe someone might find this useful:
Code:
' ************************************ ' * Original code in C, by Mr L.Bies * ' * Ported to PB9 by Mr J.A.du Toit * ' **************************************************************************************** ' * + Usefull Links: * ' *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~* ' * http://www.lammertbies.nl/comm/software/index.html * ' * http://www.lammertbies.nl/comm/info/crc-calculation.html?crc=000b001600&method=hex * ' **************************************************************************************** #COMPILE EXE #DIM ALL %TRUE = -1 GLOBAL crc_tabccitt() AS WORD GLOBAL crc_tabccitt_init AS LONG SUB init_crcccitt_tab() LOCAL i AS WORD LOCAL j AS WORD LOCAL crc AS WORD LOCAL c AS WORD LOCAL P_CCITT AS WORD P_CCITT = &h1021 REDIM crc_tabccitt(0 TO 255) FOR i = 0 TO 255 crc = 0 c = i : SHIFT LEFT c, 8 FOR j = 0 TO 7 IF ISTRUE((crc XOR c) AND &h8000) THEN SHIFT LEFT crc, 1 crc = crc XOR P_CCITT ELSE SHIFT LEFT crc, 1 END IF SHIFT LEFT c, 1 NEXT crc_tabccitt(i) = crc NEXT crc_tabccitt_init = %TRUE END SUB FUNCTION update_crc_ccitt(BYVAL crc AS WORD, BYVAL c AS BYTE) AS WORD LOCAL tmp AS WORD LOCAL short_c AS WORD short_c = &h00FF AND c IF ISFALSE(crc_tabccitt_init) THEN init_crcccitt_tab tmp = crc: SHIFT RIGHT tmp, 8 tmp = tmp XOR short_c SHIFT LEFT crc, 8 crc = crc XOR crc_tabccitt(tmp) FUNCTION = crc END FUNCTION FUNCTION PBMAIN () AS LONG DIM A() AS BYTE DIM B() AS BYTE LOCAL i AS LONG LOCAL crc_ccitt_0000 AS WORD REDIM A(0 TO 4) ARRAY ASSIGN A() = &h00, &h0b, &h00, &h16, &h00 crc_ccitt_0000 = 0 FOR i = 0 TO 4 crc_ccitt_0000 = update_crc_ccitt(crc_ccitt_0000, A(i)) NEXT 'crc_ccitt_0000 = MAK(WORD, HI(BYTE, crc_ccitt_0000), LO(BYTE, crc_ccitt_0000)) MSGBOX HEX$(crc_ccitt_0000, 4) + " expect B7 CA" REDIM B(0 TO 8) ARRAY ASSIGN B() = &h31, &h32, &h33, &h34, &h35, &h36, &h37, &h38, &h39 ' "123456789" crc_ccitt_0000 = 0 FOR i = 0 TO 8 crc_ccitt_0000 = update_crc_ccitt(crc_ccitt_0000, B(i)) NEXT MSGBOX HEX$(crc_ccitt_0000, 4) + " expect 31 C3" END FUNCTION