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

📄 node.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 3 页
字号:
        DS 1
//   48 

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   49 MSG_BUFFER buffer;
buffer:
        DS 145
//   50 
//   51 
//   52 // flags

        RSEG XDATA_Z:XDATA:NOROOT(0)
        REQUIRE __INIT_XDATA_Z
//   53 BOOL msgReceived;
msgReceived:
        DS 1
//   54 
//   55 
//   56 /******************************************************************************
//   57 *
//   58 * Function to handle received packets
//   59 *
//   60 * This function handle messages common for both Blind and reference nodes.
//   61 * Other messages will be handled in blindNode.c or refNode.c
//   62 ******************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//   63 void NodeDataIndication(MCPS_DATA_INDICATION *pMDI){
NodeDataIndication:
        CFI Block cfiBlock0 Using cfiCommon0
        CFI Function NodeDataIndication
        FUNCALL NodeDataIndication, SetupRefNode
        LOCFRAME XSTACK, 10, STACK
        ARGFRAME XSTACK, 10, STACK
        FUNCALL NodeDataIndication, SetupBlindNode
        LOCFRAME XSTACK, 10, STACK
        ARGFRAME XSTACK, 10, STACK
        FUNCALL NodeDataIndication, memcpy
        LOCFRAME XSTACK, 12, STACK
        ARGFRAME XSTACK, 12, STACK
        MOV	A,#-0xa
        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 V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 10)
        ; Saved register size: 10
        ; Auto size: 0
//   64    BYTE packetType;
//   65 
//   66    packetType = pMDI->pMsdu[PACKET_INDEX_TYPE];
//   67 
//   68    switch (packetType){
        MOV	A,R2
        ADD	A,#0x1a
        MOV	DPL,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	DPH,A
        MOVX	A,@DPTR
        LCALL	?UC_SWITCH_SPARSE
`?<Jumptable for NodeDataIndication>_0`:
        DB        1
        DB        17
        DB        18
        DW        ??NodeDataIndication_0
        DB        2
        DB        32
        DW        ??NodeDataIndication_1
        DB        34
        DW        ??NodeDataIndication_2
        DW        ??NodeDataIndication_3
//   69    case PACKET_TYPE_SETUP_PARAMETER:
//   70       if (nodeType == REF_NODE){
??NodeDataIndication_1:
        MOV	A,R2
        ADD	A,#0x1b
        MOV	R2,A
        MOV	A,R3
        ADDC	A,#0x0
        MOV	R3,A
        MOV	DPTR,#nodeType
        MOVX	A,@DPTR
        JNZ	??NodeDataIndication_4
//   71          SetupRefNode(&pMDI->pMsdu[PACKET_INDEX_NBR_OF_CONFIG_DATA]);
        ; Setup parameters for call to function SetupRefNode
        MOV	DPTR,#(SetupRefNode & 0xffff)
        MOV	A,#((SetupRefNode >> 16) & 0xff)
??NodeDataIndication_5:
        LCALL	?BCALL               ; Banked call to: DPTR()
        SJMP	??NodeDataIndication_3
//   72       }
//   73       else{
//   74          SetupBlindNode(&pMDI->pMsdu[PACKET_INDEX_NBR_OF_CONFIG_DATA]);
??NodeDataIndication_4:
        ; Setup parameters for call to function SetupBlindNode
        MOV	DPTR,#(SetupBlindNode & 0xffff)
        MOV	A,#((SetupBlindNode >> 16) & 0xff)
        SJMP	??NodeDataIndication_5
//   75       }
//   76       break;
//   77    case PACKET_TYPE_BLINK_LED:
//   78       blinkLed = TRUE;
??NodeDataIndication_2:
        MOV	A,#0x1
        MOV	DPTR,#blinkLed
        SJMP	??NodeDataIndication_6
//   79       break;
//   80    // case PACKET_TYPE_BLIND_NODE_POSITION:
//   81    case PACKET_TYPE_BLIND_NODE_REQ_SIGNAL: /* only sent to ref node   */
//   82    case PACKET_TYPE_REF_NODE_POSITION:     /* only sent to blind node */
//   83       if(BUFFER_EMPTY()){
??NodeDataIndication_0:
        MOV	DPTR,#buffer
        MOVX	A,@DPTR
        JNZ	??NodeDataIndication_3
