The above subroutine reads adc values from two XBee and send the values out to a client, via ESP. All works fine except the CRC function that yields every time "253" whatever adc values are trasmitted!Code:if Flg_15 = True then @ INT_DISABLE RX_INT ; disable RX_INT interrupts if Head = 15 & FlagTime = False then W2 = 0 gosub XB1adc gosub XB2adc 'gosub XB3adc CIndex = 0 gosub XBee_Value Pulse[0] = "1" Pulse[1] = "5" Pulse[2] = "0" Pulse[3] = " " Pulse[4] = "A" Pulse[5] = "0" Pulse[6] = "=" Pulse[7] = Decode[3] Pulse[8] = Decode[2] Pulse[9] = Decode[1] Pulse[10] = Decode[0] CIndex = 1 gosub XBee_Value Pulse[11] = " " Pulse[12] = "A" Pulse[13] = "1" Pulse[14] = "=" Pulse[15] = Decode[3] Pulse[16] = Decode[2] Pulse[17] = Decode[1] Pulse[18] = Decode[0] CIndex = 2 gosub XBee_Value Pulse[19] = " " Pulse[20] = "A" Pulse[21] = "2" Pulse[22] = "=" Pulse[23] = Decode[3] Pulse[24] = Decode[2] Pulse[25] = Decode[1] Pulse[26] = Decode[0] '------------------ CIndex = 3 gosub XBee_Value Pulse[27] = " " Pulse[28] = "A" Pulse[29] = "3" Pulse[30] = "=" Pulse[31] = Decode[3] Pulse[32] = Decode[2] Pulse[33] = Decode[1] Pulse[34] = Decode[0] CIndex = 4 gosub XBee_Value Pulse[35] = " " Pulse[36] = "A" Pulse[37] = "4" Pulse[38] = "=" Pulse[39] = Decode[3] Pulse[40] = Decode[2] Pulse[41] = Decode[1] Pulse[42] = Decode[0] CIndex = 5 gosub XBee_Value Pulse[43] = " " Pulse[44] = "A" Pulse[45] = "5" Pulse[46] = "=" Pulse[47] = Decode[3] Pulse[48] = Decode[2] Pulse[49] = Decode[1] Pulse[50] = Decode[0] '------------------ CIndex = 6 gosub XBee_Value Pulse[51] = " " Pulse[52] = "A" Pulse[53] = "6" Pulse[54] = "=" Pulse[55] = Decode[3] Pulse[56] = Decode[2] Pulse[57] = Decode[1] Pulse[58] = Decode[0] CIndex = 7 gosub XBee_Value Pulse[59] = " " Pulse[60] = "A" Pulse[61] = "7" Pulse[62] = "=" Pulse[63] = Decode[3] Pulse[64] = Decode[2] Pulse[65] = Decode[1] Pulse[66] = Decode[0] CIndex = 8 gosub XBee_Value Pulse[67] = " " Pulse[68] = "A" Pulse[69] = "8" Pulse[70] = "=" Pulse[71] = Decode[3] Pulse[72] = Decode[2] Pulse[73] = Decode[1] Pulse[74] = Decode[0] '------------------ Start CRC Function W0 = 0 For DMY = 0 To 74 W0 = W0 + Pulse[DMY] next DMY DMY = W0//256 Pulse[75] = (255 - DMY) ' -------------------- End CRC function gosub Check_Status if Id > 51 then goto Skip_AK_15 Hserout ["AT+CIPSEND=",Id,44,55,55,13,10] HSERIN 500,Skip_AK_20, [WAIT (">"), DMY] Hserout [str Pulse\76,10] endif Skip_AK_15: Flg_15 = false @ INT_ENABLE RX_INT ; enable RX_INT interrupts goto Skip_All endif
All I am doing is to add up all the bytes in the word variable W0, extract the low byte and subtract this value to 255. But all I find everytime in Pulse[75] is the value 253. On the client the same algoritm yields the correct value!
I cannot find the reason for such a strange behaviour. What am I doing wrong? Any help is appreciated!
Pic 18F2620 @ 8 MHz + ESP8266 + XBee
Alberto
Bookmarks