基于DSP的正弦波信号发生器源程序汇编语言Word格式.doc
《基于DSP的正弦波信号发生器源程序汇编语言Word格式.doc》由会员分享,可在线阅读,更多相关《基于DSP的正弦波信号发生器源程序汇编语言Word格式.doc(7页珍藏版)》请在冰豆网上搜索。
.def cos_start
d_coeff .usect "
coeff"
4
.data
table:
.word 0249H ;
c1=1/(7*8)
.word 0444H ;
c2=1/(5*6)
.word 0AABH ;
c3=1/(3*4)
.word 4000H ;
c4=1/(1*2)
d_x .usect "
cos_vars"
1
d_squr_x.usect "
d_temp .usect "
d_cosx .usect "
c_1 .usect "
.text
SSBX FRCT
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
ST A,*AR2 ;
(AR2)=x^2
||LD *AR4,B ;
B=1
MASR *AR2+,*AR3+,B,A ;
A=1-x^2/56,T=x^2
MPYA A ;
A=T*A=x^2(1-x^2/56)
STH A,*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))
ST B,*AR2 ;
(d_temp)=x^2(1-x^2/30(1-x^2/56))
A=1-x^2(1-x^2/30(1-x^2/56))
SFTA A,-1,A ;
A右移一位即A除以2
NEG A
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)))
STH B,*AR2 ;
cos(theta)
RET
.end
*中断向量文件vectors.asm
.title"
vectors.asm"
.ref start
.sect"
.vectors"
B start
.end
*链接命令文件
vectors.obj
cosx.obj
-O cosx.out
-m cosx.map
-estart
MEMORY
{
PAGE0:
EPROM:
org=0090H,len=0F70H
VECS:
org=0080H,len=0010H
PAGE1:
SPRAM:
org=1000H,len=1000H
DARAM:
org=2000H,len=2000H
}
SECTIONS
.text :
>
EPROM PAGE0
.data :
STACK :
SPRAM PAGE1
cos_vars :
DARAM PAGE1
coeff :
.vectors :
VECS PAGE0
附录D.2利用泰勒公式产生正弦波的程序
**************************************
*利用泰勒公式产生正弦波的程序*
**************************************
sin.asm"
sin_x:
sin_x"
360
.usect"
10H
.bssdis_buff,1
k_theta .set 286
PA0 .set 0x0002
start:
STM #STACK+10H,SP
STM k_theta,AR0
STM 0,AR1
STM #sin_x,AR6
STM #90,BRC
RPTB loop1-1
LDM AR1,A
LD #d_xs,DP
STL A,@d_xs
STL A,@d_xc
CALL sinx
CALL cosx
LD #d_sinx,DP
LD @d_sinx,16,A
MPYA @d_cosx
STH B,1,*AR6+
MAR *AR1+0
loop1:
STM #sin_x+89,AR7
STM #88,BRC
RPTB loop2-1
LD *AR7-,A
STL A,*AR6+
loop2:
STM #179,BRC
STM #sin_x,AR7
RPTB loop3-1
LD *AR7+,A
loop3:
STM #sin_x,AR6
STM #1,AR0
STM #360,BK
loop4:
PORTW *AR6+0%,PA0
LD*AR6,A
MVDK*AR6,@dis_buff
B loop4
*用泰勒级数开展开式计算角度的正弦值 *
*sin(x)=x(1-x*x/2*3(1-x*x/4*5(1-x*x/6*7(1-x*x/8*9))))*
sinx:
.def d_xs,d_sinx
table_s
.word 01C7H ;
c1=1/(8*9)
.word 030BH ;
c2=1/(6*7)
.word 0666H ;
c3=1/(4*5)
.word 1556H ;
c4=1/(2*3)
d_coef_s .usect "
coef_s"
d_xs .usect "
sin_vars"
d_squr_xs .usect "
d_temp_s .usect "
d_sinx .usect "
d_l_s .usect "
STM #d_coef_s,AR5
MVPD #table_s,*AR5+
STM #d_coef_s,AR3
STM #d_xs,AR2
STM #d_l_s,AR4
ST #7FFFH,d_l_s
A=1-x^2/72,T=x^2
A=T*A=x^2(1-x^2/72)
(d_temp)=x^2(1-x^2/72)
A=1-x^2/42(1-x^2/72),T=x^2(1-x^2/72)
B=x^2(1-x^2/42(1-x^2/72))
(d_temp)=x^2(1-x^2/42(1-x^2/72))
A=1-x^2/20(1-x^2/42(1-x^2/72))
B=x^2(1-x^2/20(1-x^2/42(1-x^2/72)))
(d_temp)=B
A=1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72)))
MPYA d_xs ;
B=x(1-x^2/6(1-x^2/20(1-x^2/42(1-x^2/72))))
STH B,d_sinx ;
sin(theta)
*************************************************
*用泰勒级数开展开式计算角度的余弦值 *
*cos(x)=1-x*x/2(1-x*x/3*4(1-x*x/5*6(x*x/7*8))) *
cosx:
.def d_xc,d_cosx
d_coef_c .usect "
coef_c"
table_c:
.word 0249H ;
.word 0444H ;
.word 0AABH ;
.word 4000H ;
d_xc .usect "
d_squr_xc .usect "
d_temp_c .usect "
c_l_c .usect "
c