⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blind_node.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
        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
        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,#(CreateInputArrayToLocEngine & 0xffff)
        MOV	A,#((CreateInputArrayToLocEngine >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  274 
//  275          CalculatePosition(refNodes, a_val, n_index, &xLocValue, &yLocValue);
        ; Setup parameters for call to function CalculatePosition
        MOV	A,#0x5
        LCALL	?XSTACK_DISP0_8
        MOV	?V0 + 2,DPL
        MOV	?V0 + 3,DPH
        MOV	R0,#?V0 + 2
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 27)
        MOV	A,#0x6
        LCALL	?XSTACK_DISP0_8
        MOV	?V0 + 2,DPL
        MOV	?V0 + 3,DPH

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -