📄 hal_key.s51
字号:
??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 + -