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

📄 blind_node.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 5 页
字号:
//   71    SLEEP_STATE,
//   72    BLINK_LED_STATE

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   73 } blindNodeState;
blindNodeState:
        DS 1
//   74 
//   75 
//   76 
//   77 /******************************************************************************
//   78 *
//   79 * This function is the main loop for Blind Node
//   80 ******************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//   81 void RunBlindNode(void){
RunBlindNode:
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function RunBlindNode
        FUNCALL RunBlindNode, lcdUpdate
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, SendText
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, SendConfiguration
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, memset
        LOCFRAME XSTACK, 27, STACK
        ARGFRAME XSTACK, 27, STACK
        FUNCALL RunBlindNode, ReqSignals
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, AddToSleepTimer
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, HandleBCastReply
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, CalculateUpperLeft
        LOCFRAME XSTACK, 31, STACK
        ARGFRAME XSTACK, 31, STACK
        FUNCALL RunBlindNode, ChooseNodesToUse
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, AddToSleepTimer
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, ReqSignals
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, AddToSleepTimer
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, CreateInputArrayToLocEngine
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, CalculatePosition
        LOCFRAME XSTACK, 29, STACK
        ARGFRAME XSTACK, 29, STACK
        FUNCALL RunBlindNode, PrintXY
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, DiscardResult
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, SendText
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, SendPosition
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, SendDebugInfo
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, AddToSleepTimer
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, AddToSleepTimer
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        FUNCALL RunBlindNode, mpmSetAndResumeMacAndCpuPowerMode
        LOCFRAME XSTACK, 25, STACK
        ARGFRAME XSTACK, 25, STACK
        MOV	A,#-0xe
        LCALL	?BANKED_ENTER_XDATA
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 14)
        ; Saved register size: 14
        ; Auto size: 11
        MOV	A,#-0xb
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 25)
//   82    BYTE     packetType;
//   83    UINT8    refNodeRequested;
//   84    UINT8    nbrOfPacketsReceivedFromNode;
//   85    UINT8    nbrOfNodesToUse;
//   86    UINT8    nbrOfRefNodesReceivedForCalculation;
//   87    WORD     refNodeRequestShortAddress;
//   88    UINT8_1  xLocValue, yLocValue;
//   89    UINT16_2 xUpperLeft, yUpperLeft, xStrongestNode, yStrongestNode;
//   90    UINT8    strongestRssi;
//   91 
//   92    x = y = UNINITIALIZED_XY_VALUE;
        MOV	DPTR,#y
        MOV	A,#-0x1
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
        MOV	DPTR,#x
        MOVX	@DPTR,A
        INC	DPTR
        MOVX	@DPTR,A
//   93 
//   94    a_val = DEFAULT_A_PARAM;
        MOV	A,#0x4e
        MOV	DPTR,#a_val
        MOVX	@DPTR,A
//   95    n_index = DEFAULT_N_INDEX;
        MOV	A,#0x10
        MOV	DPTR,#n_index
        MOVX	@DPTR,A
//   96 
//   97    blindNodeState = INIT_BCAST;
        CLR	A
        MOV	DPTR,#blindNodeState
        MOVX	@DPTR,A
//   98 
//   99    SET_BUFFER_EMPTY();
        MOV	DPTR,#buffer
        MOVX	@DPTR,A
//  100 
//  101    // disable sleep timer
//  102    INT_ENABLE(INUM_ST, INT_OFF);
        CLR	0xa8.5
//  103 
//  104    // setup for sending A and N to PC after startup
//  105    parametersReceived = TRUE;
        MOV	A,#0x1
        MOV	DPTR,#parametersReceived
        MOVX	@DPTR,A
//  106 
//  107 #ifdef CC2430EB
//  108    lcdUpdate("CC4231","Blind node");
        ; Setup parameters for call to function lcdUpdate
        MOV	R4,#(`?<Constant "Blind node">` & 0xff)
        MOV	R5,#((`?<Constant "Blind node">` >> 8) & 0xff)
        MOV	R2,#(`?<Constant "CC4231">` & 0xff)
        MOV	R3,#((`?<Constant "CC4231">` >> 8) & 0xff)
        MOV	DPTR,#(lcdUpdate & 0xffff)
        MOV	A,#((lcdUpdate >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  109 #endif
//  110    SendText("Blind Node Powerup");
        ; Setup parameters for call to function SendText
        MOV	R2,#(`?<Constant "Blind Node Powerup">` & 0xff)
        MOV	R3,#((`?<Constant "Blind Node Powerup">` >> 8) & 0xff)
        MOV	DPTR,#(SendText & 0xffff)
        MOV	A,#((SendText >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  111 
//  112    // enable watch dog timer
//  113    WDT_SET_TIMEOUT_PERIOD(SEC_1);
        ANL	0xc9,#0xfc
        MOV	A,0xc9
        MOV	0xc9,0xc9
//  114    WDT_ENABLE();
        ORL	0xc9,#0x8
        SJMP	??RunBlindNode_0
//  115 
//  116    while(TRUE) {
//  117       WDT_RESET();
//  118 
//  119       if(parametersReceived){
//  120          // ack to pc with packet contains A and N
//  121          SendConfiguration();
??RunBlindNode_1:
        ; Setup parameters for call to function SendConfiguration
        MOV	DPTR,#(SendConfiguration & 0xffff)
        MOV	A,#((SendConfiguration >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  122          parametersReceived = FALSE;
        CLR	A
        MOV	DPTR,#parametersReceived
        MOVX	@DPTR,A
//  123          // start a new calculation with new parameters
//  124          blindNodeState = INIT_BCAST;
        MOV	DPTR,#blindNodeState
        MOVX	@DPTR,A
//  125       }
//  126 
//  127       switch (blindNodeState){
//  128       case INIT_BCAST:
//  129          nbrOfBCastReplys = 0;
??RunBlindNode_2:
        CLR	A
        MOV	DPTR,#nbrOfBCastReplys
        MOVX	@DPTR,A
//  130          nbrOfRetries = 0;
        MOV	DPTR,#nbrOfRetries
        MOVX	@DPTR,A
//  131          memset(refNodesForCalculation, 0, sizeof(refNodesForCalculation));
        ; Setup parameters for call to function memset
        MOV	?V0 + 2,#0x40
        MOV	?V0 + 3,A
        MOV	R0,#?V0 + 2
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 27)
        MOV	R4,#0x0
        MOV	R5,#0x0
        MOV	R2,#(refNodesForCalculation & 0xff)
        MOV	R3,#((refNodesForCalculation >> 8) & 0xff)
        MOV	DPTR,#(memset & 0xffff)
        MOV	A,#((memset >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,#0x2
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 25)
//  132          blindNodeState = BCAST_REQUEST;
        MOV	A,#0x1
??RunBlindNode_3:
        MOV	DPTR,#blindNodeState
        MOVX	@DPTR,A
//  133          SET_BUFFER_EMPTY();
??RunBlindNode_4:
        CLR	A
        MOV	DPTR,#buffer
??RunBlindNode_5:
        MOVX	@DPTR,A
??RunBlindNode_0:
        MOV	A,#0xf
        ANL	A,0xc9
        ORL	A,#0xa0
        MOV	0xc9,A
        MOV	A,#0xf
        ANL	A,0xc9
        ORL	A,#0x50
        MOV	0xc9,A
        MOV	DPTR,#parametersReceived
        MOVX	A,@DPTR
        JNZ	??RunBlindNode_1
        MOV	DPTR,#blindNodeState
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_DENSE
`?<Jumptable for RunBlindNode>_0`:
        DB        0
        DB        9
        DW        ??RunBlindNode_6
        DW        ??RunBlindNode_2
        DW        ??RunBlindNode_7
        DW        ??RunBlindNode_8
        DW        ??RunBlindNode_9
        DW        ??RunBlindNode_10
        DW        ??RunBlindNode_11
        DW        ??RunBlindNode_12
        DW        ??RunBlindNode_13
        DW        ??RunBlindNode_14
        DW        ??RunBlindNode_14
//  134          break;
//  135       case BCAST_REQUEST:
//  136 #ifdef USE_LED
//  137          LED1 = LED_ON;
??RunBlindNode_7:
        CLR	0x90.0
//  138 #endif
//  139          ReqSignals(BROADCAST_ADDR);
        ; Setup parameters for call to function ReqSignals
        MOV	R2,#-0x1
        MOV	R3,#-0x1
        MOV	DPTR,#(ReqSignals & 0xffff)
        MOV	A,#((ReqSignals >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  140          nbrOfRetries++;
        MOV	DPTR,#nbrOfRetries
        MOVX	A,@DPTR
        INC	A
        MOVX	@DPTR,A
//  141 
//  142          blindNodeState = RECEIVE_BCAST_REPLY;
        MOV	A,#0x2
        MOV	DPTR,#blindNodeState
        MOVX	@DPTR,A
//  143          AddToSleepTimer(BLIND_NODE_WAIT_FOR_BCAST_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()
//  144          INT_SETFLAG(INUM_ST, INT_CLR);
        CLR	0xc0.7
//  145          INT_ENABLE(INUM_ST, INT_ON);
        SETB	0xa8.5
//  146 #ifdef USE_LED
//  147          LED1 = LED_OFF;
        SETB	0x90.0
        SJMP	??RunBlindNode_0
//  148 #endif
//  149          break;
//  150       case RECEIVE_BCAST_REPLY:
//  151          if (msgReceived)
??RunBlindNode_8:
        MOV	DPTR,#msgReceived
        MOVX	A,@DPTR
        JZ	??RunBlindNode_0
//  152          {
//  153             msgReceived = FALSE;
        CLR	A
        MOVX	@DPTR,A
//  154             packetType = buffer.b.pMsdu[PACKET_INDEX_TYPE];
//  155             if (packetType == PACKET_TYPE_REF_NODE_POSITION)
        MOV	DPTR,#(buffer + 27)
        MOVX	A,@DPTR
        XRL	A,#0x12
        JNZ	??RunBlindNode_4
//  156             {
//  157                HandleBCastReply(buffer.b.srcAddr.Short, buffer.b.mpduLinkQuality, buffer.b.pMsdu);
        ; Setup parameters for call to function HandleBCastReply
        MOV	R4,#((buffer + 27) & 0xff)
        MOV	R5,#(((buffer + 27) >> 8) & 0xff)
        MOV	DPTR,#(buffer + 23)
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPTR,#(buffer + 4)
        MOVX	A,@DPTR
        MOV	R2,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R3,A
        MOV	DPTR,#(HandleBCastReply & 0xffff)
        MOV	A,#((HandleBCastReply >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  158             }
//  159             SET_BUFFER_EMPTY();
        LJMP	??RunBlindNode_4 & 0xFFFF
//  160          }
//  161          // state transition handled by Sleep Timer
//  162          break;
//  163       case CHECK_REPLIES:
//  164          if(nbrOfRetries < MAX_NBR_OF_REQUESTS)
??RunBlindNode_9:
        MOV	DPTR,#nbrOfRetries
        MOVX	A,@DPTR
        CLR	C
        SUBB	A,#0x8
        JNC	??RunBlindNode_15
//  165          {
//  166             // Do a new broadcast
//  167             blindNodeState = BCAST_REQUEST;
        MOV	A,#0x1
??RunBlindNode_16:
        MOV	DPTR,#blindNodeState
        LJMP	??RunBlindNode_5 & 0xFFFF
//  168          }
//  169          else{
//  170             // Calculate upper left corner of 64x64 square, node with highest RSSI is
//  171             // placed in the midle of this square
//  172             CalculateUpperLeft(&xUpperLeft, &yUpperLeft, &xStrongestNode, &yStrongestNode, &strongestRssi);
??RunBlindNode_15:
        ; Setup parameters for call to function CalculateUpperLeft
        MOV	A,#0x6
        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,#0xb
        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, 29)
        MOV	A,#0xb
        LCALL	?XSTACK_DISP0_8

⌨️ 快捷键说明

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