程序不太懂

2019-07-20 14:50发布

将一些整数转换为浮点数子程序,得到计算占空比要用的常数
JISUAN:LDP #5 ;调谐度由整形转换为浮点
LACL AL
LRLK    AR1,STACK   ;设置 STACK指针
SETC SXM
CALL F$ $ ITOF,AR1 ;A=a×1000
CLRC SXM
MAR *-
LACC *-,16
ADDS *
SACL AL
SACH AH
LRLK AR1,STACK ;A/2000=0.5 a
SETC SXM
LACL #0
SACL *+
LACL #44FAH ;44FA 0000h =2000
SACL *+
LACL AL
SACL *+
LACL AH
SACL *+
CALL F$ $ DIV
MAR *-
LACC *-,16
ADDS *
SACL AL
SACH AH
LACL T3PR_TEMPL
LRLK    AR1,STACK
SETC SXM ;定时器周期寄存器
;的值转换为浮点数
CALL F$ $ ITOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS *
SACL T3PR_TEMPL
SACH T3PR_TEMPH
LACL FCL ;FC值转换为浮点数
LRLK    AR1,STACK
SETC SXM
CALL F$ $ LTOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS *
SACL FCL
SACH FCH
LACL FRL
LRLK    AR1,STACK
SETC SXM   ;FR值转换为浮点数
CALL F$ $ ITOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS *
SACL FRL
SACH FRH
LRLK    AR1,STACK ;N=FC/FR
LACL FRL
SACL *+
LACL FRH
SACL *+
LACL FCL
SACL *+
LACL FCH
SACL *+
CALL F$ $ DIV
MAR *-
LACC *-,16
ADDS *
SACL NL
SACH NH ;N的浮点数
LRLK    AR1,STACK
SETC SXM
SACL *+
SACH *+
CALL F$ $ FTOI
SACL N ;N的整数
LRLK AR1,STACK
SACL *+
LACL NH
SACL *+
LACL #0F5C3H ;40C8F5C3h=6.282=2×3.141
SACL *+
LACL #40C8H
SACL *+
CALL F$ $ DIV
MAR *-
LACC *-,16
ADDS *
SACL NL
SACH NH
RET
;(6)计算占空比子程序
DATIO: LDP #5
LACL I  ;I由整形转换为浮点数
LRLK    AR1,STACK
SETC SXM
CALL F$ $ ITOF,AR1
CLRC SXM
MAR *-
LACC *-,16
ADDS * ;结果保存在 ACC
LRLK AR1,STACK ;i*2*3.14/N
SACL *+
SACH *+
LACL NL
SACL *+
LACL NH
SACL *+
CALL F$ $ MUL
MAR *-
ZALH *-
ADDS *
LRLK    AR1,STACK ;sin(i*2*3.14/N)
SACL *+
SACH *+
CALL _sin ;结果在 ACC
LRLK    AR1,STACK ;0.5a*sin(i*2*3.14/N)
SACL *+
SACH *+
LACL AL
SACL *+
LACL AH
SACL *+
CALL F$ $ MUL
MAR *-
ZALH *-
ADDS * ;结果在 ACC
LRLK    AR1,STACK ;D=0.5+A*sin(i*2*3.14/N)
SACL *+
SACH *+
LACL #0
SACL *+
LACL #3F00H ;3F00 0000h =0.5
SACL    *+
CALL F$ $ ADD
MAR *-
ZALH *-
ADDS * ;结果在 ACC
LRLK AR1,STACK
SACL *+
SACH *+
LACL T3PR_TEMPL
SACL *+
LACL T3PR_TEMPH
SACL *+
CALL F$ $ MUL
MAR *-
ZALH *-
ADDS * ;结果在 ACC
LRLK    AR1,STACK ;CMPR的浮点数转换为整数
SETC SXM
SACL *+
SACH *+
CALL F$ $ FTOI,AR1
CLRC SXM ;结果在 ACC
SACL DATIOL
LDP #5
LACC I
SUB N
BCND NSPWM,GEQ
LACC I
ADD #1
SACL I
B RRET
NSPWM: SPLK #0,I ;断是否是下一个周期
RRET: RET   
PHANTOM:KICK_DOG ;复位WD计数器
RET
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。