• PicŪ Basic

  • Re: CCITT CRC16 [CRC-16] Routines

    What I use. Pulled and modified from the ether somewhere

    Dim CRC As Word ;CRC16 value
    Dim CRC_P As Byte ;Data Array pointer
    Dim CRC_B As Byte ;Transfer Buffer
    Dim CRC_C As Byte ;Counter
    Dim SArray[10] as Byte ;Array of data to do CRC on

    ;Generate CRC
    Clear CRC
    For CRC_P = 0 To 9
    CRC_B = SArray[CRC_P]
    Call CRC16
    Next CRC_P
    'CRC now has CRC-16

    ; CRC-16 (x^16+x^15+x^2+x^0)
    ; Input: CRC_B = Data byte for CRC calculation
    ;************************************************* *******************
    CRC16: ;Note:- CRC is a word. CRC =>LowByte, CRCH =>HighByte
    Movlw 8
    Movwf CRC_C ;Load bit counter
    Movf CRC,W ;Low byte
    Xorwf CRC_B,W
    Rrf CRCH ;High byte
    Rrf CRC ;Low byte
    Andlw 1
    Bz CRC_Skip
    Movlw 0xA0
    Xorwf CRCH ;High byte
    Movlw 0x01
    Xorwf CRC ;Low byte
    Rrf CRC_B
    Decfsz CRC_C
    Jump CRC_Loop

    See http://www.lammertbies.nl/comm/info/...lculation.html as a good place to check your code working etc
    This article was originally published in forum thread: CCITT CRC16 [CRC-16] Routines started by pciebiera View original post