📄 scanmainloop.asm
字号:
Debounce_Count = 0x0A
;----------- Scan key main loop -------------
Main_Loop:
MOVIB 0
;--------------- Scan Key --------------------
Scan_Key:
SREQZ DEBS
JMP Debounce_Process
;--------------------------
MOVRA PRA
XORARA PRA_LAST
MOVAR PRA_CH_BIT
SREQZ PRA_CH_BIT
JMP Port_Change ;PRA /= PRA_LAST
JMP SCAN_KEY_END ;PRA = PRA_LAST
;=============Debounce_Process===========v
Debounce_Process:
DECRR DEBS
SREQZ DEBS
JMP SCAN_KEY_END ;DEBS /= 0
;-------------------------- DEBS = 0
MOVRA PRA
ANDARA PRA_CH_BIT
SREQZ ACC ;Skip if ACC = 0 (UNSUCCESS)
JMP RisingTG_judge
JMP FallingTG_judge ;PRA.ch /= PRA_LAST.ch (Odd Trigger)
RisingTG_judge:
SREQZ FLAG_R1_F0
JMP PortA_Trigger_OK ;OK
JMP UNSUCCESS
FallingTG_judge:
SREQZ FLAG_R1_F0
JMP UNSUCCESS
;-------------------------- ;PRA=PRA_LAST
PortA_Trigger_OK:
Restore_InSt_PRA_DTR ;Trigger OK
;=============Debounce_Process===========^
Port_Change:
MOVRA PRA
ANDARA PRA_CH_BIT ; ACC <= [ACC(PRA_CH_BIT) & PRA]
SREQZ ACC
JMP Rising
Falling:
MOVIA 0x0 ;Set Falling
MOVAR FLAG_R1_F0 ;
MOVRA PRA_Falling
ANDARA PRA_CH_BIT ; ACC <= [ACC(PRA_CH_BIT) & PRA_Falling]
SREQZ ACC
JMP Falling_OK
JMP UNSUCCESS
Rising:
MOVRA PRA_Rising
ANDARA PRA_CH_BIT ; ACC <= [ACC(PRA_CH_BIT) & PRA_Rising]
SREQZ ACC
JMP Rising_OK ;Rising Edge
; JMP UNSUCCESS
;--------------------------
UNSUCCESS:
JMP SCAN_OK
Rising_OK:
MOVIA 0x1 ;Set Rising
MOVAR FLAG_R1_F0 ;
Falling_OK:
MOVIR DEBS,Debounce_Count
MOVFR PRA,PRA_LAST
JMP Debounce_Process
SCAN_OK:
MOVFR PRA,PRA_LAST
SCAN_KEY_END:
;----------- FrontDelay_ASM -------------
FrontDelay_ASM:
SRBR Main_Flag,3
JMP Delay_END
Delay_Count:
DECRRSZ F_DELAY_0
JMP Delay_END
DECRRSZ F_DELAY_1
JMP Delay_END
Count_Over:
MOVIA B'1111'
MOVAR Main_Flag
Restore_DTR1
Delay_END:
CALL Delay1ms_nop
Main_Loop_END:
JMP Main_Loop
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -