📄 blind_node.s51
字号:
MOV ?V0 + 2,DPL
MOV ?V0 + 3,DPH
MOV R0,#?V0 + 2
LCALL ?PUSH_XSTACK_I_TWO
CFI CFA_XSP16 add(XSP16, 31)
MOV A,#0x8
LCALL ?XSTACK_DISP0_8
MOV R4,DPL
MOV R5,DPH
MOV A,#0x6
LCALL ?XSTACK_DISP0_8
MOV R2,DPL
MOV R3,DPH
MOV DPTR,#(CalculateUpperLeft & 0xffff)
MOV A,#((CalculateUpperLeft >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,#0x6
LCALL ?DEALLOC_XSTACK8
CFI CFA_XSP16 add(XSP16, 25)
// 173 nbrOfNodesToUse = ChooseNodesToUse(xUpperLeft, yUpperLeft);
; Setup parameters for call to function ChooseNodesToUse
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R4,A
INC DPTR
MOVX A,@DPTR
MOV R5,A
MOV DPL,?XSP + 0
MOV DPH,?XSP + 1
MOVX A,@DPTR
MOV R2,A
INC DPTR
MOVX A,@DPTR
MOV R3,A
MOV DPTR,#(ChooseNodesToUse & 0xffff)
MOV A,#((ChooseNodesToUse >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
MOV A,R1
MOV ?V0 + 5,A
// 174
// 175 if(nbrOfNodesToUse >= MIN_NBR_OF_REF_NODES)
CLR C
SUBB A,#0x3
JC ??RunBlindNode_17
// 176 {
// 177 // can't try more, but we can do a calculation with the nodes reaced
// 178 blindNodeState = SETUP_DATA_COLLECTING;
MOV A,#0x4
SJMP ??RunBlindNode_16
// 179 }
// 180 else
// 181 {
// 182 // no we can't do a calculation, go to sleep...
// 183 AddToSleepTimer(BLIND_NODE_POWER_DOWN_PERIODE);
??RunBlindNode_17:
; Setup parameters for call to function AddToSleepTimer
MOV R2,#-0x48
MOV R3,#0xb
MOV DPTR,#(AddToSleepTimer & 0xffff)
MOV A,#((AddToSleepTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 184 INT_SETFLAG(INUM_ST, INT_CLR);
CLR 0xc0.7
// 185 INT_ENABLE(INUM_ST, INT_ON);
SETB 0xa8.5
// 186 blindNodeState = SLEEP_STATE;
MOV A,#0x8
LJMP ??RunBlindNode_16 & 0xFFFF
// 187 }
// 188 }
// 189 break;
// 190 case SETUP_DATA_COLLECTING:
// 191 blindNodeState = REQUEST_REF_NODE_PACKET;
??RunBlindNode_10:
MOV A,#0x5
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 192 refNodeRequested = 0;
MOV R7,#0x0
// 193 nbrOfPacketsReceivedFromNode = 0;
MOV R6,#0x0
// 194 nbrOfReqTimeOuts = 0;
CLR A
MOV DPTR,#nbrOfReqTimeOuts
MOVX @DPTR,A
// 195 nbrOfRefNodesReceivedForCalculation = 0;
MOV ?V0 + 4,A
LJMP ??RunBlindNode_0 & 0xFFFF
// 196 break;
// 197 case REQUEST_REF_NODE_PACKET:
// 198 refNodeRequestShortAddress = refNodesForCalculation[refNodeRequested].shortAddress;
??RunBlindNode_11:
MOV ?V0 + 0,R7
MOV ?V0 + 1,#0x0
MOV A,#0x3
MOV R0,#?V0 + 0
LCALL ?S_SHL
MOV A,?V0 + 0
ADD A,#(refNodesForCalculation & 0xff)
MOV DPL,A
MOV A,?V0 + 1
ADDC A,#((refNodesForCalculation >> 8) & 0xff)
MOV DPH,A
MOVX A,@DPTR
MOV ?V0 + 0,A
INC DPTR
MOVX A,@DPTR
MOV ?V0 + 1,A
// 199 ReqSignals(refNodeRequestShortAddress);
; Setup parameters for call to function ReqSignals
MOV R2,?V0 + 0
MOV R3,A
MOV DPTR,#(ReqSignals & 0xffff)
MOV A,#((ReqSignals >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 200
// 201 blindNodeState = RECEIVE_REF_NODES_PACKET;
MOV A,#0x6
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 202 // starting sleep timer to go back to this state if no respons
// 203 AddToSleepTimer(BLIND_NODE_WAIT_FOR_REPLY);
; Setup parameters for call to function AddToSleepTimer
MOV R2,#0x64
MOV R3,#0x0
MOV DPTR,#(AddToSleepTimer & 0xffff)
MOV A,#((AddToSleepTimer >> 16) & 0xff)
LCALL ?BCALL ; Banked call to: DPTR()
// 204 INT_SETFLAG(INUM_ST, INT_CLR);
??RunBlindNode_18:
CLR 0xc0.7
// 205 INT_ENABLE(INUM_ST, INT_ON);
SETB 0xa8.5
LJMP ??RunBlindNode_0 & 0xFFFF
// 206 break;
// 207 case RECEIVE_REF_NODES_PACKET:
// 208 if (msgReceived){
??RunBlindNode_12:
MOV DPTR,#msgReceived
MOVX A,@DPTR
JNZ $+5
LJMP ??RunBlindNode_19 & 0xFFFF
// 209 msgReceived = FALSE;
CLR A
MOVX @DPTR,A
// 210
// 211 packetType = buffer.b.pMsdu[PACKET_INDEX_TYPE];
// 212 if (packetType == PACKET_TYPE_REF_NODE_POSITION &&
// 213 refNodeRequestShortAddress == buffer.b.srcAddr.Short)
MOV DPTR,#(buffer + 27)
MOVX A,@DPTR
XRL A,#0x12
JZ $+5
LJMP ??RunBlindNode_4 & 0xFFFF
MOV DPTR,#(buffer + 4)
MOVX A,@DPTR
XRL A,?V0 + 0
JNZ ??RunBlindNode_20
INC DPTR
MOVX A,@DPTR
XRL A,?V0 + 1
??RunBlindNode_20:
JZ $+5
LJMP ??RunBlindNode_4 & 0xFFFF
// 214 {
// 215 nbrOfReqTimeOuts = 0;
CLR A
MOV DPTR,#nbrOfReqTimeOuts
MOVX @DPTR,A
// 216 if(nbrOfPacketsReceivedFromNode == 0)
MOV ?V0 + 2,?V0 + 4
MOV ?V0 + 3,A
MOV A,#0x3
MOV R0,#?V0 + 2
LCALL ?S_SHL
MOV A,?V0 + 2
ADD A,#(refNodesForCalculation & 0xff)
MOV R0,A
MOV A,?V0 + 3
ADDC A,#((refNodesForCalculation >> 8) & 0xff)
MOV R1,A
MOV A,R0
MOV R4,A
MOV A,R1
MOV R5,A
MOV A,R4
ADD A,#0x6
MOV R0,A
MOV A,R5
ADDC A,#0x0
MOV R1,A
MOV A,R0
MOV R2,A
MOV A,R1
MOV R3,A
MOV A,R6
JNZ ??RunBlindNode_21
// 217 {
// 218 // store x, y and addr
// 219 refNodesForCalculation[nbrOfRefNodesReceivedForCalculation].shortAddress = refNodeRequestShortAddress;
MOV DPL,R4
MOV DPH,R5
MOV A,?V0 + 0
MOVX @DPTR,A
INC DPTR
MOV A,?V0 + 1
MOVX @DPTR,A
// 220 refNodesForCalculation[nbrOfRefNodesReceivedForCalculation].x = BYTES_TO_WORD(buffer.b.pMsdu[PACKET_INDEX_X_H], buffer.b.pMsdu[PACKET_INDEX_X_L]);
MOV DPTR,#(buffer + 28)
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(buffer + 29)
MOVX A,@DPTR
MOV DPL,R4
MOV DPH,R5
INC DPTR
INC DPTR
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 221 refNodesForCalculation[nbrOfRefNodesReceivedForCalculation].y = BYTES_TO_WORD(buffer.b.pMsdu[PACKET_INDEX_Y_H], buffer.b.pMsdu[PACKET_INDEX_Y_L]);
MOV DPTR,#(buffer + 30)
MOVX A,@DPTR
MOV R1,A
MOV DPTR,#(buffer + 31)
MOVX A,@DPTR
MOV DPL,R4
MOV DPH,R5
INC DPTR
INC DPTR
INC DPTR
INC DPTR
MOVX @DPTR,A
INC DPTR
MOV A,R1
MOVX @DPTR,A
// 222 refNodesForCalculation[nbrOfRefNodesReceivedForCalculation].rssiAcc = 0;
MOV DPL,R2
MOV DPH,R3
CLR A
MOVX @DPTR,A
INC DPTR
MOVX @DPTR,A
// 223 }
// 224 // add RSSI value to accumulator
// 225 refNodesForCalculation[nbrOfRefNodesReceivedForCalculation].rssiAcc += ED_2_RSSI(LQI_2_ED(buffer.b.mpduLinkQuality));
??RunBlindNode_21:
MOV DPTR,#(buffer + 23)
MOVX A,@DPTR
RRC A
RRC A
ANL A,#0x3f
MOV R0,A
MOV A,#-0x6c
ADD A,R0
MOV R0,A
MOV A,#-0x1
ADDC A,#0x0
MOV R1,A
CLR C
CLR A
SUBB A,R0
MOV R0,A
CLR A
SUBB A,R1
MOV R1,A
MOV DPL,R2
MOV DPH,R3
MOVX A,@DPTR
ADD A,R0
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
ADDC A,R1
MOVX @DPTR,A
// 226 nbrOfPacketsReceivedFromNode++;
INC R6
// 227
// 228 if(nbrOfPacketsReceivedFromNode < NBR_OF_PACKETS_TO_REQUEST)
MOV A,R6
CLR C
SUBB A,#0x8
JNC ??RunBlindNode_22
// 229 {
// 230 blindNodeState = REQUEST_REF_NODE_PACKET;
??RunBlindNode_23:
MOV A,#0x5
LJMP ??RunBlindNode_3 & 0xFFFF
// 231 }
// 232 else
// 233 {
// 234 // enough packet received
// 235
// 236 // divide rssi accumulator on number of packets to get average RSSI
// 237 refNodesForCalculation[nbrOfRefNodesReceivedForCalculation].rssiAcc >>= NBR_OF_PACKETS_TO_REQUEST_2POW;
??RunBlindNode_22:
MOV DPL,R2
MOV DPH,R3
MOVX A,@DPTR
MOV ?V0 + 2,A
INC DPTR
MOVX A,@DPTR
MOV ?V0 + 3,A
MOV A,#0x3
MOV R0,#?V0 + 2
LCALL ?US_SHR
MOV DPL,R2
MOV DPH,R3
MOV A,?V0 + 2
MOVX @DPTR,A
INC DPTR
MOV A,?V0 + 3
MOVX @DPTR,A
// 238
// 239 // point to next ref node
// 240 refNodeRequested++;
INC R7
// 241 nbrOfRefNodesReceivedForCalculation++;
INC ?V0 + 4
// 242 if(refNodeRequested < nbrOfNodesToUse)
MOV A,R7
CLR C
SUBB A,?V0 + 5
JNC ??RunBlindNode_24
// 243 {
// 244 nbrOfPacketsReceivedFromNode = 0;
MOV R6,#0x0
// 245 blindNodeState = REQUEST_REF_NODE_PACKET;
SJMP ??RunBlindNode_23
// 246 }
// 247 else
// 248 {
// 249 blindNodeState = ESTIMATE_LOCATION;
??RunBlindNode_24:
MOV A,#0x7
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 250 INT_ENABLE(INUM_ST, INT_OFF);
CLR 0xa8.5
LJMP ??RunBlindNode_4 & 0xFFFF
// 251 }
// 252 }
// 253 }
// 254 SET_BUFFER_EMPTY();
// 255 }
// 256 else if (nbrOfReqTimeOuts >= NBR_OF_TIMEOUTS_ALLOWED)
??RunBlindNode_19:
MOV DPTR,#nbrOfReqTimeOuts
MOVX A,@DPTR
CLR C
SUBB A,#0x5
JNC $+5
LJMP ??RunBlindNode_0 & 0xFFFF
// 257 {
// 258 // reference node not reply, point to next ref node
// 259 refNodeRequested++;
INC R7
// 260 if(refNodeRequested < nbrOfNodesToUse)
MOV A,R7
CLR C
SUBB A,?V0 + 5
JNC ??RunBlindNode_25
// 261 {
// 262 nbrOfPacketsReceivedFromNode = 0;
MOV R6,#0x0
// 263 blindNodeState = REQUEST_REF_NODE_PACKET;
MOV A,#0x5
LJMP ??RunBlindNode_16 & 0xFFFF
// 264 }
// 265 else
// 266 {
// 267 blindNodeState = ESTIMATE_LOCATION;
??RunBlindNode_25:
MOV A,#0x7
MOV DPTR,#blindNodeState
MOVX @DPTR,A
// 268 INT_ENABLE(INUM_ST, INT_OFF);
CLR 0xa8.5
LJMP ??RunBlindNode_0 & 0xFFFF
// 269 }
// 270 }
// 271 break;
// 272 case ESTIMATE_LOCATION:
// 273 CreateInputArrayToLocEngine(xUpperLeft, yUpperLeft);
??RunBlindNode_13:
; Setup parameters for call to function CreateInputArrayToLocEngine
MOV A,#0x2
LCALL ?XSTACK_DISP0_8
MOVX A,@DPTR
MOV R4,A
INC DPTR
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -