📄 8733_tp.dt
字号:
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 + -