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

📄 hal_led.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 5 页
字号:
        MOV	A,#0x8
        XRL	A,?V0 + 1
        MOV	DPL,R6
        MOV	DPH,R7
        JZ	??HalLedSet_6
        MOV	A,?V0 + 1
        SJMP	??HalLedSet_7
        CFI EndBlock cfiBlock1
//  165 
//  166 }
//  167 
//  168 /***************************************************************************************************
//  169  * @fn      HalLedBlink
//  170  *
//  171  * @brief   Blink the leds
//  172  *
//  173  * @param   leds       - bit mask value of leds to be blinked
//  174  *          numBlinks  - number of blinks
//  175  *          percent    - the percentage in each period where the led
//  176  *                       will be on
//  177  *          period     - length of each cycle in milliseconds
//  178  *
//  179  * @return  None
//  180  ***************************************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  181 void HalLedBlink (uint8 leds, uint8 numBlinks, uint8 percent, uint16 period)
HalLedBlink:
        CFI Block cfiBlock2 Using cfiCommon0
        CFI Function HalLedBlink
//  182 {
        FUNCALL HalLedBlink, osal_GetSystemClock
        LOCFRAME XSTACK, 20, STACK
        ARGFRAME XSTACK, 20, STACK
        FUNCALL HalLedBlink, osal_set_event
        LOCFRAME XSTACK, 20, STACK
        ARGFRAME XSTACK, 20, STACK
        FUNCALL HalLedBlink, HalLedSet
        LOCFRAME XSTACK, 20, STACK
        ARGFRAME XSTACK, 20, STACK
        FUNCALL HalLedBlink, HalLedSet
        LOCFRAME XSTACK, 20, STACK
        ARGFRAME XSTACK, 20, STACK
        MOV	A,#-0x10
        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 V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 16)
        ; Saved register size: 16
        ; Auto size: 4
        MOV	A,#-0x4
        LCALL	?ALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 20)
        MOV	A,#0x1
        LCALL	?XSTACK_DISP0_8
        MOV	A,R2
        MOVX	@DPTR,A
        MOV	A,R3
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	@DPTR,A
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        MOV	A,R4
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R5
        MOVX	@DPTR,A
        MOV	?V0 + 0,R1
//  183 #if (defined (BLINK_LEDS)) && (HAL_LED == TRUE)
//  184   uint8 led;
//  185   HalLedControl_t *sts;
//  186 
//  187   if (leds && percent && period)
        MOV	A,R1
        JNZ	$+5
        LJMP	??HalLedBlink_0 & 0xFFFF
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        JNZ	$+5
        LJMP	??HalLedBlink_0 & 0xFFFF
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        JNZ	??HalLedBlink_1
        INC	DPTR
        MOVX	A,@DPTR
??HalLedBlink_1:
        JNZ	$+5
        LJMP	??HalLedBlink_0 & 0xFFFF
//  188   {
//  189     if (percent < 100)
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        MOVX	A,@DPTR
        CLR	C
        SUBB	A,#0x64
        JC	$+5
        LJMP	??HalLedBlink_2 & 0xFFFF
//  190     {
//  191       led = HAL_LED_1;
        MOV	?V0 + 1,#0x1
//  192       leds &= HAL_LED_ALL;
        ANL	?V0 + 0,#0xf
//  193       sts = HalLedStatusControl.HalLedControlTable;
        MOV	?V0 + 2,#(??HalLedStatusControl & 0xff)
        MOV	?V0 + 3,#((??HalLedStatusControl >> 8) & 0xff)
        LJMP	??HalLedBlink_3 & 0xFFFF
//  194 
//  195       while (leds)
//  196       {
//  197         if (leds & led)
??HalLedBlink_4:
        MOV	A,?V0 + 1
        ANL	A,?V0 + 0
        JZ	??HalLedBlink_5
//  198         {
//  199           /* Store the current state of the led before going to blinking */
//  200           preBlinkState |= (led & HalLedState);
        MOV	DPTR,#??HalLedState
        MOVX	A,@DPTR
        ANL	A,?V0 + 1
        MOV	R2,A
        MOV	DPTR,#??preBlinkState
        MOVX	A,@DPTR
        ORL	A,R2
        MOVX	@DPTR,A
//  201           
//  202           sts->mode  = HAL_LED_MODE_OFF;                    /* Stop previous blink */
        CLR	A
        MOV	DPL,?V0 + 2
        MOV	DPH,?V0 + 3
        MOVX	@DPTR,A
//  203           sts->time  = period;                              /* Time for one on/off cycle */
        MOV	A,#0x2
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        MOV	R0,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPL,?V0 + 2
        MOV	DPH,?V0 + 3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOV	A,R0
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R1
        MOVX	@DPTR,A
//  204           sts->onPct = percent;                             /* % of cycle LED is on */
        MOV	DPL,?XSP + 0
        MOV	DPH,?XSP + 1
        LCALL	?Subroutine6 & 0xFFFF
??CrossCallReturnLabel_10:
        INC	DPTR
        MOVX	@DPTR,A
//  205           sts->todo  = numBlinks;                           /* Number of blink cycles */
        MOV	A,#0x1
        LCALL	?XSTACK_DISP0_8
        LCALL	?Subroutine6 & 0xFFFF
??CrossCallReturnLabel_11:
        MOVX	@DPTR,A
//  206           if (!numBlinks) sts->mode |= HAL_LED_MODE_FLASH;  /* Continuous */
        MOV	A,#0x1
        LCALL	?XSTACK_DISP0_8
        MOVX	A,@DPTR
        JNZ	??HalLedBlink_6
        MOV	A,#0x4
        MOV	DPL,?V0 + 2
        MOV	DPH,?V0 + 3
        MOVX	@DPTR,A
//  207           sts->next = osal_GetSystemClock();                /* Start now */
??HalLedBlink_6:
        ; Setup parameters for call to function osal_GetSystemClock
        MOV	DPTR,#(osal_GetSystemClock & 0xffff)
        MOV	A,#((osal_GetSystemClock >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        MOV	DPL,?V0 + 2
        MOV	DPH,?V0 + 3
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        INC	DPTR
        MOV	A,R2
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R3
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R4
        MOVX	@DPTR,A
        INC	DPTR
        MOV	A,R5
        MOVX	@DPTR,A
//  208           sts->mode |= HAL_LED_MODE_BLINK;                  /* Enable blinking */
        MOV	DPL,?V0 + 2
        MOV	DPH,?V0 + 3
        MOVX	A,@DPTR
        SETB	0xE0 /* A   */.1
        MOVX	@DPTR,A
//  209           leds ^= led;
        MOV	A,?V0 + 1
        XRL	?V0 + 0,A
//  210         }
//  211         led <<= 1;
??HalLedBlink_5:
        MOV	A,?V0 + 1
        CLR	C
        RLC	A
        MOV	?V0 + 1,A
//  212         sts++;
        MOV	A,?V0 + 2
        ADD	A,#0x9
        MOV	?V0 + 2,A
        MOV	A,?V0 + 3
        ADDC	A,#0x0
        MOV	?V0 + 3,A
//  213       }
??HalLedBlink_3:
        MOV	A,?V0 + 0
        JZ	$+5
        LJMP	??HalLedBlink_4 & 0xFFFF
//  214       osal_set_event (Hal_TaskID, HAL_LED_BLINK_EVENT);
        ; Setup parameters for call to function osal_set_event
        MOV	R2,#0x2
        MOV	R3,#0x0
        MOV	DPTR,#Hal_TaskID
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPTR,#(osal_set_event & 0xffff)
        MOV	A,#((osal_set_event >> 16) & 0xff)
        SJMP	??HalLedBlink_7
//  215     }
//  216     else
//  217     {
//  218       HalLedSet (leds, HAL_LED_MODE_ON);                    /* >= 100%, turn on */
??HalLedBlink_2:
        ; Setup parameters for call to function HalLedSet
        MOV	R2,#0x1
        SJMP	??HalLedBlink_8
//  219     }
//  220   }
//  221   else
//  222   {
//  223     HalLedSet (leds, HAL_LED_MODE_OFF);                     /* No on time, turn off */
??HalLedBlink_0:
        ; Setup parameters for call to function HalLedSet
        MOV	R2,#0x0
??HalLedBlink_8:
        MOV	DPTR,#(HalLedSet & 0xffff)
        MOV	A,#((HalLedSet >> 16) & 0xff)
??HalLedBlink_7:
        LCALL	?BCALL               ; Banked call to: DPTR()
//  224   }
//  225 #elif (HAL_LED == TRUE)
//  226   percent = (leds & HalLedState) ? HAL_LED_MODE_OFF : HAL_LED_MODE_ON;
//  227   HalLedOnOff (leds, percent);                              /* Toggle */
//  228 #endif /* BLINK_LEDS && HAL_LED */
//  229 }
        MOV	A,#0x4
        CFI EndBlock cfiBlock2
        REQUIRE ?Subroutine11
        ; // Fall through to label ?Subroutine11

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine11:
        CFI Block cfiBlock3 Using cfiCommon0
        CFI NoFunction
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 20)
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
        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(-16)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V7 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)))
        CFI Invalid
        LCALL	?DEALLOC_XSTACK8
        CFI CFA_XSP16 add(XSP16, 16)
        CFI Valid
        MOV	R7,#0x8
        LJMP	?BANKED_LEAVE_XDATA
        CFI EndBlock cfiBlock3

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine6:
        CFI Block cfiCond4 Using cfiCommon0
        CFI NoFunction
        CFI Conditional ??CrossCallReturnLabel_10
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-16)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-15)))
        CFI V0 load(1, XDATA, add(CFA_XSP16, literal(-14)))
        CFI V1 load(1, XDATA, add(CFA_XSP16, literal(-13)))
        CFI V2 load(1, XDATA, add(CFA_XSP16, literal(-12)))
        CFI V3 load(1, XDATA, add(CFA_XSP16, literal(-11)))
        CFI V4 load(1, XDATA, add(CFA_XSP16, literal(-10)))
        CFI V5 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI V6 load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V7 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))

⌨️ 快捷键说明

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