//   84          msgReceived = TRUE;
        MOV	A,#0x1
        MOV	DPTR,#msgReceived
        MOVX	@DPTR,A
//   85          memcpy(&buffer.b, pMDI, sizeof(MCPS_DATA_INDICATION));
        ; Setup parameters for call to function memcpy
        MOV	?V0 + 0,#-0x70
        MOV	?V0 + 1,#0x0
        MOV	R0,#?V0 + 0
        LCALL	?PUSH_XSTACK_I_TWO
        CFI CFA_XSP16 add(XSP16, 12)
        MOV	A,R2
        MOV	R4,A
        MOV	A,R3
        MOV	R5,A
        MOV	R2,#((buffer + 1) & 0xff)
        MOV	R3,#(((buffer + 1) >> 8) & 0xff)
        MOV	DPTR,#(memcpy & 0xffff)
        MOV	A,#((memcpy >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	A,#0x2
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 10)
//   86          SET_BUFFER_FILLED();
        MOV	A,#0x1
        MOV	DPTR,#buffer
??NodeDataIndication_6:
        MOVX	@DPTR,A
        CFI EndBlock cfiBlock0
//   87       }
//   88       break;
//   89    default:
//   90       break;
//   91    }
//   92 }
??NodeDataIndication_3:
        REQUIRE ?Subroutine0
        ; // Fall through to label ?Subroutine0

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
        CFI Block cfiBlock1 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 10)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        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)))
        MOV	R7,#0x2
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock1
//   93 
//   94 /******************************************************************************
//   95 *
//   96 * Sleep timer interrupt handler
//   97 ******************************************************************************/
//   98 #pragma vector=ST_VECTOR

        RSEG NEAR_CODE:CODE:NOROOT(0)
//   99 __near_func __interrupt void ST_IRQ(void){
ST_IRQ:
        CFI Block cfiBlock2 Using cfiCommon1
        CFI Function ST_IRQ
        FUNCALL ST_IRQ, ST_IRQ_RefNode
        LOCFRAME ISTACK, 11, STACK
        ARGFRAME ISTACK, 11, STACK
        FUNCALL ST_IRQ, ST_IRQ_BlindNode
        LOCFRAME ISTACK, 11, STACK
        ARGFRAME ISTACK, 11, STACK
        PUSH	A
        CFI A Frame(CFA_SP, 3)
        CFI CFA_SP SP+-3
        PUSH	PSW
        CFI PSW Frame(CFA_SP, 4)
        CFI CFA_SP SP+-4
        MOV	A,R0
        CFI R0 A
        PUSH	A
        CFI R0 Frame(CFA_SP, 5)
        CFI CFA_SP SP+-5
        MOV	A,R1
        CFI R1 A
        PUSH	A
        CFI R1 Frame(CFA_SP, 6)
        CFI CFA_SP SP+-6
        MOV	A,R2
        CFI R2 A
        PUSH	A
        CFI R2 Frame(CFA_SP, 7)
        CFI CFA_SP SP+-7
        MOV	A,R3
        CFI R3 A
        PUSH	A
        CFI R3 Frame(CFA_SP, 8)
        CFI CFA_SP SP+-8
        MOV	A,R4
        CFI R4 A
        PUSH	A
        CFI R4 Frame(CFA_SP, 9)
        CFI CFA_SP SP+-9
        MOV	A,R5
        CFI R5 A
        PUSH	A
        CFI R5 Frame(CFA_SP, 10)
        CFI CFA_SP SP+-10
        PUSH	DPL
        CFI DPL0 Frame(CFA_SP, 11)
        CFI CFA_SP SP+-11
        PUSH	DPH
        CFI DPH0 Frame(CFA_SP, 12)
        CFI CFA_SP SP+-12
        PUSH	B
        CFI B Frame(CFA_SP, 13)
        CFI CFA_SP SP+-13
        ; Saved register size: 11
        ; Auto size: 0
//  100    if (nodeType == REF_NODE){
        MOV	DPTR,#nodeType
        MOVX	A,@DPTR
        JNZ	??ST_IRQ_0
