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


Menu
Recent Articles


Using PDS with SPI GLCD based on ST7565R Controller
Graphic LCDs based on the ST7565 are cheaper then GLCDs with other controllers. SPI requires only four pins. If the circuit