| 
 
| 将一些整数转换为浮点数子程序,得到计算占空比要用的常数 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
 | 
 |