//  101        ST_IRQ_RefNode();
        ; Setup parameters for call to function ST_IRQ_RefNode
        MOV	DPTR,#(ST_IRQ_RefNode & 0xffff)
        MOV	A,#((ST_IRQ_RefNode >> 16) & 0xff)
        SJMP	??ST_IRQ_1
//  102    }
//  103    else{
//  104       ST_IRQ_BlindNode();
??ST_IRQ_0:
        ; Setup parameters for call to function ST_IRQ_BlindNode
        MOV	DPTR,#(ST_IRQ_BlindNode & 0xffff)
        MOV	A,#((ST_IRQ_BlindNode >> 16) & 0xff)
??ST_IRQ_1:
        LCALL	?BCALL               ; Banked call to: DPTR()
//  105    }
//  106 }
        POP	B
        CFI B SameValue
        CFI CFA_SP SP+-12
        POP	DPH
        CFI DPH0 SameValue
        CFI CFA_SP SP+-11
        POP	DPL
        CFI DPL0 SameValue
        CFI CFA_SP SP+-10
        POP	A
        CFI R5 A
        CFI CFA_SP SP+-9
        MOV	R5,A
        CFI R5 SameValue
        POP	A
        CFI R4 A
        CFI CFA_SP SP+-8
        MOV	R4,A
        CFI R4 SameValue
        POP	A
        CFI R3 A
        CFI CFA_SP SP+-7
        MOV	R3,A
        CFI R3 SameValue
        POP	A
        CFI R2 A
        CFI CFA_SP SP+-6
        MOV	R2,A
        CFI R2 SameValue
        POP	A
        CFI R1 A
        CFI CFA_SP SP+-5
        MOV	R1,A
        CFI R1 SameValue
        POP	A
        CFI R0 A
        CFI CFA_SP SP+-4
        MOV	R0,A
        CFI R0 SameValue
        POP	PSW
        CFI PSW SameValue
        CFI CFA_SP SP+-3
        POP	A
        CFI A SameValue
        CFI CFA_SP SP+-2
        RETI
        CFI EndBlock cfiBlock2
//  107 
//  108 
//  109 /******************************************************************************
//  110 *
//  111 * Send packet contains x, y, z
//  112 ******************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  113 void SendPosition(WORD destAddr){
SendPosition:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI Function SendPosition
        FUNCALL SendPosition, DataRequest
        LOCFRAME ISTACK, 2, STACK
        LOCFRAME XSTACK, 6, STACK
        ARGFRAME ISTACK, 2, STACK
        ARGFRAME XSTACK, 6, STACK
        PUSH	DPL
        CFI DPL0 Frame(CFA_SP, 4)
        CFI CFA_SP SP+-4
        PUSH	DPH
        CFI DPH0 Frame(CFA_SP, 5)
        CFI CFA_SP SP+-5
        ; Saved register size: 2
        ; Auto size: 6
        MOV	A,#-0x6
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 6)
//  114    BYTE data[PACKET_INDEX_Z + 1];
//  115 
//  116    if (nodeType == REF_NODE){
        MOV	DPTR,#nodeType
        MOVX	A,@DPTR
        JNZ	??SendPosition_0
//  117       data[PACKET_INDEX_TYPE] = PACKET_TYPE_REF_NODE_POSITION;
        MOV	A,#0x12
        SJMP	??SendPosition_1
//  118    }
//  119    else{
//  120       data[PACKET_INDEX_TYPE] = PACKET_TYPE_BLIND_NODE_POSITION;
??SendPosition_0:
        MOV	A,#0x10
??SendPosition_1:
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	@DPTR,A
//  121    }
//  122 
//  123    data[PACKET_INDEX_X_H] = HIBYTE(x);
        MOV	DPTR,#(x + 1)
        MOVX	A,@DPTR
        PUSH	A
        CFI CFA_SP SP+-6
        MOV	A,#0x1
        LCALL	?XSTACK_DISP0_8
        POP	A
        CFI CFA_SP SP+-5
        MOVX	@DPTR,A
//  124    data[PACKET_INDEX_X_L] = LOBYTE(x);
        MOV	DPTR,#x
        MOVX	A,@DPTR
        PUSH	A
        CFI CFA_SP SP+-6
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        POP	A
        CFI CFA_SP SP+-5

⌨️ 快捷键说明

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