基于DSP的正弦波信号发生器源程序(汇编语言)
正弦波信号发生器源程序
D.1用泰勒级数开展开法计算一个角度的余弦值
******************************************************
* 用泰勒级数开展开法计算一个角度的余弦值 *
* cos(x)=1-x*x/2(1-x*x/3*4(1-x*x/5*6(x*x/7*8))) *
******************************************************
.title“cosx.asm”
.mmregs
.defstart
STACK:.usect“STACK”,10
Start:STM#STACK+10,SP
LD#d_x,DP
ST#6487H,d_x;x--》d_x
CALLcos_start
end:Bend
cos_start:
.defcos_start
d_coeff.usect“coeff”,4
.data
table:.word0249H;c1=1/(7*8)
.word0444H;c2=1/(5*6)
.word0AABH;c3=1/(3*4)
.word4000H;c4=1/(1*2)
d_x.usect“cos_vars”,1
d_squr_x .usect“cos_vars”,1
d_temp.usect“cos_vars”,1
d_cosx.usect“cos_vars”,1
c_1.usect“cos_vars”,1
.text
SSBXFRCT
STM#d_coeff,AR5
RPT#3
MVPD#table,*AR5+
STM#d_coeff,AR3
STM#d_x,AR2
STM#c_1,AR4
ST#7FFFH,c_1
SQUR*AR2+,A;A=x^2
STA,*AR2;(AR2)=x^2
||LD*AR4,B;B=1
MASR*AR2+,*AR3+,B,A;A=1-x^2/56,T=x^2
MPYAA;A=T*A=x^2(1-x^2/56)
STHA,*AR2;(d_temp)=x^2(1-x^2/56)
MASR*AR2-,*AR3+,B,A;A=1-x^2/30(1-x^2/56),T=x^2(1-x^2/56)
MPYA*AR2+;B=x^2(1-x^2/30(1-x^2/56))
STB,*AR2;(d_temp)=x^2(1-x^2/30(1-x^2/56))
||LD*AR4,B;B=1
MASR*AR2-,*AR3+,B,A;A=1-x^2(1-x^2/30(1-x^2/56))
SFTAA,-1,A;A右移一位即A除以2
NEGA
MPYA*AR2+;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
MAR*AR2+
RETD
ADD*AR4,16,B;B=1-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
STHB,*AR2;cos(theta)
RET
.end
******************************************************
*中断向量文件vectors.asm
******************************************************
.title “vectors.asm”
.refstart
.sect “.vectors”
Bstart
.end
******************************************************
*链接命令文件
******************************************************
vectors.obj
cosx.obj
-Ocosx.out
-mcosx.map
-estart
MEMORY
{
PAGE 0:
EPROM:org=0090H,len=0F70H
VECS:org=0080H,len=0010H
PAGE 1:
SPRAM:org=1000H,len=1000H
DARAM:org=2000H,len=2000H
}
SECTIONS
{
.
基于DSP的正弦波信号发生器源程序(汇编语言)
正弦波信号发生器源程序
D.1用泰勒级数开展开法计算一个角度的余弦值
******************************************************
* 用泰勒级数开展开法计算一个角度的余弦值 *
* cos(x)=1-x*x/2(1-x*x/3*4(1-x*x/5*6(x*x/7*8))) *
******************************************************
.title“cosx.asm”
.mmregs
.defstart
STACK:.usect“STACK”,10
Start:STM#STACK+10,SP
LD#d_x,DP
ST#6487H,d_x;x--》d_x
CALLcos_start
end:Bend
cos_start:
.defcos_start
d_coeff.usect“coeff”,4
.data
table:.word0249H;c1=1/(7*8)
.word0444H;c2=1/(5*6)
.word0AABH;c3=1/(3*4)
.word4000H;c4=1/(1*2)
d_x.usect“cos_vars”,1
d_squr_x .usect“cos_vars”,1
d_temp.usect“cos_vars”,1
d_cosx.usect“cos_vars”,1
c_1.usect“cos_vars”,1
.text
SSBXFRCT
STM#d_coeff,AR5
RPT#3
MVPD#table,*AR5+
STM#d_coeff,AR3
STM#d_x,AR2
STM#c_1,AR4
ST#7FFFH,c_1
SQUR*AR2+,A;A=x^2
STA,*AR2;(AR2)=x^2
||LD*AR4,B;B=1
MASR*AR2+,*AR3+,B,A;A=1-x^2/56,T=x^2
MPYAA;A=T*A=x^2(1-x^2/56)
STHA,*AR2;(d_temp)=x^2(1-x^2/56)
MASR*AR2-,*AR3+,B,A;A=1-x^2/30(1-x^2/56),T=x^2(1-x^2/56)
MPYA*AR2+;B=x^2(1-x^2/30(1-x^2/56))
STB,*AR2;(d_temp)=x^2(1-x^2/30(1-x^2/56))
||LD*AR4,B;B=1
MASR*AR2-,*AR3+,B,A;A=1-x^2(1-x^2/30(1-x^2/56))
SFTAA,-1,A;A右移一位即A除以2
NEGA
MPYA*AR2+;B=-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
MAR*AR2+
RETD
ADD*AR4,16,B;B=1-x^2/2(1-x^2/12(1-x^2/30(1-x^2/56)))
STHB,*AR2;cos(theta)
RET
.end
******************************************************
*中断向量文件vectors.asm
******************************************************
.title “vectors.asm”
.refstart
.sect “.vectors”
Bstart
.end
******************************************************
*链接命令文件
******************************************************
vectors.obj
cosx.obj
-Ocosx.out
-mcosx.map
-estart
MEMORY
{
PAGE 0:
EPROM:org=0090H,len=0F70H
VECS:org=0080H,len=0010H
PAGE 1:
SPRAM:org=1000H,len=1000H
DARAM:org=2000H,len=2000H
}
SECTIONS
{
.
举报