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

📄 mac_loc.s51

📁 zigbee location examples
💻 S51
📖 第 1 页 / 共 4 页
字号:
        MOV	DPTR,#(halInitRandomGenerator & 0xffff)
        MOV	A,#((halInitRandomGenerator >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  158       CLOCK_RANDOM_GENERATOR();
        ORL	0xb4,#0x4
//  159       GET_RANDOM_BYTE(aExtendedAddress[6]);
        ORL	0xb4,#0x4
        MOV	A,0xbd
        MOV	DPTR,#(aExtendedAddress + 6)
        MOVX	@DPTR,A
//  160       CLOCK_RANDOM_GENERATOR();
        ORL	0xb4,#0x4
//  161       GET_RANDOM_BYTE(aExtendedAddress[7]);
        ORL	0xb4,#0x4
        MOV	A,0xbd
        MOV	DPTR,#(aExtendedAddress + 7)
        MOVX	@DPTR,A
//  162    }
//  163 
//  164    myShortAddr = aExtendedAddress[6] << 8 | aExtendedAddress[7];
??StartDevice_1:
        MOV	DPTR,#(aExtendedAddress + 6)
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPTR,#(aExtendedAddress + 7)
        MOVX	A,@DPTR
        MOV	DPTR,#myShortAddr
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R1
        MOVX	@DPTR,A
//  165 
//  166    // Reset the MAC layer
//  167    mlmeResetRequest(TRUE);
        ; Setup parameters for call to function mlmeResetRequest
        MOV	R1,#0x1
        LCALL	mlmeResetRequest & 0xFFFF
//  168 
//  169    // Update PIB attributes	
//  170    mlmeSetRequest(MAC_SHORT_ADDRESS, (void *)&myShortAddr);
        ; Setup parameters for call to function mlmeSetRequest
        MOV	R2,#(myShortAddr & 0xff)
        MOV	R3,#((myShortAddr >> 8) & 0xff)
        MOV	R1,#0x53
        LCALL	mlmeSetRequest & 0xFFFF
//  171    panId = PANID;
        MOV	DPTR,#panId
        MOV	A,#0x31
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,#0x24
        MOVX	@DPTR,A
//  172    mlmeSetRequest(MAC_PAN_ID, &panId);
        ; Setup parameters for call to function mlmeSetRequest
        MOV	R2,#(panId & 0xff)
        MOV	R3,#((panId >> 8) & 0xff)
        MOV	R1,#0x50
        LCALL	mlmeSetRequest & 0xFFFF
//  173    setAttributeValue = 0x0F;
        MOV	A,#0xf
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	@DPTR,A
//  174    mlmeSetRequest(MAC_BEACON_ORDER, &setAttributeValue);
        ; Setup parameters for call to function mlmeSetRequest
        MOV	R2,DPL
        MOV	R3,DPH
        MOV	R1,#0x47
        LCALL	mlmeSetRequest & 0xFFFF
//  175    mlmeSetRequest(MAC_SUPERFRAME_ORDER, &setAttributeValue);
        ; Setup parameters for call to function mlmeSetRequest
        MOV	R2,DPL
        MOV	R3,DPH
        MOV	R1,#0x54
        LCALL	mlmeSetRequest & 0xFFFF
//  176    setAttributeValue = FALSE;
        CLR	A
        MOVX	@DPTR,A
//  177    mlmeSetRequest(MAC_AUTO_REQUEST, &setAttributeValue);
        ; Setup parameters for call to function mlmeSetRequest
        MOV	R2,DPL
        MOV	R3,DPH
        MOV	R1,#0x42
        LCALL	mlmeSetRequest & 0xFFFF
//  178    setAttributeValue = TRUE;
        MOV	A,#0x1
        MOVX	@DPTR,A
//  179    mlmeSetRequest(MAC_RX_ON_WHEN_IDLE, &setAttributeValue);
        ; Setup parameters for call to function mlmeSetRequest
        MOV	R2,DPL
        MOV	R3,DPH
        MOV	R1,#0x52
        LCALL	mlmeSetRequest & 0xFFFF
//  180 
//  181    msupSetChannel(CHANNEL, TRUE);
        ; Setup parameters for call to function msupSetChannel
        MOV	R2,#0x1
        MOV	R1,#0x10
        LCALL	msupSetChannel & 0xFFFF
//  182 }
        MOV	A,#0x1
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 XSP16+0
        POP	DPH
        CFI DPH0 SameValue
        CFI CFA_SP SP+-4
        POP	DPL
        CFI DPL0 SameValue
        CFI CFA_SP SP+-3
        LJMP	?BRET
        CFI EndBlock cfiBlock1
//  183 
//  184 
//  185 /******************************************************************************
//  186 *
//  187 ******************************************************************************/
//  188 static void WaitForDeviceModeSelection (NODE_TYPE *deviceMode)
//  189 {
//  190 #ifdef SOC_BB
//  191    // setup P1_7 as pull-up input
//  192    IO_IMODE_PORT_PIN(1, 7, IO_IMODE_PUD);
//  193    IO_PUD_PORT(1, IO_PULLUP);
//  194    IO_DIR_PORT_PIN(1, 7, IO_IN);
//  195    // setup P1_6 as output
//  196    IO_DIR_PORT_PIN(1, 6, IO_OUT);
//  197    P1_6 = 0;
//  198    halWait(100);
//  199 
//  200    if(P1_7 == 0) //If P1_7 == 0 then P1_7 is shorted to P1_6 wich is set to 0
//  201    {
//  202       *deviceMode = REF_NODE;
//  203    }
//  204    else
//  205    {
//  206       *deviceMode = BLIND_NODE;
//  207    }
//  208    IO_DIR_PORT_PIN(1, 6, IO_IN);
//  209 #else
//  210    JOYSTICK_DIRECTION jsd;
//  211    BOOL selected = FALSE;
//  212    while (!selected)
//  213    {
//  214       jsd = getJoystickDirection( );
//  215       if ( jsd == UP)
//  216       {
//  217          // reference node
//  218          *deviceMode = REF_NODE;
//  219          selected = TRUE;
//  220       }
//  221       else if (jsd == DOWN)
//  222       {
//  223          // blind node
//  224          *deviceMode = BLIND_NODE;
//  225          selected = TRUE;
//  226       }
//  227    }
//  228 #endif
//  229    return;
//  230 }
//  231 
//  232 
//  233 /******************************************************************************
//  234 *
//  235 * Wait for a packet to be transmitted. dataConfirmMsduHandle and
//  236 * dataConfirmStatus is set in mcpsDataConfirm routine which is called from
//  237 * the mac
//  238 ******************************************************************************/
//  239 static void WaitForPacketTransmission (BYTE msduHandle)
//  240 {
//  241    BOOL loop = TRUE;
//  242    do
//  243    {
//  244       if (dataConfirmMsduHandle == msduHandle)
//  245       {
//  246          if (dataConfirmStatus != INVALID_STATUS)
//  247             loop = FALSE;
//  248       }
//  249    }while (loop);
//  250 }
//  251 
//  252 /******************************************************************************
//  253 *
//  254 *	DESCRIPTION:
//  255 *      mcpsDataIndication is generated by the MAC layer when a data frame is
//  256 *      successfully received.
//  257 *      The higher layer is not required to return quickly from this callback.
//  258 *          Note, however, that:
//  259 *          - No more incoming packets will be processed until this function has
//  260 *            returned, in fact all mechanisms except beacon handling and already
//  261 *            scheduled transmissions will be halted.
//  262 *          - One slot in the RX packet pool will be occupied.
//  263 *
//  264 *  PARAMETERS:
//  265 *       MCPS_DATA_INDICATION *pMDI
//  266 *         A pointer to the structure containing the received packet
//  267 *
//  268 ******************************************************************************/

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  269 ROOT void mcpsDataIndication(MCPS_DATA_INDICATION *pMDI)
mcpsDataIndication:
        CFI Block cfiBlock2 Using cfiCommon1
        CFI Function mcpsDataIndication
//  270 {
        FUNCALL mcpsDataIndication, NodeDataIndication
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, STACK
        PUSH	DPL
        CFI DPL0 Frame(CFA_SP, 3)
        CFI CFA_SP SP+-3
        PUSH	DPH
        CFI DPH0 Frame(CFA_SP, 4)
        CFI CFA_SP SP+-4
        ; Saved register size: 2
        ; Auto size: 0
//  271    NodeDataIndication(pMDI);
        ; Setup parameters for call to function NodeDataIndication
        MOV	DPTR,#(NodeDataIndication & 0xffff)
        MOV	A,#((NodeDataIndication >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  272 }
        SJMP	??Subroutine0_0
        CFI EndBlock cfiBlock2

        RSEG NEAR_CODE:CODE:NOROOT(0)
?Subroutine0:
        CFI Block cfiBlock3 Using cfiCommon1
        CFI NoFunction
        CFI CFA_SP SP+-4
        CFI DPL0 Frame(CFA_SP, 3)
        CFI DPH0 Frame(CFA_SP, 4)
        MOVX	@DPTR,A
??Subroutine0_0:
        POP	DPH
        CFI CFA_SP SP+-3
        CFI DPH0 SameValue
        POP	DPL
        CFI CFA_SP SP+-2
        CFI DPL0 SameValue
        RET
        CFI EndBlock cfiBlock3
