📄 keysan.asm
字号:
;===========================================================================
;(To use this Module, copy this section to main system file)
; .ref KEYSCAN
; .ref KEYSCAN_INIT ;function call
; .ref startflag ;output
;===========================================================================
;Module definitions for external reference.
.def KEYSCAN ;function call
.def KEYSCAN_INIT ;function call
.def startflag,onflag,stopflag
;===========================================================================
.include x24x_app.h
SCANPER .set 20000 ;8*20000*20NS=0.32MS
startflag .usect "KEYSCAN",1
stopflag .usect "KEYSCAN",1
onflag .usect "KEYSCAN",1
outflag1 .usect "KEYSCAN",1
outflag2 .usect "KEYSCAN",1
count2 .usect "KEYSCAN",1
count1 .usect "KEYSCAN",1
;---------------------------------------------------------------------------
KEYSCAN_INIT:
POINT_PF2 ;OCRA.6 - OCRA.11
LACC PBDATDIR
AND #1100111111001111b ;SET IOPB4 INPUT MODUL
;||||!!!!||||!!!!
;5432109876543210
SACL PBDATDIR
LACC PFDATDIR
OR #0000010000000000b
AND #1111111111111011b
SACL PFDATDIR
LDP #0EAh
SPLK #SCANPER,T4PERB
SPLK #1001011001000000b,T4CONB
LDP #startflag
SPLK #0h, startflag
SPLK #0h, stopflag
SPLK #0h, onflag
SPLK #0h, outflag1
SPLK #0h, outflag2
SPLK #0h, count2
SPLK #0h, count1
RET
KEYSCAN:
POINT_PF2
BIT PBDATDIR,BIT4;check t1pwm/iopb4 high or low
NOP
BCND KEYSCAN1,tc ;if high,then check outflag1
B NEXT1 ;if low,means the key on
KEYSCAN1:
ldp #outflag1
lacc outflag1 ;if outflag is 1,means start
BCND START,NEQ
POINT_PF2
BIT PBDATDIR,BIT5 ;check t2pwm/iopb5 high or low
NOP
BCND NEXT3,tc ;if high,then check outflag2
B NEXT2 ;if low,means the key on
NEXT1:
LDP #onflag
LACC onflag
BCND WATE1,NEQ ;if onflag is 1,means qu dou
LACC #1
SACL onflag ;if onflag is 0 ,meas the key was on firsttime,then wait
RET
NEXT2:
LDP #onflag
LACC onflag
BCND WATE2,NEQ
LACC #1
SACL onflag ;if onflag is 0 ,meas the key was on firsttime, then wait
RET
NEXT3:
LDP #outflag2
lacc outflag2
BCND STOP,NEQ
RET
WATE1:
LDP #outflag1 ;delay 8ms
splk #1,outflag1
RET
WATE2:
LDP #outflag2 ;delay 8ms
splk #1,outflag2
RET
STOP:
LDP #startflag
SPLK #0h, startflag
SPLK #1h, stopflag
SPLK #0h, onflag
SPLK #0h,outflag2
RET
START:
POINT_PF2
LACC PFDATDIR
AND #1111111111111011b
SACL PFDATDIR
LDP #startflag
SPLK #1h, startflag
SPLK #0h, stopflag
SPLK #0h, onflag
SPLK #0h,outflag1
LACC count1
ADD #1
SACL count1
POINT_EV
SPLK #0000011001100110b,ACTR
SPLK #0,T1CNT
POINT_PF2
LACC PFDATDIR
OR #0000000000000100b
;||||!!!!||||!!!!
;5432109876543210
SACL PFDATDIR
POINT_EV
SPLK #0000001000000001b,IMRA
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -