The code below predicts the CRC byte value
var b = new Array() var newb = new Array() var A,ip; b[0] = 0; b[1] = 0; b[2] = 0; b[3] = 0; b[4] = 0; b[5] = 0; b[6] = 0; b[7] = 0; function crc( ip ) { a = b[0] ^ip newb[ 2 ] = a ^ b[3] newb[ 3 ] = a ^ b[4] b[0] = b[1] b[1] = b[2] b[2] = a ^ b[3] b[3] = a ^ b[4] b[4] = b[5] b[5] = b[6] b[6] = b[7] b[7] = a var opStr= " " + b[7] + " " + b[6] + " " + b[5] + " " + b[4] + " " + b[3] + " " + b[2] + " " + b[1] + " " + b[0] + "This predicts the sequence.
" var opNum= ( b[7]*128 + b[6]*64 + b[5]*32 + b[4]*16 + b[3]*8 + b[2]*4 + b[1]*2 + b[0] ) self.document.write( " 0x "+opNum.toString(16) + opStr ) } crc(1) crc(0) crc(1) crc(0) crc(1) crc(0) crc(1) crc(0) crc(1) crc(1) crc(1) crc(1) crc(1)
The PIC code is:
;-------------------------------------------------------------------------- ; Sec 4.2 Main Program Init Code ;-------------------------------------------------------------------------- cblock CRCcrc CRCa endc CRCts ; CRC polynomial for DS18S20 page 8 of 23 ; ; a > [8] > [7] > [6] > [5] > [4] + a > [3] + a > [2] > [1] > [0] + i/p > a ; ; ip is in bit 0 ; work out a = crc:bit0 xor i/p xorwf CRCcrc,w andlw 0x01 ; fill w with 1s or 0s based on bit 0 xorlw 0x01 addlw 0xFF ; store A movwf CRCa ; ; now prepare crc, shift CRC to new position, opens up bit 7 ; rrf CRCcrc,f ; ; work out bit3 xor a ; work out bit2 xor a ; movlw ( 0<<7 | 1<<3 | 1<<2 ) andwf CRCcrc,w xorwf CRCa,f ; ; update CRC but orint new values for bit 7 , bit 3 and bit2. ; ; ; zero bit 7, bit 3, bit 2 in CRC ; movlw ~( 1<<7 | 1<<3 | 1<<2 ) andwf CRCcrc,f ; ; mask of new values for bit 7, bit 3, bit 2 ; movfw CRCa ; add bit 7, bit 3, bit 2 to CRC andlw ( 1<<7 | 1<<3 | 1<<2 ) iorwf CRCcrc,f return Start movlw 0x00 movwf CRCcrc movlw 1 call CRCts movlw 0 call CRCts movlw 1 call CRCts movlw 0 call CRCts movlw 1 call CRCts movlw 0 call CRCts movlw 1 call CRCts movlw 0 call CRCts movlw 1 call CRCts movlw 1 call CRCts movlw 1 call CRCts movlw 1 call CRCts movlw 1 call CRCts movlw 1 call CRCts movlw 1I single stepped the code and it followed the sequence predicted by this web page.