//  273 
//  274 
//  275 /******************************************************************************
//  276 *
//  277 *	DESCRIPTION:
//  278 *      mcpsDataConfirm is called by the MAC layer when a packet transmission
//  279 *      initiated by mcpsDataRequest(...) has succeeded or failed.
//  280 *
//  281 *  PARAMETERS:
//  282 *      MAC_ENUM status
//  283 *          The data confirm status.
//  284 *      BYTE msduHandle
//  285 *          The handle of the confirmed frame
//  286 *
//  287 ******************************************************************************/

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  288 ROOT void mcpsDataConfirm(MAC_ENUM status, BYTE msduHandle)
mcpsDataConfirm:
        CFI Block cfiBlock4 Using cfiCommon1
        CFI Function mcpsDataConfirm
//  289 {
        PUSH	DPL
        CFI DPL0 Frame(CFA_SP, 3)
        CFI CFA_SP SP+-3
        PUSH	DPH
        CFI DPH0 Frame(CFA_SP, 4)
        CFI CFA_SP SP+-4
        ; Saved register size: 2
        ; Auto size: 0
//  290    dataConfirmStatus = status;
        MOV	A,R1
        MOV	DPTR,#dataConfirmStatus
        MOVX	@DPTR,A
//  291    dataConfirmMsduHandle = msduHandle;
        MOV	A,R2
        MOV	DPTR,#dataConfirmMsduHandle
        SJMP	?Subroutine0
        CFI EndBlock cfiBlock4
//  292 }
//  293 
//  294 /******************************************************************************
//  295 *
//  296 ******************************************************************************/

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  297 ROOT void mlmePollConfirm(MAC_ENUM status)
mlmePollConfirm:
        CFI Block cfiBlock5 Using cfiCommon1
        CFI Function mlmePollConfirm
//  298 {
        PUSH	DPL
        CFI DPL0 Frame(CFA_SP, 3)
        CFI CFA_SP SP+-3
        PUSH	DPH
        CFI DPH0 Frame(CFA_SP, 4)
        CFI CFA_SP SP+-4
        ; Saved register size: 2
        ; Auto size: 0
//  299    pollConfirmStatus = status;
        MOV	A,R1
        MOV	DPTR,#pollConfirmStatus
        SJMP	?Subroutine0
        CFI EndBlock cfiBlock5
//  300 }
//  301 
//  302 
//  303 /******************************************************************************
//  304 *
//  305 * This function return the IEEE address written to FLASH.
//  306 ******************************************************************************/
//  307 #define IEEE_ADDRESS_ARRAY 0xFFF8

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  308 ROOT void FetchIeeeAddress(unsigned char *ieeeAddress)
FetchIeeeAddress:
        CFI Block cfiBlock6 Using cfiCommon1
        CFI Function FetchIeeeAddress
//  309 {
        PUSH	DPL
        CFI DPL0 Frame(CFA_SP, 3)
        CFI CFA_SP SP+-3
        PUSH	DPH
        CFI DPH0 Frame(CFA_SP, 4)
        CFI CFA_SP SP+-4
        ; Saved register size: 2
        ; Auto size: 0
//  310    unsigned char bank;
//  311 
//  312    bank = MEMCTR;
        MOV	A,0xc7
        MOV	R4,A
//  313 
//  314    // switch to bank 3
//  315    MEMCTR |= 0x30;
        ORL	0xc7,#0x30
        MOV	A,0xc7
//  316 
//  317    ieeeAddress[0] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 0);
        MOV	DPTR,#-0x8
        CLR	A
        MOVC	A,@A+DPTR
        MOV	DPL,R2
        MOV	DPH,R3
        MOVX	@DPTR,A
//  318    ieeeAddress[1] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 1);
        MOV	DPTR,#-0x7
        CLR	A
        MOVC	A,@A+DPTR
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        MOVX	@DPTR,A
//  319    ieeeAddress[2] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 2);
        MOV	DPTR,#-0x6
        CLR	A
        MOVC	A,@A+DPTR
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
//  320    ieeeAddress[3] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 3);
        MOV	DPTR,#-0x5
        CLR	A
        MOVC	A,@A+DPTR
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
//  321    ieeeAddress[4] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 4);
        MOV	DPTR,#-0x4
        CLR	A
        MOVC	A,@A+DPTR
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOVX	@DPTR,A
//  322    ieeeAddress[5] = *(unsigned char __code *)(IEEE_ADDRESS_ARRAY + 5);
        MOV	DPTR,#-0x3
        CLR	A
        MOVC	A,@A+DPTR
        MOV	DPL,R2
        MOV	DPH,R3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR

⌨️ 快捷键说明

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