📄 timer_oper.asm
字号:
INCLUDE REG_DEF.INC
PUBLIC INIT_TIMER
TIMER_CODE .SECTION 'CODE'
INIT_TIMER:
MOV A, 080H
MOV TMRC, A
MOV A, 105
MOV TMR, A
MOV A,005H
MOV INTC, A
CLR TIMER_COUNT
RET
TIMER_ISR:
MOV TIMER_ACC, A
INC TIMER_COUNT ; 100 USEC
SZ TIMER_COUNT.0
JMP NOT_Z_CHECK
RL BS
CLR BS.0
RL FS
CLR FS.0
SZ WHEEL_BACK ; FORWARD BUT
SET BS.0 ; F_but_STATE
SZ WHEEL_FORW;BACK_BUT ; BACK BUT
SET FS.0 ; B_but_STATE
MOV A, 0FFH
XOR A, BS
SZ ACC
JMP IF_BS_ALL_ZERO
;==============================
SET Z_TEMP.0 ; BS bits ALL 1s,
SET STABLE.0 ; and BS STABLE
;==============================
IF_BS_ALL_ZERO:
CLR ACC
XOR A, BS
SZ ACC
JMP IF_FS_ALL_ONE
;===============================
CLR Z_TEMP.0 ; BS bits ALL 0s,
SET STABLE.0 ; and BS STABLE
;===============================
IF_FS_ALL_ONE:
MOV A, 0FFH
XOR A, FS
SZ ACC
JMP IF_FS_ALL_ZERO
;================================
SET Z_TEMP.1 ; FS bits ALL 1s,
SET STABLE.1 ; and FS STABLE
;================================
IF_FS_ALL_ZERO:
CLR ACC
XOR A, FS
SZ ACC
JMP IF_STABLE
;=================================
CLR Z_TEMP.1 ; FS bits ALL 0s,
SET STABLE.1 ; and FS STABLE
;=================================
IF_STABLE:
MOV A, 3 ;=================================
XOR A, STABLE ; Z_TEMP: 0000 00XX
SZ ACC ; ||
JMP NOT_Z_CHECK ; |FS
; BS
;==== BELOW : CHECK WHEN STABLE
NOT_UPDATE_OLDZ: ; STABLE: 0000 00XX
MOV A, OLD_Z ; ||
RL ACC ; |FS
RL ACC ; BS
OR A, Z_TEMP ;==================================
MOV Z_COMBINE, A
;==================================
MOV A, 1 ; Z_COMBINE : 0000 XXXX
XOR A, Z_COMBINE ; ||||
SZ ACC ; |||FS
JMP CHECK_E ; ||BS
; |OLD_FS
JMP Z_UP ; OLD_BS
;===================================
CHECK_E:
MOV A, 00EH ; 0000 1110 <-- Z_UP
XOR A, Z_COMBINE
SZ ACC
JMP CHECK_2
JMP Z_UP
CHECK_2:
MOV A, 002H ; 0000 0010 <-- Z_DN
XOR A, Z_COMBINE
SZ ACC
JMP CHECK_D
JMP Z_DN
CHECK_D:
MOV A, 00DH ; 0000 1101 <-- Z_DN
XOR A, Z_COMBINE
SZ ACC
JMP ALREADY_Z_CHECK
Z_DN:
SET Z_WHEEL
SET MOVEMENT.1
JMP ALREADY_Z_CHECK
Z_UP:
SET Z_WHEEL.0
SET MOVEMENT.1
ALREADY_Z_CHECK: ;===================================
CLR OLD_Z ; MOVE OLD_Z <-- Z_TEMP
SZ Z_TEMP.0 ; OLD_Z = 0000 00XX
SET OLD_Z.0
SZ Z_TEMP.1
SET OLD_Z.1 ;====================================
NOT_Z_CHECK: ;========================================
MOV A, TIMER_ACC ; NOT STABLE or NOT ODD TIMER_ISR
JMP EXIT_TIMER_ISR ; DO NOTHING
;========================================
TIMER_VECTOR .SECTION AT 0008H 'CODE'
JMP TIMER_ISR
EXIT_TIMER_ISR:
RETI
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -