Hi Mike,
I tried a DO-WHILE construct and I'm quite surprised by the results. I moved the starting and stopping back to where I had it originally and with the DO-WHILE I get 1496 cycles instead of 1730 for the 9 test-bytes. A 67 byte array, previously taking ~12600 cycles now executes in ~10800. Getting there....
Here's the current ASM code:
Code:
0012A0 M _MB_CRC_16
0012A0 6831 M setf _MB_CRC
0012A2 6832 M setf (_MB_CRC) + 1
0012A4 0E03 M movlw 003h
0012A6 5C3F M subwf _MB_Buffer_Ptr, W
0012A8 6E42 M movwf _MB_k
0012AA 6A40 M clrf _MB_i
0012AC M L00108
0012AC 0004 M clrwdt
0012AE 5040 M movf _MB_i, W
0012B0 5C42 M subwf _MB_k, W
0012B2 A0D8 M btfss STATUS, C
0012B4 EF80 F009 M goto L00109
0012B8 5040 M movf _MB_i, W
0012BA 0F56 M addlw low (_MB_Buffer)
0012BC 6EE9 M movwf FSR0L
0012BE 0E01 M movlw (_MB_Buffer) >> 8
0012C0 6AEA M clrf FSR0H
0012C2 22EA M addwfc FSR0H, F
0012C4 CFEF F013 M movff INDF0, T1
0012C8 5013 M movf T1, W
0012CA 1A31 M xorwf _MB_CRC, F
0012CC 6A41 M clrf _MB_j
0012CE M L00110
0012CE 0004 M clrwdt
0012D0 B641 M btfsc _MB_j, 003h
0012D2 EF7D F009 M goto L00111
0012D6 0004 M clrwdt
0012D8 A031 M btfss _MB_CRC, 000h
0012DA EF78 F009 M goto L00112
0012DE 90D8 M bcf STATUS, C
0012E0 3232 M rrcf _MB_CRC + 1, F
0012E2 3231 M rrcf _MB_CRC, F
0012E4 0E01 M movlw low (0A001h)
0012E6 1A31 M xorwf _MB_CRC, F
0012E8 0EA0 M movlw (0A001h) >> 8
0012EA 1A32 M xorwf _MB_CRC + 1, F
0012EC EF7B F009 M goto L00113
0012F0 M L00112
0012F0 90D8 M bcf STATUS, C
0012F2 3232 M rrcf _MB_CRC + 1, F
0012F4 3231 M rrcf _MB_CRC, F
0012F6 M L00113
0012F6 2A41 M incf _MB_j, F
0012F8 D7EA M bra L00110
0012FA M L00111
0012FA 2A40 M incf _MB_i, F
0012FC A0D8 M btfss STATUS, C
0012FE D7D6 M bra L00108
001300 M L00109
001300 0012 M return
/Henrik.
Bookmarks