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

📄 8733_tp.dt

📁 Elan eKTP8733N 单片机Touch Pad驱动程序。可检测8个Touch Pad按键是否按下。在Elan公司开发环境中使用。
💻 DT
📖 第 1 页 / 共 2 页
字号:
main_key7_psd:
            MOV     A, @0x07
            ;OR      Port5, A
            JMP     main_key_Psd_Out
            ;-----------------------------------
main_key8_psd:
            MOV     A, @0x08
            ;OR      Port5, A
main_key_Psd_Out:
			mov		Port8, A
            RET
;-----------------------------------------------------------------
MainStudyTP:
            JBS     Key_Tone, STYKey
            JMP     MainStudyTPRet
            JBC     Key_Tone, StyKeyFst
            JMP     MainStudyTPNotFst
            CALL    StyKeyValue
            BS      Key_Tone, StyKeyFst
            CLR     KeyVaSwapCnt
            CLR     KeyVaSwapCnt1
            ;-------------------------------------------
            MOV     A, @16
            MOV     Temp, A
            MOV     A, @0x20            ; 将和保存区清零(bank 4的0x20~0x2F)
            MOV     R4, A
            BANK    4
ClrBANK4R2XLP:
            CLR     R0
            INC     R4
            DJZ     temp
            JMP     ClrBANK4R2XLP
            BANK    0
            JMP     MainStudyTPRet
            ;-------------------------------------------
MainStudyTPNotFst:
            INC     KeyVaSwapCnt1
            MOV     A, KeyVaSwapCnt1
            ADD     A, @256-6
            JBS     status, C
            JMP     MainStudyTPRet
            CLR     KeyVaSwapCnt1
            CALL    Compare2GroupVa
            JBS     status, c
            JMP     DoNotSwapKeyValue
            CALL    ToGetSumOfRltmVa
            INC     KeyVaSwapCnt
            MOV     A, @256-4
            ADD     A, KeyVaSwapCnt
            JBS     status, C
            JMP     MainStudyTPRet
            CALL    GetTheValueToSwap
            CALL    SwapKeyValueGnl
            ;MOV     A, @0x10
            ;XOR     Port5, A
;            
DoNotSwapKeyValue:
            BC      Key_Tone, STYKey
            BC      Key_Tone, StyKeyFst
            CLR     NOKeyPCNT
MainStudyTPRet:
            RET
;-------------------------------------------------------------------
;将所取到符合的数据(bank 2)进行相加,和存到bank 4的0x20~0x2F中
ToGetSumOfRltmVa:
            MOV     A, @8
            MOV     Temp, A
            MOV     A, @0x20
            MOV     R4, A
ToGetSumOfRltmVaLp:
            BANK    2
            MOV     A, R0       ; 取出实时值低位
            BANK    4
            ADD     R0, A       ; 将实时值低位加到保存寄存器中
            INC     R4
            JBC     status, c
            INC     R0          ; 进位了
;
            BANK    2
            MOV     A, R0       ; 取实时值的高位
            BANK    4
            ADD     R0, A
            INC     R4
            DJZ     Temp
            JMP     ToGetSumOfRltmVaLp
            BANK    0
            RET
;-------------------------------------------------------------------
;将取得的8组数据(bank 4 0x20~0x2F)除4
GetTheValueToSwap:
            MOV     A, @0x20
            MOV     R4, A
            MOV     A, @8
            MOV     temp1, A
            BANK    4
GetTheValueToSwapLp:
            MOV     A, @2
            MOV     temp, A
GetTheValueToSwapLp1:
            BC      status, c
            INC     R4
            RRC     R0
            DEC     R4
            RRC     R0
            DJZ     Temp
            JMP     GetTheValueToSwapLp1
            INC     R4
            INC     R4
            DJZ     temp1
            JMP     GetTheValueToSwapLp
            BANK    0
            RET
;-------------------------------------------------------------------
;将最后取得的4组AD值平均后的值赋给参考值buffer(bank 1 0x20 - 0x2F)
SwapKeyValueGnl:
            MOV     A, @16          ; 总共有八组十六字节数据要交换
            MOV     Temp, A
            MOV     A, @0x20
            MOV     R4, A
SwapKeyValueGnlLp:
            BANK    4
            MOV     A, R0
            BANK    1
            MOV     R0, A
            INC     R4
            DJZ     Temp
            JMP     SwapKeyValueGnlLp
            BANK    0
            RET
;-----------------------------------------------------------------
; [Now value(TPdata) - reference(buffer)] >= KeyPsdValue, Key pressed
;   C = 1, key pressed
; else
;   C = 0, no key pressed
CMP_TWO_Value:
            MOV     A, BUFFER+1
            SUB     A, TPdataH
            JBS     status, c
            JMP     ClrKeyPsdFlag       ; The current TP value less than reference value, no key
            JBS     status, Z
            JMP     HiByteNotEqu
HiByteEqu:
            ; BUFFER+1 == TPdataH
            MOV     A, BUFFER
            SUB     A, TPdataL
            JBS     status, c
            JMP     ClrKeyPsdFlag       ; The current TP value less than reference value, no key
            ; BUFFER+1 == ADCDATAH
            SUB     A, KeyPsdValue
            JMP     ChkSetOrClr
HiByteNotEqu:
            ; TPdataH > buffer+1
            MOV     A, BUFFER
            SUB     A, TPdataL
            MOV     buffer, A
            JBS     status, c
            DEC     TPdataH
;
            MOV     A, BUFFER+1
            SUB     A, TPdataH
            JBS     status, Z
            JMP     SetKeyPsdFlag
            MOV     A, BUFFER
            SUB     A, KeyPsdValue
ChkSetOrClr:
            JBS     status, c
            JMP     SetKeyPsdFlag
ClrKeyPsdFlag:
            BC      status, C
            NOP
            BC      status, C
            RET
SetKeyPsdFlag:

            BS      status, C
            NOP
            BS      status, C
            RET
;-------------------------------------------------------------------
;将当前值与保存值做比较,看二者差值是否在-4 <= X <= 4范围内
;即bank2的0x20~0x2F当前值与bank3的0x20~0x2F保存值做比较
Compare2GroupVa:
            MOV     A, @8
            MOV     Temp, A
            CLR     buffer
            BANK    3
            MOV     A, @0x20
            MOV     R4, A           ; bank 3,0x20
Com2GroupValueLp:
            BANK    3
            INC     R4              ; bank 3,0x21
            MOV     A, R0
            BANK    2
            SUB     A, R0           ; bank 2, 0x21, 即当前值与保存值高位相减
            JBS     status, c
            JMP     RltmVaHiSmall   ; 保存值的高位比实时值高
            JBC     status, z       ; 实时值的高位比保存值的高位大或相等
            JMP     RltmVaHiEqu     ; 实时值的高位与保存值的高位相等
;
            ; 1)实时值的高位比保存值的高位大
            DEC     R4              ; bank 2, 0x20
            BANK    3
            MOV     A, R0           ; bank 3, 0x20
            BANK    2
            JMP     RltmVaHiSmall1
            ;SUB     A, R0          ; bank 2, 0x20
            ;MOV     Temp, A
            ;INC     RSR            ; bank 2, 0x21
            ;MOV     A, R0
            ;MOV     Temp1, A
            ;JBS     status, c
            ;DEC     Temp1
            ;MOV     A, Temp
            ;ADD     A, @255-4
            ;JBC     status, c
            ;JMP     Com2GroupValueNoOK  ;差值大于4
            ;MOV     A, Temp1
            ;JBC     status, z
            ;JMP     Com2GroupValueOK
            ;JMP     Com2GroupValueNoOK
;
RltmVaHiEqu:
            ; 2)实时值高位与保存值高位相等
            DEC     R4
            MOV     A, R0               ; bank 2, 0x20
            BANK    3
            SUB     A, R0               ; 低位相减
            JBS     status, c
            JMP     RltmVaHiEqu1
            ADD     A, @255-2           ; 保存值比实时值大
            JBS     status, c
            JMP     Com2GroupValueOK    ; 大4以下,则ok
            JMP     Com2GroupValueNoOK  ; 大4以上,则不ok
RltmVaHiEqu1:
            ADD     A, @2               ; 实时值比保存值大
            JBS     status, c
            JMP     Com2GroupValueNoOK  ; 大4以上上则不ok
            JMP     Com2GroupValueOK    ; 小于等于4则ok
;
            ;-------------------------------------
RltmVaHiSmall:
            ; 3)保存值高位比实时值高位高
            DEC     R4
            MOV     A, R0               ; bank 2, 0x20 (当前值)
            BANK    3
RltmVaHiSmall1:
            SUB     A, R0               ; 保存值减现在值(低位相减)
            MOV     Temp, A
            INC     R4
            MOV     A, R0
            MOV     Temp1, A
            JBS     status, c
            DEC     Temp1
            MOV     A, Temp
            ADD     A, @255-2
            JBC     status, c
            JMP     Com2GroupValueNoOK
            MOV     A, Temp1
            JBC     status, z
            JMP     Com2GroupValueOK
            ;-------------------------------------
Com2GroupValueNoOK:
            BC      status, c
            JMP     Com2GroupValueEnd
Com2GroupValueOK:
            BANK    0
            INC     buffer
            MOV     A, buffer
            CALL    GetRSRVALUE
            MOV     R4, A
            DJZ     Temp
            JMP     Com2GroupValueLp
            BS      status, c
Com2GroupValueEnd:
            BANK    0
            RET
;-------------------------------------------------------------------
GetRSRVALUE:
            ADD     PC, A
            RETL    0x20;0
            RETL    0x22;1
            RETL    0x24;2
            RETL    0x26;3
            RETL    0x28;4
            RETL    0x2A;5
            RETL    0x2C;6
            RETL    0x2E;7
            RETL    0x00;8
;-------------------------------------------------------------------
ReleaseOldKeyVa:
            MOV     R4, A
            BANK    1
            MOV     A, R0
            BANK    0
            MOV     BUFFER, A
            INC     R4
            BANK    1
            MOV     A, R0
            BANK    0
            MOV     BUFFER+1, A
            RET
;-------------------------------------------------------------------
StoreRLKeyVa:
            MOV     R4, A
            BANK    2
            MOV     A, TPdataL
            MOV     R0, A
            INC     R4
            MOV     A, TPdataH
            MOV     R0, A
            BANK    0
            RET
;-------------------------------------------------------------------
; 将bank2 0x20~0x2F(适时值)寄存区值给bank1 0x20~0x2F(参考值)
SwapKeyValue:
            MOV     R4, A
            MOV     A, @16
            MOV     TEMP, A
SwapKeyValueLp:
            BANK    2
            MOV     A, R0
            BANK    1
            MOV     R0, A
            INC     R4
            DJZ     TEMP
            JMP     SwapKeyValueLp
            BANK    0
            RET
;-------------------------------------------------------------------
; 将bank2 0x20~0x2F(适时值)寄存区值给bank3 0x20~0x2F(study)
StyKeyValue:
            MOV     A, @0x20
            MOV     R4, A
            MOV     A, @16
            MOV     TEMP, A
StyKeyValueLp:
            BANK    2
            MOV     A, R0
            BANK    3
            MOV     R0, A
            INC     R4
            DJZ     TEMP
            JMP     StyKeyValueLp
            BANK    0
            RET
;-----------------------------------------------------------------
CLEAR_SRAM:
            MOV     A, @0x10
            MOV     R4, A
            CLR     R1
Clr_Ram_Lp:
            CLR     R0
            INC     R4
            MOV     A, @0x3f
            AND     A, R4
            JBS     STATUS, 2
            JMP     Clr_Ram_Lp
            INC     R1
            MOV     A, @0x20
            OR      R4, A
            MOV     A, @0x07
            AND     A, R1
            JBS     STATUS, 2
            JMP     Clr_Ram_Lp
            RET
;-----------------------------------------------------------------
DelaySomeT:
            MOV     A, @0XFF
            MOV     0X1F, A
DELAY_LP:
            DJZ     0X1F
            JMP     DELAY_LP
            RET
;-----------------------------------------------------------------
; 取得TP值
TPVaRoutine:
            BANK    0
            MOV     A, @times
            MOV     TP_Counter, A
            CLR     TPVaSum1
            CLR     TPVaSum2
TPVaRoutine_Loop:
            NOP
            WDTC
            BANK    4
            BS      TPCR1, TPS
            NOP
            WDTC
            JBC     TPCR1, TPS
            JMP     $-2
            BC      TPCR3, TPIF
            BC      TPCR3, TPOIF
;
TPRoutineStoreVa:
            ; To store TP value
            MOV     A, TPBH
            MOV     TPdataH, A
            MOV     A, TPBL
            MOV     TPdataL, A
            ; 取高14位
            BC      status, C
            RRC     TPdataH
            RRC     TPdataL
            BC      status, C
            RRC     TPdataH
            RRC     TPdataL

GetTPVaSum:
            BANK    0
            MOV     A, TPdataL
            ADD     TPVaSum1, A
            JBS     status, C
            JMP     GetTPVaSum_Mid
            INC     TPVaSum2

GetTPVaSum_Mid:
            MOV     A, TPdataH
            ADD     TPVaSum2, A
            DJZ     TP_Counter
            JMP     TPVaRoutine_Loop
            ;---------------------------------
            ; 将和除以4
            BC      STATUS, C
            RRC     TPVaSum2
            RRC     TPVaSum1
            BC      STATUS, C
            RRC     TPVaSum2
            RRC     TPVaSum1
;
            MOV     A, TPVaSum2
            MOV     TPdataH, A
            MOV     A, TPVaSum1
            MOV     TPdataL, A
            NOP
            RET
;-----------------------------------------------------------------
            END

⌨️ 快捷键说明

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