Proton BASIC Compiler - Re: CCITT CRC16 [CRC-16] Routines


  • 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
    Asm
    Movlw 8
    Movwf CRC_C ;Load bit counter
    CRC_Loop:
    Movf CRC,W ;Low byte
    Xorwf CRC_B,W
    Clrc
    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
    CRC_Skip:
    Rrf CRC_B
    Decfsz CRC_C
    Jump CRC_Loop
    EndAsm
    Return

    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
  • Recent Activity

    towlerg-21522

    Driving 2 LCD Modules from 1 CPU

    Thread Starter: glenlivet

    I need to drive 2 separate 4-line displays (Hantronix HDM16416L). I'm using a common system wide data bus (RD0-RD7) to talk to all of the parallel...

    towlerg Today, 22:34 Go to last post