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

📄 hal_key.s51

📁 cc2430应用实例
💻 S51
📖 第 1 页 / 共 5 页
字号:
??HalKeyPoll_2:
        MOV	A,R2
        CLR	C
        SUBB	A,#0x5a
        MOV	A,R2
        JC	??HalKeyPoll_11
        CLR	C
        SUBB	A,#0x69
        JNC	??HalKeyPoll_4
        SJMP	??HalKeyPoll_5
//  504       {
//  505          ksave0 |= HAL_KEY_UP;
//  506       }
//  507       else if ((adc >= 75)  && (adc <= 89))
??HalKeyPoll_11:
        CLR	C
        SUBB	A,#0x4b
        JNC	??HalKeyPoll_8
//  508       {
//  509         ksave0 |= HAL_KEY_RIGHT;
//  510       }
//  511       else if ((adc >= 45)  && (adc <= 56))
        MOV	A,R2
        CLR	C
        SUBB	A,#0x2d
        JC	??HalKeyPoll_9
        MOV	A,R2
        CLR	C
        SUBB	A,#0x39
        JC	??HalKeyPoll_10
//  512       {
//  513         ksave0 |= HAL_KEY_LEFT;
//  514       }
//  515       else if (adc <= 10)
//  516       {
//  517         ksave0 |= HAL_KEY_DOWN;
//  518       }
//  519       else if ((adc >= 105) && (adc <= 121))
//  520       {
//  521       }
//  522     }
//  523 
//  524 
//  525   } while (ksave0 != ksave1);
??HalKeyPoll_4:
        MOV	A,R7
        XRL	A,R6
        JNZ	??HalKeyPoll_1
//  526 
//  527   keys |= ksave0;
        MOV	A,R6
        ORL	?V0 + 0,A
//  528 
//  529 #endif
//  530 
//  531   /* Exit if polling and no keys have changed */
//  532   if (!Hal_KeyIntEnable)
        MOV	DPTR,#Hal_KeyIntEnable
        MOVX	A,@DPTR
        JNZ	??HalKeyPoll_12
//  533   {
//  534     if (keys == halKeySavedKeys)
        MOV	DPTR,#??halKeySavedKeys
        MOVX	A,@DPTR
        XRL	A,?V0 + 0
        JZ	??HalKeyPoll_13
//  535     {
//  536       return;
//  537     }
//  538     halKeySavedKeys = keys;     /* Store the current keys for comparation next time */
        MOV	A,?V0 + 0
        MOVX	@DPTR,A
//  539   }
//  540 
//  541   /* Invoke Callback if new keys were depressed */
//  542   if (keys && (pHalKeyProcessFunction))
??HalKeyPoll_12:
        MOV	A,?V0 + 0
        JZ	??HalKeyPoll_13
        MOV	DPTR,#??pHalKeyProcessFunction
        LCALL	?Subroutine0 & 0xFFFF
??CrossCallReturnLabel_1:
        MOV	R2,#0x0
        MOV	A,R4
        ORL	A,R5
        ORL	A,R6
        JZ	??HalKeyPoll_13
//  543   {
//  544     (pHalKeyProcessFunction) (keys, HAL_KEY_STATE_NORMAL);
        ; Setup parameters for indirect call
        MOV	R1,?V0 + 0
        MOVX	A,@DPTR
        MOV	DPL,R4
        MOV	DPH,R5
        LCALL	?BCALL               ; Banked call to: DPTR()
??HalKeyPoll_13:
        LJMP	?Subroutine2 & 0xFFFF
        CFI EndBlock cfiBlock5
//  545   }
//  546 
//  547 #endif /* HAL_KEY */
//  548 
//  549 }

        RSEG BANKED_CODE:CODE:NOROOT(0)
?Subroutine0:
        CFI Block cfiCond6 Using cfiCommon0
        CFI NoFunction
        CFI Conditional ??CrossCallReturnLabel_1
        CFI R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI V0 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)))
        CFI DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI CFA_SP SP+0
        CFI CFA_XSP16 add(XSP16, 9)
        CFI Block cfiCond7 Using cfiCommon0
        CFI (cfiCond7) NoFunction
        CFI (cfiCond7) Conditional ??CrossCallReturnLabel_0
        CFI (cfiCond7) R6 load(1, XDATA, add(CFA_XSP16, literal(-9)))
        CFI (cfiCond7) VB load(1, XDATA, add(CFA_XSP16, literal(-8)))
        CFI (cfiCond7) V0 load(1, XDATA, add(CFA_XSP16, literal(-7)))
        CFI (cfiCond7) R7 load(1, XDATA, add(CFA_XSP16, literal(-6)))
        CFI (cfiCond7) ?RET_LOW load(1, XDATA, add(CFA_XSP16, literal(-5)))
        CFI (cfiCond7) ?RET_HIGH load(1, XDATA, add(CFA_XSP16, literal(-4)))
        CFI (cfiCond7) ?BRET_EXT load(1, XDATA, add(CFA_XSP16, literal(-3)))
        CFI (cfiCond7) DPL0 load(1, XDATA, add(CFA_XSP16, literal(-2)))
        CFI (cfiCond7) DPH0 load(1, XDATA, add(CFA_XSP16, literal(-1)))
        CFI (cfiCond7) CFA_SP SP+0
        CFI (cfiCond7) CFA_XSP16 add(XSP16, 9)
        CFI Block cfiPicker8 Using cfiCommon1
        CFI (cfiPicker8) NoFunction
        CFI (cfiPicker8) Picker
        MOVX	A,@DPTR
        MOV	R4,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R5,A
        INC	DPTR
        MOVX	A,@DPTR
        MOV	R6,A
        RET
        CFI EndBlock cfiCond6
        CFI EndBlock cfiCond7
        CFI EndBlock cfiPicker8
//  550 
//  551 
//  552 /**************************************************************************************************
//  553  * @fn      halProcessKeyInterrupt
//  554  *
//  555  * @brief   Checks to see if it's a valid key interrupt, saves interrupt driven key states for
//  556  *          processing by HalKeyRead(), and debounces keys by scheduling HalKeyRead() 25ms later.
//  557  *
//  558  * @param
//  559  *
//  560  * @return
//  561  **************************************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  562 void halProcessKeyInterrupt (void)
halProcessKeyInterrupt:
        CFI Block cfiBlock9 Using cfiCommon0
        CFI Function halProcessKeyInterrupt
//  563 {
        FUNCALL halProcessKeyInterrupt, osal_start_timerEx
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, 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: 0
//  564 
//  565 #if (HAL_KEY == TRUE)
//  566 
//  567   bool    valid=FALSE;
        MOV	R2,#0x0
//  568 
//  569 #if defined (HAL_KEY_SW_6_ENABLE)
//  570   if (HAL_KEY_SW_6_PXIFG & HAL_KEY_SW_6_BIT)      /* Interrupt Flag has been set */
        MOV	A,0x89
        MOV	C,0xE0 /* A   */.1
        JNC	??halProcessKeyInterrupt_0
//  571   {
//  572     HAL_KEY_SW_6_PXIFG = ~(HAL_KEY_SW_6_BIT);    /* Clear Interrupt Flag */
        MOV	0x89,#-0x3
//  573     valid = TRUE;
        INC	R2
//  574   }
//  575 #endif
//  576 
//  577 #if defined (HAL_KEY_SW_5_ENABLE)
//  578   if (HAL_KEY_SW_5_PXIFG & HAL_KEY_SW_5_BIT)      /* Interrupt Flag has been set */
??halProcessKeyInterrupt_0:
        MOV	A,0x8b
        MOV	C,0xE0 /* A   */.0
        JNC	??halProcessKeyInterrupt_1
//  579   {
//  580     HAL_KEY_SW_5_PXIFG = ~(HAL_KEY_SW_5_BIT);    /* Clear Interrupt Flag */
        MOV	0x8b,#-0x2
//  581     valid = TRUE;
        SJMP	??halProcessKeyInterrupt_2
