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