DSP课程设计.doc
- 文档编号:359254
- 上传时间:2023-04-29
- 格式:DOC
- 页数:8
- 大小:355KB
DSP课程设计.doc
《DSP课程设计.doc》由会员分享,可在线阅读,更多相关《DSP课程设计.doc(8页珍藏版)》请在冰点文库上搜索。
一、设计题目:
在CCS中实现正弦波
二、设计目的:
1.熟悉汇编语言的编程过程。
2.掌握CCS开发软件的使用方法。
3.利用汇编语言编程并在CCS中仿真实现正弦波。
三、设计原理:
一般情况下有两种方法可以产生正弦波,即查找法和泰勒级数展开法。
本设计采用泰勒级数法来来实现正弦波。
正弦函数可以用泰勒级数来表示,即:
(1)
我们取泰勒级数展开式的前五项作近似计算,即:
(2)
并利用递推公式
(3)
来求具体的正弦值。
通过计算各具体的正弦值后,便可以实现一个对应的正弦波。
四、在CCS中调试程序并产生正玄波
安装并打开CCS。
打开SetupCCStudiov3.3如图1所示。
图1
选择C5402芯片并加载,如图2、图3所示。
图2.加载芯片
图3.确定完成加载
在C:
/CCStudiov3.3/MyProjects目录下新建文件夹,命名为sinewave,将附录中的三个文件保存到该文件夹中。
新建工程名为“shiyan”,保存路径为C:
/CCStudiov3.3/MyProjects/sinewave。
如图4所示。
图4
将文件夹“sinewave”下的三个文件(sin.asm,sin_v.asm,sin.cmd)以及库文件rts500.lib添加到新建工程“shiyan”中,对文件进行编译链接,若有错误进行改正,直至无误,如图5所示。
图5
现在已经产生了可执行文件shiyan.out,打开File→Loadprogram,选择shiyan.out打开,便将程序加载到了CCS中,可以进行运行调试了。
选择View→Graph→Time/Frequency,打开如图6所示的对话框(此对话框的各参数已经设置完毕),点击确定后便得到如图7所示的正弦波。
图6
图7.正弦波信号
通过以上步骤设计,得到了一个正弦信号波形,而正弦信号发生器可以应用到通信、仪器仪表和工业控制等领域中,这样便有利于对其进行更深入的研究与探讨,具有一定的理论意义和实际意义。
五、课程设计的心得体会
本课程设计主要是使用汇编语言编程并在CCS中实现正玄波。
设计过难度适中,但进一步了解了如何使用汇编语言编写程序以及如何在CCS中进行程序调试和使用各种CCS工具。
我明白了一个道理,就算要完成一件小事,也需要用心,那样才能真正完成好任务。
六、附录
1.汇编源文件sin.asm如下所示。
(功能:
产生正弦波)
.mmregs;定义存储器映像寄存器
.def_c_int00
.refsinx,d_xs,d_sinx,cosx,d_xc,d_cosx;定义标号
sin_x:
.usect"sin_x",360;为"sin_x"保留360个存储空间
STACK:
.usect"STACK",10;为堆栈保留10个存储空间
k_theta.set286;theta=pi/360(0.5deg)
PA0.set0
_c_int00
.text;定义文本程序代码段
STM#STACK+10,SP;设置堆栈指针
STMk_theta,AR0;AR0-->K_theta(increment)
STM0,AR1;(AR1)=X(rad)
STM#sin_x,AR6;AR6-->sin(x)
STM#90,BRC;formsin0(deg.)—sin90(deg)
RPTBloop1-1
LDMAR1,A
LD#d_xs,DP
STLA,@d_xs;(A)低16位→d_xs
STLA,@d_xc;(A)低16位→d_xc
CALLsinx;调用sinx程序
CALLcosx;调用cosx程序
LD#d_sinx,DP;DPßd_sinx
LD@d_sinx,16,A;A=sin(x)
MPYA@d_cosx;B=sin(x)*cos(x)
STHB,1,*AR6+;AR6-->2*sin(x)*cos(x)
MAR*AR1+0;修改辅助寄存器AR1
loop1:
STM#sin_x+89,AR7;sin91(deg.)--sin179(deg.)
STM#88,BRC;重复执行下条指令至loop2-1
RPTBloop2-1;处90次
LD*AR7-,A;((AR7))→A,然后AR7减去1
STLA,*AR6+;(A)低16位→AR6
loop2:
STM#179,BRC;sin180(deg.)--sin359(deg.)
STM#sin_x,AR7;AR7指向sin_x首地址
RPTBloop3-1
LD*AR7+,A;((AR7))→A,然后AR7加1
NEGA;累加器变负
STLA,*AR6+;A低16位→AR6
loop3:
STM#sin_x,AR6;generatesinwaveAR6指向sin_x
STM#1,AR0;ARß01
STM#360,BK;BKß360
loop4:
PORTW*AR6+0%,PA0;PA0=*AR6+0%,向PA0输出数据
Bloop4
sinx:
.defd_xs,d_sinx;定义标号d_xs,d_sinx
.data;定义数据代码段
table_s.word01c7h;c1=1/(8*9)
.word030bh;c1=1/(6*7)
.word0666h;c1=1/(4*5)
.word1556h;c1=1/(2*3)
d_coef_s.usect"coef_s",4;为"coef_s"保留4个存储空间
d_xs.usect"sin_vars",1;为d_xs中sin_vars保留1个存储空间
d_squr_xs.usect"sin_vars",1;为d_squr_xs中sin_vars保留1个存储空间
d_temp_s.usect"sin_vars",1;为d_temp_s中sin_vars保留1个存储空间
d_sinx.usect"sin_vars",1;为d_sinx中sin_vars保留1个存储空间
c_l_s.usect"sin_vars",1;为d_xs中sin_vars保留1个存储空间
.text;定义代码开始段
SSBXFRCT;设置FRCT=1以解决冗余符号位
STM#d_coef_s,AR5;AR5指向d_coef_s首地址
RPT#3;重复下条指令4次
MVPD#table_s,*AR5+;table_s中的数复制到AR5指向的单元
STM#d_coef_s,AR3;AR3指向d_coef_s首地址
STM#d_xs,AR2;AR2指向d_xs首地址
STM#c_l_s,AR4;AR4指向c_l_s首地址
ST#7FFFh,c_l_s;7FFFh→c_l_s
SQUR*AR2+,A;AR2指向累加器A中的数值求其平方
STA,*AR2;(A)左移16位→AR2
||LD*AR4,B;(AR4)左移16位→B
MASR*AR2+,*AR3+,B,A;从累加器A中减去(AR2)*(AR3)
MPYAA;操作数与累加器A中高位相乘
STHA,*AR2;(A)高16位→AR2
MASR*AR2-,*AR3+,B,A;从累加器A中减去(AR2)*(AR3)
MPYA*AR2+;AR2指向的数与累加器A的高16位相乘
STB,*AR2;(B)左移16位→AR2
||LD*AR4,B;(AR4)左移16位→B
MASR*AR2-,*AR3+,B,A;从累加器A中减去(AR2)*(AR3)
MPYA*AR2+;与累加器A中高16位相乘
STB,*AR2;(B)左移16位→AR2
||LD*AR4,B;(AR4)左移16位→B
MASR*AR2-,*AR3+,B,A;从累加器A中减去(AR2)*(AR3)
MPYAd_xs;d_xs指向的操作数与累加器A中高16位相乘
STHB,d_sinx;(B)高16位→d_sinx
RET;返回
cosx:
.defd_xc,d_cosx;定义标号d_xc,d_cosx
d_coef_c.usect"coef_c",4;为coef_c保留4个存储空间
.data;定义数据代码段
table_c.word0249h;c1=1/(7*8)
.word0444h;c2=1/(6*5)
.word0aabh;c3=1/(3*4)
.word4000h;c4=1/2
d_xc.usect"cos_vars",1;为d_xc中cos_vars保存1个存储单元
d_squr_xc.usect"cos_vars",1;为d_squr_xc中cos_vars保存1个存储单元
d_temp_c.usect"cos_vars",1;为d_temp_c中cos_vars保存1个存储单元
d_cosx.usect"cos_vars",1;为d_cosx中cos_vars保存1个存储单元
c_l_c.usect"cos_vars",1;为c_l_c中cos_vars保存1个存储单元
.text;定义文本代码段
SSBXFRCT;FRCT=1,清除冗余符号位
STM#d_coef_c,AR5;AR5指向d_coef_c首地址
RPT#3;重复下条指令4次
MVPD#table_c,*AR5+;把table_c中的数复制到中AR5
STM#d_coef_c,AR3;AR3指向d_coef_c首地址
STM#d_xc,AR2;AR2指向d_xc首地址
STM#c_l_c,AR4;AR4指向c_l_c首地址
ST#7FFFh,c_l_c;7FFFh→c_l_c
SQUR*AR2+,A;求X的平方存放在累加器A中
STA,*AR2;(A)左移16位→AR2
||LD*AR4,B;(AR4)左移16位→B
MASR*AR2+,*AR3+,B,A
MPYAA
STHA,*AR2
MASR*AR2-,*AR3+,B,A
MPYA*AR2+
STB,*AR2
||LD*AR4,B
MASR*AR2-,*AR3+,B,A
SFTAA,-1,A
NEGA
MPYA*AR2+
MAR*AR2+
RETD
ADD*AR4,16,B
STHB,*AR2
RET
.end
2.链接命令文件sin.cmd如下。
(功能:
为各段安排存储空间)
MEMORY
{
PAGE0:
EPROM:
org=0E000h,len=1000h
VECS:
org=0FF80h,len=0080h
PAGE1:
SPRAM:
org=0060h,len=0020h
DARAM1:
org=0080h,len=0010h
DARAM2:
org=0090h,len=0010h
DARAM3:
org=0200h,len=0200h
}
SECTIONS
{
.text:
>EPROMPAGE0
.data:
>EPROMPAGE0
STACK:
>SPRAMPAGE1
sin_vars:
>DARAM1PAGE1
coef_s:
>DARAM1PAGE1
cos_vars:
>DARAM2PAGE1
coef_c:
>DARAM2PAGE1
sin_x:
align(512){}>DARAM3PAGE1
.vectors:
>VECSPAGE0
}
3.复位向量文件sin_v.asmr如下。
(功能:
定义入口函数)
.title"sin_v.asm"
.ref_c_int00
.sect".vectors"
B_c_int00
.end
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DSP 课程设计
![提示](https://static.bingdoc.com/images/bang_tan.gif)