//  582   }
//  583 #endif
//  584 
//  585   if (valid)
??halProcessKeyInterrupt_1:
        MOV	A,R2
        JZ	??halProcessKeyInterrupt_3
//  586   {
//  587     osal_start_timerEx (Hal_TaskID, HAL_KEY_EVENT, HAL_KEY_DEBOUNCE_VALUE);
??halProcessKeyInterrupt_2:
        ; Setup parameters for call to function osal_start_timerEx
        MOV	R4,#0x19
        MOV	R5,#0x0
        MOV	R2,#0x1
        MOV	R3,#0x0
        MOV	DPTR,#Hal_TaskID
        MOVX	A,@DPTR
        MOV	R1,A
        MOV	DPTR,#(osal_start_timerEx & 0xffff)
        MOV	A,#((osal_start_timerEx >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
//  588   }
//  589 #endif /* HAL_KEY */
//  590 }
??halProcessKeyInterrupt_3:
        LJMP	?Subroutine1 & 0xFFFF
        CFI EndBlock cfiBlock9
//  591 
//  592 /**************************************************************************************************
//  593  * @fn      HalKeyEnterSleep
//  594  *
//  595  * @brief  - Get called to enter sleep mode
//  596  *
//  597  * @param
//  598  *
//  599  * @return
//  600  **************************************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  601 void HalKeyEnterSleep ( void )
HalKeyEnterSleep:
        CFI Block cfiBlock10 Using cfiCommon0
        CFI Function HalKeyEnterSleep
//  602 {
        ; Saved register size: 0
        ; Auto size: 0
//  603   /* Sleep!!! */
//  604 }
        LJMP	?BRET
        CFI EndBlock cfiBlock10
//  605 
//  606 /**************************************************************************************************
//  607  * @fn      HalKeyExitSleep
//  608  *
//  609  * @brief   - Get called when sleep is over
//  610  *
//  611  * @param
//  612  *
//  613  * @return  - return saved keys
//  614  **************************************************************************************************/

        RSEG BANKED_CODE:CODE:NOROOT(0)
//  615 uint8 HalKeyExitSleep ( void )
HalKeyExitSleep:
        CFI Block cfiBlock11 Using cfiCommon0
        CFI Function HalKeyExitSleep
//  616 {
        FUNCALL HalKeyExitSleep, HalKeyRead
        LOCFRAME ISTACK, 2, STACK
        ARGFRAME ISTACK, 2, 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: 0
//  617   /* Wake up and read keys */
//  618   return ( HalKeyRead () );
        ; Setup parameters for call to function HalKeyRead
        MOV	DPTR,#(HalKeyRead & 0xffff)
        MOV	A,#((HalKeyRead >> 16) & 0xff)
        LCALL	?BCALL               ; Banked call to: DPTR()
        LJMP	?Subroutine1 & 0xFFFF
        CFI EndBlock cfiBlock11
//  619 }
//  620 
//  621 /***************************************************************************************************
//  622  *                                    INTERRUPT SERVICE ROUTINE
//  623  ***************************************************************************************************/
//  624 
//  625 /**************************************************************************************************
//  626  * @fn      halKeyPort0Isr
//  627  *
//  628  * @brief   Port0 ISR
//  629  *
//  630  * @param
//  631  *
//  632  * @return
//  633  **************************************************************************************************/

        RSEG NEAR_CODE:CODE:NOROOT(0)
//  634 HAL_ISR_FUNCTION( halKeyPort0Isr, P0INT_VECTOR )
halKeyPort0Isr:
        CFI Block cfiBlock12 Using cfiCommon1
        CFI Function halKeyPort0Isr
//  635 {
        FUNCALL halKeyPort0Isr, halProcessKeyInterrupt
        LOCFRAME ISTACK, 15, STACK
        ARGFRAME ISTACK, 15, STACK
        PUSH	A
        CFI A Frame(CFA_SP, 3)
        CFI CFA_SP SP+-3
        MOV	A,#-0xe
        LCALL	?INTERRUPT_ENTER_XSP
        CFI B load(1, XDATA, add(CFA_XSP16, literal(-1)))
      

⌨️ 快捷键说明

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