📄 spwm.asm
字号:
SACL TEMP1 ;保存, Q14格式
clrc sxm ;
LT T_HALF ;T_carr/2=1000,Q0格式
MPYU TEMP1
PAC
SACH TEMP1,2 ;相当于右移14位,保存为Q0格式
LACC #SIN_ENTRY ;SIN表入口地址
ADD TEMP2 ;偏移量
TBLR TEMP2 ;保存第2个SIN值,Q14格式有符号数
setc sxm
LT TEMP2
MPY M_ ;乘M,Q9格式
PAC ;Q23格式
SACH TEMP2,7 ;相当于右移9位,Q14格式有符号数
LACC TEMP2
ADD #1,14 ;加+1
SACL TEMP2 ;保存, Q14格式
clrc sxm
LT T_HALF ;T_carr/2=1000,Q0格式
MPYU TEMP2
PAC
SACH TEMP2,2 ;相当于右移14位,保存为Q0格式
LACC #SIN_ENTRY ;SIN表入口地址
ADD TEMP3 ;偏移量
TBLR TEMP3 ;保存第3个SIN值,Q14格式有符号数
setc sxm
LT TEMP3
MPY M_ ;乘M,Q9格式
PAC ;Q23格式
SACH TEMP3,7 ;相当于右移9位,Q14格式有符号数
LACC TEMP3
ADD #1,14 ;加+1
SACL TEMP3 ;保存, Q14格式
clrc sxm
LT T_HALF ;T_carr/2=1000,Q0格式
MPYU TEMP3
PAC
SACH TEMP3,2 ;相当于右移14位,保存为Q0格式
LACC K_
ADD #1 ;K+1
SACL K_
SUB N_ ;比较K是否小于N
BCND WXM3,LT ;是则跳转
SPLK #0,K_ ;否则K=0
WXM3 LACC TEMP1 ;
SUB PMIN ;检测是否小于最小正脉宽3微秒
BCND WXM4,GT ;不是继续
SPLK #0,TEMP1 ;是则删除窄脉冲
B WXM5
WXM4 LACC TEMP1 ;检测是否小于最小负脉宽3微秒
SUB PMAX
BCND WXM5,LT ;不是继续
SPLK #2000,TEMP1 ;是则删除窄脉冲
WXM5 LACC #2000 ;2倍周期值
SUB TEMP1 ;计算比较值1
ROR ;除2
LDP #232 ;指向事件管理器A
SACL CMPR1 ;保存比较值1
LDP #5
LACC TEMP2
SUB PMIN ;检测是否小于最小正脉宽3微秒
BCND WXM6,GT ;不是继续
SPLK #0,TEMP2 ;是则删除窄脉冲
B WXM7
WXM6 LACC TEMP2 ;检测是否小于最小负脉宽3微秒
SUB PMAX
BCND WXM7,LT ;不是继续
SPLK #2000,TEMP2 ;是则删除窄脉冲
WXM7 LACC #2000 ;2倍周期值
SUB TEMP2 ;计算比较值2
ROR ;除2
LDP #232 ;指向事件管理器A
SACL CMPR2 ;保存比较值2
LDP #5
LACC TEMP3
SUB PMIN ;检测是否小于最小正脉宽3微秒
BCND WXM8,GT ;不是继续
SPLK #0,TEMP3 ;是则删除窄脉冲
B WXM9
WXM8 LACC TEMP3 ;检测是否小于最小负脉宽3微秒
SUB PMAX
BCND WXM9,LT ;不是继续
SPLK #2000,TEMP3 ;是则删除窄脉冲
WXM9 LACC #2000 ;2倍周期值
SUB TEMP3 ;计算比较值3
ROR ;除2
LDP #232 ;指向事件管理器A
SACL CMPR3 ;保存比较值3
LDP #5 ;恢复现场
LT P_LO ;恢复P
MPY #1
LPH P_HI
LT T_SAVE ;恢复T
LACC ACCH,16
ADDS ACCL ;恢复ACC
LDP #0 ;指向B2
LST #1,ST1_SAVE ; 恢复ST1 #ST1,ST1_SAVE
LST #0,ST0_SAVE ; 恢复ST0#ST0,ST0_SAVE
CLRC INTM ; 开中断
RET ; 返回
;--------------------------------------延时子程序------------------------------------
delay_s MAR *,AR1 ;2个指令周期
lacc delay ;1个指令周期
loop SUB #1 ;LOOP内为5×66536个指令周期
BCND loop,EQ ;等于0则跳转 总计0.008317075s
BANZ delay_s ;DELAY时间为 AR1*0.008317075S
RET
.DATA
;--------------------------------------数据段-------------------------------------------------------------
SIN_ENTRY .WORD 0 ; SIN值表,D1格式有符号数
.WORD 257,514,771,1028,1285,1541,1797,2053,2308,2563,2816,3070,3322,3574,3824,4074,4323,4570,4817,5062 ; 20.000000
.WORD 5307,5549,5791,6031,6269,6506,6742,6975,7207,7438,7666,7893,8117,8340,8560,8778,8995,9209,9420,9630; 40.000000
.WORD 9837,10041,10243,10443,10640,10834,11026,11215,11401,11585,11765,11943,12118,12289,12458,12624,12786,12945,13102,13254; 60.000000
.WORD 13404,13550,13693,13833,13969,14102,14231,14357,14479,14598,14713,14824,14932,15036,15136,15233,15326,15415,15500,15582; 80.000000
.WORD 15659,15733,15803,15869,15931,15989,16043,16093,16140,16182,16220,16254,16285,16311,16333,16351,16365,16375,16381,16383; 100.000000
.WORD 16381,16375,16365,16351,16333,16311,16285,16254,16220,16182,16140,16093,16043,15989,15931,15869,15803,15733,15659,15582; 120.000000
.WORD 15500,15415,15326,15233,15136,15036,14932,14824,14713,14598,14479,14357,14231,14102,13969,13833,13693,13550,13404,13254; 140.000000
.WORD 13102,12945,12786,12624,12458,12289,12118,11943,11765,11585,11401,11215,11026,10834,10640,10443,10243,10041,9837,9630; 160.000000
.WORD 9420,9209,8995,8778,8560,8340,8117,7893,7666,7438,7207,6975,6742,6506,6269,6031,5791,5549,5307,5062; 180.000000
.WORD 4817,4570,4323,4074,3824,3574,3322,3070,2816,2563,2308,2053,1797,1541,1285,1028,771,514,257,0; 200.000000
.WORD 65279,65022,64765,64508,64251,63995,63739,63483,63228,62973,62720,62466,62214,61962,61712,61462,61213,60966,60719,60474; 220.000000
.WORD 60229,59987,59745,59505,59267,59030,58794,58561,58329,58098,57870,57643,57419,57196,5676,56758,56541,56327,56116,55906; 240.000000
.WORD 55699,55495,55293,55093,54896,54702,54510,54321,54135,53951,53771,53593,53418,53247,53078,52912,52750,52591,52434,52282; 260.000000
.WORD 52132,51986,51843,51703,51567,51434,51305,51179,51057,50938,50823,50712,50604,50500,50400,50303,50210,50121,50036,49954; 280.000000
.WORD 49877,49803,49733,49667,49605,49547,49493,49443,49396,49354,49316,49282,49251,49225,49203,49185,49171,49161,49155,49153; 300.000000
.WORD 49155,49161,49171,49185,49203,49225,49251,49282,49316,49354,49396,49443,49493,49547,49605,49667,49733,49803,49877,49954; 320.000000
.WORD 50036,50121,50210,50303,50400,50500,50604,50712,50823,50938,51057,51179,51305,51434,51567,51703,51843,51986,52132,52282; 340.000000
.WORD 52434,52591,52750,52912,53078,53247,53418,53593,53771,53951,54135,54321,54510,54702,54896,55093,55293,55495,55699,55906; 360.000000
.WORD 56116,56327,56541,56758,56976,57196,57419,57643,57870,58098,58329,58561,58794,59030,59267,59505,59745,59987,60229,60474; 380.000000
.WORD 60719,60966,61213,61462,61712,61962,62214,62466,62720,62973,63228,63483,63739,63995,64251,64508,64765,65022,65279,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -