电子膨胀阀
电子膨胀阀.txt
;******************************************************;
.INCLUDE .\include\stepmoter.inc
.SECTION ROMCODE
;------------------------------------------------------
;**********************************************************
; stepmoter initial program ;**********************************************************
fstepmoter_initial:
lda P0
ora #0f0h
sta P0
lda P0D
ora #0f0h
sta P0D
lda #0
sta onestepsp
sta onestepno
sta stepmotorflag00
sta stepmotorflag01
sta stepmtoermode ;开机复位 == 0
ldm #00h,stepmotoraimpl
ldm #00h,stepmotoraimph
ldm #0f4h,stepmotorcurpl
ldm #001h,stepmotorcurph
ldm #0f4h,stepmotorsetpl ;500
ldm #001h,stepmotorsetph
lda #1
sta stepmotorpin
clb negatflg
clb aimequcurflag
clb poweronflag
clb bfnaaflag
clb bfnbbflag
clb bfnccflag
seb restflag ;开机复位标志--1
seb poweroffflag ;
;==================================================================
ldm #04h,stepmotorsp
ldm #064h,empal ;100 p0
ldm #00h,empah
ldm #0c8h,empbl ;200 p1
ldm #00h,empbh
ldm #02ch,empcl ;300 p2
ldm #01h,empch
ldm #090h,empdl ;400 p3
ldm #01h,empdh
ldm #02ch,ramminl ;#058h,ramminl
ldm #01h,ramminh ;#02h,ramminh
ldm #15,tmph
ldm #10,tmpm
ldm #5,tmpl
rts
;********************************************************** ; main program
;********************************************************** ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& fstepmoter_progm:
jsr fstepmotormodepro
jsr fstepmotoraimpro
rts
;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
;-------------------------------------------------------------- ; get mode
;-------------------------------------------------------------- fstepmotormodepro:
;--------8--- power off 4ms, ------------------
bbc poweroffflag,_fgsmmd_poweron
ldm #8,stepmtoermode ;6 ; off md 00
ldm #50,stepmotorsp ;4ms
''''''''''''''''''''''''''''''''''''''''''''''
ldm #00h,stepmotoraimph
ldm #00h,stepmotoraimpl
jmp _fgsmmd_modeext
;--------7---- power on 4ms ------------------- _fgsmmd_poweron:
bbc poweronflag,_fgsmmd_strrest
ldm #7,stepmtoermode ; on md 01
ldm #50,stepmotorsp ;4ms
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
ldm #001h,stepmotoraimph ;
ldm #0f4h,stepmotoraimpl ;
jmp _fgsmmd_modeext
;---------6---- rest mode p2 5 --------------------------- _fgsmmd_strrest:
bbc restflag,_fgsmmd_restdel
ldm #6,stepmtoermode ;P2
ldm #50,stepmotorsp ;4ms
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
lda empch ;ldm #02ch,empcl ;300 p2
sta stepmotoraimph
lda empcl ;ldm #01h,empch
sta stepmotoraimpl
jmp _fgsmmd_modeext
;---------5---- rest delay ------------------------ _fgsmmd_restdel:
lda keymode
cmp #0
beq _fgsmmd_restdelxx
clb bdelaymin
;lda
stepmtoermode ;???????????????????????????????????????????????????
_fgsmmd_restdelxx:
bbc bdelaymin,_fgsmmd_keymd
ldm #200,stepmtoermode ;P2
ldm #50,stepmotorsp ;4ms
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
lda empch ;ldm #02ch,empcl ;300 p2
sta stepmotoraimph
lda empcl ;ldm #01h,empch
sta stepmotoraimpl
jmp _fgsmmd_modeext
;---------4---- keymode ---------------------------
;0 auto 1 manual 2 f 001 - f 003
;3 auto 闪烁 4 manual 闪烁 5 f 001 - f 003 闪烁
;------------ hand ------------------------------ _fgsmmd_keymd:
lda keymode
cmp #1
bne _fgsmd_cdfin
ldm #4,stepmtoermode
ldm #50,stepmotorsp ;4ms \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
lda stepmotorsetph
sta stepmotoraimph
lda stepmotorsetpl
sta stepmotoraimpl
clb bfnaaflag
clb bfnbbflag
clb bfnccflag
jmp _fgsmmd_modeext
;------------- pin ------------------------------- _fgsmd_cdfin:
cmp #2
beq _fgsmd_finaa
jmp _fgsmd_nochg
;------------ p001 -----------------; stepmotorpin _fgsmd_finaa:
lda stepmotorpin
cmp #1
bne _fgsmd_finbb
ldm #1,stepmtoermode
ldm #200,stepmotorsp ;4ms \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
bbs bfnaaflag,_fgsmd_finaa_ou
lda empbh ;empbl ;200 p1
sta stepmotoraimph
lda empbl ;,empbh
sta stepmotoraimpl
clb bfnbbflag
clb bfnccflag
jmp _fgsmmd_modeext
_fgsmd_finaa_ou:
lda empal ; p0
sta R3
lda empah ;
sta R4
lda empcl ; p2
sta R5
lda empch ;
sta R6
jsr ftmp_adc
jmp _fgsmmd_modeext
;------------ p002 ---------------------------------
_fgsmd_finbb:
cmp #2
bne _fgsmd_fincc
ldm #2,stepmtoermode
ldm #200,stepmotorsp ;4ms \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
bbs bfnbbflag,_fgsmd_finbb_ou
lda empch ;empcl ;300 p2
sta stepmotoraimph
lda empcl ;empch
sta stepmotoraimpl
clb bfnaaflag
clb bfnccflag
jmp _fgsmmd_modeext
_fgsmd_finbb_ou:
lda empbl ; p1
sta R3
lda empbh ;
sta R4
lda empdl ; p3
sta R5
lda empdh ;
sta R6
jsr ftmp_adc
jmp _fgsmmd_modeext
;------------ p003 ---------------------------------
_fgsmd_fincc:
cmp #3
bne _fgsmd_nochg
ldm #2,stepmtoermode
ldm #200,stepmotorsp ;4ms \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
bbs bfnccflag,_fgsmd_fincc_ou
lda empdh ;empdl ;400 p3
sta stepmotoraimph
lda empdl ;empdh
sta stepmotoraimpl
clb bfnaaflag
clb bfnbbflag
jmp _fgsmmd_modeext
_fgsmd_fincc_ou:
lda empcl ; p2
sta R3
lda empch ;
sta R4
lda #0f4h ;empdl ; 500
sta R5
lda #01h ;empdh ;
sta R6
jsr ftmp_adc
jmp _fgsmmd_modeext
;------------------------------------------------------------- _fgsmd_nochg:
;-------------------------------------------------------------- _fgsmmd_modeext:
rts
;-------------------------------------------------------------- ;************************************************************** ; get aim
;************************************************************** ;-------------------------------------------------------------- fstepmotoraimpro:
; ----------------- mode 8 PMV 00 4ms ---------------------
lda stepmtoermode
cmp #8
bne _fgsmap_1
jsr fgsmap_cmp
bbc aimequcurflag,_fgsmap_nchg ; 相等,清标志108
clb poweroffflag
_fgsmap_nchg:
jmp _fgsmmap_epro
; ------------mode 7 PMV 500 4ms -----------------
_fgsmap_1: ; --108度-1228.8步(4cdh)
cmp #7
bne _fgsmap_rest
jsr fgsmap_cmp ;check aim , cur
bbc aimequcurflag,_fgsmap_ce ; 相等,清标志108
clb poweronflag
_fgsmap_ce:
jmp _fgsmmap_epro
;-------------mode 6 rest p2 -----------------------------
_fgsmap_rest:
cmp #6 ;#05h
bne _fgsmap_restdel
jsr fgsmap_cmp
bbc aimequcurflag,_fgsmap_resce ; 相等,清标志108
clb restflag
seb bdelaymin
lda ramminl
sta tmminl
lda ramminh
sta tmminh
_fgsmap_resce:
jmp _fgsmmap_epro
;------------mode 5 delay ----------------------------- _fgsmap_restdel:
cmp #5
bne _fgsmap_sethd
jmp _fgsmmap_epro
;------------mode 4 set hand ---------------------------
_fgsmap_sethd:
cmp #4
bne _fgsmap_setpin
jmp _fgsmmap_epro
;------------mode 2 pin ---------------------------
_fgsmap_setpin:
;-----------1- p001 ---------------------------------
cmp #01h
bne _fgsmap_setpinbb
jsr fgsmap_cmp
bbc aimequcurflag,_fgsmap_setpnaou ; 相等,清标志108
seb bfnaaflag
_fgsmap_setpnaou:
jmp _fgsmmap_epro
;-----------2- p002 --------------------------------- _fgsmap_setpinbb:
cmp #02h
bne _fgsmap_setpincc
jsr fgsmap_cmp
bbc aimequcurflag,_fgsmap_setpnabu ; 相等,清标志108
seb bfnbbflag
_fgsmap_setpnabu:
jmp _fgsmmap_epro
;-----------3- p003 --------------------------------- _fgsmap_setpincc:
cmp #02h
bne _fgsmap_2
jsr fgsmap_cmp
bbc aimequcurflag,_fgsmap_setpnacc ; 相等,清标志108
seb bfnccflag
_fgsmap_setpnacc:
jmp _fgsmmap_epro
_fgsmap_2:
;-------------------------------------------------------------- _fgsmmap_epro:
rts
;============================================================== ;-------------------------------------------------------------- ; stepmoter aim =?=cur change aimequcurflag ; == aimequcurflag =1
;-------------------------------------------------------------- fgsmap_cmp:
clb aimequcurflag
lda stepmotoraimph
cmp stepmotorcurph
bne _fgsmap_cpe ; rts
lda stepmotoraimpl
cmp stepmotorcurpl
bne _fgsmap_cpe
seb aimequcurflag
_fgsmap_cpe:
rts
;**************************************************************
;input: adcipipe 回气 trueadciair 传感器 ; tmph,tmpm,tmpl
;change : stepmotoraimph stepmotoraimpl ;**************************************************************
ftmp_adc:
lda adcipipe
sta R0
lda trueadciair
sta R1
cmp #R0 ;r1 < R0 ,c=0
bcc _ftmp_adc_rr
jmp _ftmp_adc_ff
;--------- R0-R1 ------------------- _ftmp_adc_rr:
sec
lda R0
sbc R1
sta R2
;jmp ; t < T1 ;_ftmp_adc_out
jsr ftmp_decpro
jmp _ftmp_cmp_out
;--------- R1-R0 ------------------- _ftmp_adc_ff:
sec
lda R1
sbc R0
sta R2
;--------check inc or dec --------------------
_ftmp_adc_out: ; t < T1
lda R2
cmp tmpl ;<,c=0
bcs _ftmp_cmpm
jsr ftmp_decpro ;dec PMV
jmp _ftmp_cmp_out
;-----------------------------------------
_ftmp_cmpm: ;T1 =< t < T2
cmp tmph
bcs _ftmp_cmph
;no chang
jmp _ftmp_cmp_out
;--------------------------------------- _ftmp_cmph: ;t >= T2
;inc PMV
jsr ftmp_incpro
jmp _ftmp_cmp_out
;--------------------------------------
;=================================================
_ftmp_cmp_out:
rts
;*************************************************
; ; t < T1 aim --
;*************************************************
ftmp_decpro:
lda R4
cmp stepmotoraimph ;r4< ,c=0
beq _ftmp_cheneb
bcs _rtmp_rsrtd
jmp _ftmp_dec_pro ;r
aim c=1
beq _ftmp_equ
bcs _ftmp_rda ;< c=0
jmp _ftmp_dec_pro
;---------------------------- _ftmp_equ:
jmp _ftmp_chnend
;------------------------ _ftmp_rda:
lda R3
sta stepmotoraimpl
jmp _ftmp_chnend
;---------dec pro-------------- _ftmp_dec_pro:
clc
lda #0ffh
adc stepmotoraimpl
sta stepmotoraimpl
lda #0ffh
adc stepmotoraimph
sta stepmotoraimph
jmp _ftmp_chnend
;--------------------------------------------------------------
_ftmp_chnend:
rts
;*************************************************
; ; t >= T2 aim ++
;*************************************************
ftmp_incpro:
lda R6
cmp stepmotoraimph ;r4< ,c=0
beq _ftmp_chenebxx
bcc _rtmp_xxsrtd
jmp _ftmp_inc_pro ;raim c=1
beq _ftmp_equxx
bcc _ftmp_rdaxx ;< c=0
jmp _ftmp_inc_pro
;---------------------------- _ftmp_equxx:
jmp _ftmp_nind
;------------------------ _ftmp_rdaxx:
lda R5
sta stepmotoraimpl
jmp _ftmp_nind
;---------dec pro-------------- _ftmp_inc_pro:
clc
lda #01h
adc stepmotoraimpl
sta stepmotoraimpl
lda #00h
adc stepmotoraimph
sta stepmotoraimph
jmp _ftmp_nind ;_ftmp_chnend
;--------------------------------------------------------------
_ftmp_nind:
rts
;**************************************************************
; timer1 调用 4ms 步进机走一步
;**************************************************************
;--------------------------------------------------------------
;input: stepmotorsp stepmotoraimpl stepmotoraimph
;output: stepmotorcurpl stepmotorcurph
;change: onestepsp onestepno
;register: X
;stepmotorflag bit: negatflg
;-------------------------------------------------------------
fstepmotoronestep:
cld ;binary
clt
;-------------------------------------------------------------
; ? 4ms
;-------------------------------------------------------------
inc onestepsp ;onestepsp 4ms
lda onestepsp
cmp stepmotorsp ; 4ms =/= z=0
beq _fs_onestepnet
jmp _fs_onestepe ;z=0 时间未到返回 jmp rts
_fs_onestepnet:
ldm #0,onestepsp
;-------------------------------------------------------------
; cmp cur ? aim
;-------------------------------------------------------------
;扫描时间到了,和目标转动角度比较
lda stepmotorcurph
cmp stepmotoraimph ; == , z=1 ; a>=#,c =1
beq _fs_equh ; == z=1 , jmp 继续判断低字节
; 不等,> , < ;-------------------------------------------------------------
; lda stepmotorcurph
; cmp stepmotoraimph ; == , z=1 ; a>=#,c =1
;-------------------------------------------------------------
bcs _fs_chaxxx ;_fs_cha ; > c=1 , jmp 高于目标角度,当前角度减一次,
扫描步进机指针++
jmp _fs_cla ; < c=0 ,低于目标角度,当前角度加一次,然后扫描
步进机指针--
_fs_chaxxx:
jmp _fs_cha
_fs_equh: ;
lda stepmotorcurpl
cmp stepmotoraimpl
beq _fs_equl ; == z<-1 ,jmp 电机<- 00
;-------------------------------------------------------------
; lda stepmotorcurpl
; cmp stepmotoraimpl
;-------------------------------------------------------------
bcs _fs_cha ; > c=1
jmp _fs_cla
;-------------------------------------------------------------
;stepmotorcurph/l = stepmotoraimph/l _fs_equl:
ldm #0,onestepno
clb negatflg
jmp _fs_out ;扫描步进机
;-------------------------------------------------------------
;stepmotorcurph/l > stepmotoraimph/l _fs_cha:
seb negatflg
lda stepmotorcurpl
sec
sbc #1
sta stepmotorcurpl
lda stepmotorcurph
sbc #0
sta stepmotorcurph
jmp _fs_onestppc
;-------------------------------------------------------------
;stepmotorcurph/l < stepmotoraimph/l ; < c=0 _fs_cla:
clb negatflg
lda stepmotorcurpl
clc
adc #1
sta stepmotorcurpl
lda stepmotorcurph
adc #0
sta stepmotorcurph
jmp _fs_onestppc ;step moter pointer ++
;-------------------------------------------------------------
_fs_onestppc: ;step moter pointer ++ =?= 9
lda onestepno
clc
adc #1
sta onestepno
cmp #9
bne _fs_clae
ldm #1,onestepno _fs_clae:
jmp _fs_out ;扫描步进机
;-------------------------------------------------------------
_fs_out: ;控制 步进机 转动
lda onestepno ;表格指针
pha
tax ;a -> x
bbc negatflg,stepmotorflag00,_stpm_negative ;negatflg = 1 转
移到反转
lda tabstepff,X
jmp _fs_onestpnex _stpm_negative:
lda tabstepzz,X
_fs_onestpnex:
sta onestepno
lda P0
and #0fh
ora onestepno
sta P0
pla
sta onestepno _fs_onestepe:
rts
;============================================================= ;-------------------------------------------------------------
tabstepff: .BYTE 00h,80H,0c0h,40H,60H,20H,30H,10H,90H ;正转
0,1,2,3,4,5,6,7,8
tabstepzz: .BYTE 00h,90h,10h,30h,20h,60h,40h,0c0h,80h ;反转
0,1,2,3,4,5,6,7,8
.END ;*************************************************************