基于DSP的正弦波信号发生器源程序汇编语言.doc
- 文档编号:235905
- 上传时间:2022-10-07
- 格式:DOC
- 页数:7
- 大小:31KB
基于DSP的正弦波信号发生器源程序汇编语言.doc
《基于DSP的正弦波信号发生器源程序汇编语言.doc》由会员分享,可在线阅读,更多相关《基于DSP的正弦波信号发生器源程序汇编语言.doc(7页珍藏版)》请在冰豆网上搜索。
正弦波信号发生器源程序
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
.def start
STACK:
.usect "STACK",10
Start :
STM #STACK+10,SP
LD #d_x,DP
ST #6487H,d_x ;x-->d_x
CALL cos_start
end:
B end
cos_start:
.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 "cos_vars",1
d_temp .usect "cos_vars",1
d_cosx .usect "cos_vars",1
c_1 .usect "cos_vars",1
.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))
||LD *AR4,B ;B=1
MASR *AR2-,*AR3+,B,A ;A=1-x^2(1-x^2/30(1-x^2/56))
SFTA A,-1,A ;A右移一位即A除以2
NEG A
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)))
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 :
>EPROM PAGE0
STACK :
>SPRAM PAGE1
cos_vars :
>DARAM PAGE1
coeff :
>DARAM PAGE1
.vectors :
>VECS PAGE0
}
附录D.2利用泰勒公式产生正弦波的程序
**************************************
*利用泰勒公式产生正弦波的程序*
**************************************
.title "sin.asm"
.mmregs
.def start
sin_x:
.usect "sin_x",360
STACK:
.usect"STACK",10H
.bssdis_buff,1
k_theta .set 286
PA0 .set 0x0002
.text
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
NEG A
STL A,*AR6+
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
.data
.data
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",4
d_xs .usect "sin_vars",1
d_squr_xs .usect "sin_vars",1
d_temp_s .usect "sin_vars",1
d_sinx .usect "sin_vars",1
d_l_s .usect "sin_vars",1
.text
SSBX FRCT
STM #d_coef_s,AR5
RPT #3
MVPD #table_s,*AR5+
STM #d_coef_s,AR3
STM #d_xs,AR2
STM #d_l_s,AR4
ST #7FFFH,d_l_s
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/72,T=x^2
MPYA A ;A=T*A=x^2(1-x^2/72)
STH A,*AR2 ;(d_temp)=x^2(1-x^2/72)
MASR *AR2-,*AR3+,B,A ;A=1-x^2/42(1-x^2/72),T=x^2(1-x^2/72)
MPYA *AR2+ ;B=x^2(1-x^2/42(1-x^2/72))
ST B,*AR2 ;(d_temp)=x^2(1-x^2/42(1-x^2/72))
||LD *AR4,B ;B=1
MASR *AR2-,*AR3+,B,A ;A=1-x^2/20(1-x^2/42(1-x^2/72))
MPYA *AR2+ ;B=x^2(1-x^2/20(1-x^2/42(1-x^2/72)))
ST B,*AR2 ;(d_temp)=B
||LD *AR4,B ;B=1
MASR *AR2-,*AR3+,B,A ;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)
RET
*************************************************
*用泰勒级数开展开式计算角度的余弦值 *
*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",4
.data
table_c:
.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_xc .usect "cos_vars",1
d_squr_xc .usect "cos_vars",1
d_temp_c .usect "cos_vars",1
d_cosx .usect "cos_vars",1
c_l_c .usect "c
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 DSP 正弦波 信号发生器 源程序 汇编语言
![提示](https://static.bdocx.com/images/bang_tan.gif)