📄 ver30.asm
字号:
btfss status,c ;有无进位
goto addspeedmed ;lowspeedmed+speedatamed
movlw 1h ;有进位则LOWSPEEDMED+1
addwf lowspeedmed,f
btfss status,c ;有无进位
goto addspeedmed ;无进位则lowspeedmed+speeddatamed
incf lowspeedhig,f ;有进位则LOWSPEEDHIG+1
addspeedmed
movlw speeddatamed
addwf lowspeedmed,f
btfss status,c ;有无进位
return
incf lowspeedhig,f ;有进位则LOWSPEEDHIG+1
return
;************
;增加子程序
;************
increasekeysub
;call delaysub ;
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw increasekey ;是否为increasekey按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return
bcf defaultflag ;缺省标志置0
call threelowtonesub
return
;***************
;减小子程序
;***************
decreasekeysub
;call delaysub ;
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw decreasekey ;是否为decreasekey按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return
bsf defaultflag ;缺省标志置1
call threelowtonesub
return
;**************
;上升下降子程序
;**************
updownkeysub
bcf storeflag ;数据需要保存
btfss defaultflag
goto callcontinueup
call continuedownsub
return
callcontinueup
call continueupsub
return
;**********************
;设置状态TO运行状态子程序
;**********************
modetorunkeysub
;call delaysub ;延时后是否仍为modetorunkey按钮,是则继续
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw modetorunkey ;是否为modetorunkey按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return ;不是则返回
bsf runmodeflag ;设置运行标记
call onehightwolowtonesub
return
;*******************
;置0子程序
;*******************
zerokeysub
call delaysub ;延时后是否仍为zeroset按钮,是则继续
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw zerokey ;是否为zeroset按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return ;不是则返回
movf bottomlow,w ;是则置0
movwf pulselow
movf bottommed,w
movwf pulsemed
movf bottomhig,w
movwf pulsehig
movlw bottommin
movwf pulselow1
clrf pulsemed1
clrf pulsehig1
clrf toplowmax
clrf topmedmax
clrf tophigmax
clrf toplow
clrf topmed
clrf tophig
clrf lowspeedhig
clrf lowspeedmed
clrf lowspeedlow
clrf flag
clrf flag1
clrf flag2
clrf flag3
clrf topcount
clrf advcount
clrf advcounttemp
clrf count5
movlw delaytempstart
movwf delaytemp
call mainchecksub ;判断是否为主控制器
call threehightonesub
return
;*********************
;上限位置数据保存子程序
;*********************
storekeysub
call delaysub ;
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw storekey ;是否为storekey按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return
movlw advcountmax ;广告画数是否为最大
subwf advcount,w
btfsc status,z
goto storekeyend1 ;是则结束
btfsc topsetflag
return ;已保存则结束
bcf storeflag ;数据需要保存
movlw topstart
addwf topcount,w
movwf fsr
movf delaytemp,w ;保存每一幅画停留的时间
movwf indf
incf fsr,f
movf pulselow,w ;pulselow=fsr+1设置上限位置
movwf indf
incf fsr,f
movf pulsemed,w ;pulsemed=fsr+2
movwf indf
incf fsr,f
movf pulsehig,w ;pulsehig=fsr+3
movwf indf
incf fsr,f ;最后一幅画的停留时间
movf delaytemp,w
movwf indf
movlw 4h
addwf topcount,f ;topcount+4
movf topcount,w
movwf topdatacountreg
incf topdatacountreg,f ;需要保存的数据个数
incf advcount,f
movf advcount,w
movwf advcounttemp
bsf topflag
bsf topsetflag
call threelowtonesub
return
storekeyend1
call threelowtonesub
call delaysub
call delaysub
call threelowtonesub
return
;*********************
;电机速度更改为缺省值子程序
;*********************
defaultspeedkeysub
;call delaysub ;
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw defaultspeedkey ;是否为defaultspeedkey按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return
waitnotdefaultspeedkey
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw defaultspeedkey ;是否为updefaultspeedkey按钮
subwf remotetemp,w ;remotetemp-w
btfsc status,z ;=0?
goto waitnotdefaultspeedkey ;等待直到放开按键
call threelowtonesub ;三声低音
return
;*********************
;电机设置速度更改子程序
;*********************
setspeedkeysub
; ;call delaysub ;
; call delaysub
; movlw remotemask
; andwf remote,w ;读取遥控器输入数据
; movwf remotetemp
; movlw setspeedkey ;是否为setspeedkey按钮
; subwf remotetemp,w ;remotetemp-w
; btfss status,z ;=0?
; return
;waitnotsetspeedkey
; call delaysub
; movlw remotemask
; andwf remote,w ;读取遥控器输入数据
; movwf remotetemp
; movlw setspeedkey ;是否为upsetspeedkey按钮
; subwf remotetemp,w ;remotetemp-w
; btfsc status,z ;=0?
; goto waitnotsetspeedkey ;等待直到放开按键
; bcf storeflag ;数据需要保存
; btfss defaultflag
; goto addsetspeedadcbranch ;增加设置速度
; movlw d'25'
; subwf setspeedreg,f ;setspeedreg-5
; movlw settimespeedadcmin ;是否到设置速度最小值
; subwf setspeedreg,w
; btfsc status,c
; goto setspeedend1 ;不到最小值则返回
; movlw settimespeedadcmin ;到最小值则不能再减小
; movwf setspeedreg
; goto setspeedend
;addsetspeedadcbranch
; movlw d'25'
; addwf setspeedreg,f ;setspeedreg+5
; movlw settimespeedadcmax ;是否到设置速度最大值
; subwf setspeedreg,w
; btfss status,c
; goto setspeedend1 ;不到最大值则返回
; movlw settimespeedadcmax ;到最大值则不能再增加
; movwf setspeedreg
;setspeedend
; call threelowtonesub ;三声低音
; return
;setspeedend1
; call twolowtonesub ;二声低音
return
;*************************
;电机同时运转速度更改子程序
;*************************
sametimespeedkeysub
;call delaysub ;
; call delaysub
; movlw remotemask
; andwf remote,w ;读取遥控器输入数据
; movwf remotetemp
; movlw sametimespeedkey ;是否为sametimespeedkey按钮
; subwf remotetemp,w ;remotetemp-w
; btfss status,z ;=0?
; return
;waitnotsametimespeedkey
; call delaysub
; movlw remotemask
; andwf remote,w ;读取遥控器输入数据
; movwf remotetemp
; movlw sametimespeedkey ;是否为sametimespeedkey按钮
; subwf remotetemp,w ;remotetemp-w
; btfsc status,z ;=0?
; goto waitnotsametimespeedkey ;等待直到放开按键
; bcf storeflag ;数据需要保存
; btfss defaultflag
; goto addsametimespeedadcbranch ;增加设置速度
; movlw d'25'
; subwf sametimespeedreg,f ;sametimespeedreg-5
; movlw sametimespeedadcmin ;是否到设置速度最小值
; subwf sametimespeedreg,w
; btfsc status,c
; goto sametimespeedend1 ;不到最小值则返回
; movlw sametimespeedadcmin ;到最小值则不能再减小
; movwf sametimespeedreg
; goto sametimespeedend
;addsametimespeedadcbranch
; movlw d'25'
; addwf sametimespeedreg,f ;sametimespeedreg+2
; movlw sametimespeedadcmax ;是否到设置速度最大值
; subwf sametimespeedreg,w
; btfss status,c
; goto sametimespeedend1 ;不到最大值则返回
; movlw sametimespeedadcmax ;到最大值则不能再增加
; movwf sametimespeedreg
;sametimespeedend
; movf sametimespeedreg,w
; movwf upsametimespeedreg
; movwf downsametimespeedreg
; call threelowtonesub
; return
;sametimespeedend1
; movf sametimespeedreg,w
; movwf upsametimespeedreg
; movwf downsametimespeedreg
; call twolowtonesub
return
;**********************
;运行状态到设置状态子程序
;**********************
runtomodekeysub
;call delaysub ;延时后是否仍为runtomodekey按钮,是则继续
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw runtomodekey ;是否为modetorunkey按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return ;不是则返回
bcf runmodeflag ;设置运行标记
call onehightwolowtonesub
return
;****************
;改变参数标记置0子程序
;****************
clearchangeparameterflagsub
;call delaysub
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw stopandrunkey ;是否为stopandrunkey按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return ;不是则返回
clearchangeloop
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw stopandrunkey ;是否为stopandrunkey按钮
subwf remotetemp,w ;remotetemp-w
btfsc status,z ;=0?
goto clearchangeloop ;等待直到放开按键
bcf changeparameterflag ;改变参数标记置0
call threelowtonesub
return
;***************************
;改变某一幅画的停留时间子程序
;***************************
stoptimekeysub
;call delaysub ;
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw stoptimekey ;是否为stoptimekey按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return
waitnotstoptimekey
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw stoptimekey ;是否为stoptimekey按钮
subwf remotetemp,w ;remotetemp-w
btfsc status,z ;=0?
goto waitnotstoptimekey ;等待直到放开按键
btfsc bottomflag
goto advcountiszero
movlw topstart ;计算延时数据地址
addwf topcount,w
movwf fsr
goto advcountnotzero
advcountiszero
movlw topstart
movwf fsr
advcountnotzero
movf indf,w
movwf delaytemp
btfss defaultflag
goto addstoptimebranch ;增加
movlw 01h
subwf delaytemp,f ;delaytemp+1
movlw delaytempmin ;是否到最小值
subwf delaytemp,w
btfsc status,c
goto stoptimeend1 ;不到最小值则返回
movlw delaytempmin ;到最小值则不能再减小
movwf delaytemp
goto stoptimeend
addstoptimebranch
movlw 01h
addwf delaytemp,f ;delaytemp+1
movlw delaytempmax ;是否到设置速度最大值
subwf delaytemp,w
btfss status,c
goto stoptimeend1 ;不到最大值则返回
movlw delaytempmax ;到最大值则不能再增加
movwf delaytemp
stoptimeend
movf delaytemp,w
movwf indf
call threelowtonesub
return
stoptimeend1
movf delaytemp,w
movwf indf
call twolowtonesub
return
;***************************
;改变所有画的停留时间子程序
;***************************
allstoptimekeysub
;call delaysub ;
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw allstoptimekey ;是否为allstoptimekey按钮
subwf remotetemp,w ;remotetemp-w
btfss status,z ;=0?
return
waitnotallstoptimekey
call delaysub
movlw remotemask
andwf remote,w ;读取遥控器输入数据
movwf remotetemp
movlw allstoptimekey ;是否为allstoptimekey按钮
subwf remotetemp,w ;remotetemp-w
btfsc status,z ;=0?
goto waitnotallstoptimekey ;等待直到放开按键
decf topdatacountreg,f
btfss defaultflag
goto addallstoptimebranch ;增加
movlw topstart
movwf fsr ;取出第一个延时参数
suballstoptimeloop
movf indf,w
movwf alldelaytemp
movlw 01h
subwf alldelaytemp,f ;alldelaytemp-1
movlw delaytempmin ;是否到最小值
subwf alldelaytemp,w
btfsc status,c
goto suballstoptimecontinue ;不到最小值则返回
movlw delaytempmin ;到最小值则不能再减小
movwf alldelaytemp
suballstoptimecontinue
movf alldelaytemp,w
movwf indf ;保存更改的数据
movlw topstart
addwf topdatacountreg,w ;所有数据是否更改完
subwf fsr,w
btfsc status,z
goto allstoptimeend
movlw 04h
addwf fsr,f
goto suballstoptimeloop
addallstoptimebranch
movlw topstart
movwf fsr ;取出第一个延时参数
addallstoptimeloop
movf indf,w
movwf alldelaytemp
movlw 01h
addwf alldelaytemp,f ;alldelaytemp+1
movlw delaytempmax ;是否到最大值
subwf alldelaytemp,w
btfss status,c
goto addallstoptimecontinue ;不到最大值则返回
movlw delaytempmax ;到最大值则不能再增加
movwf alldelaytemp
addallstoptimecontinue
movf alldelaytemp,w
movwf indf ;保存更改的数据
movlw topstart
addwf topdatacountreg,w ;所有数据是否更改完
subwf fsr,w
btfsc status,z
goto allstoptimeend
movlw 04h
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -