DSP课设——正弦波发生器_第1页
DSP课设——正弦波发生器_第2页
DSP课设——正弦波发生器_第3页
DSP课设——正弦波发生器_第4页
DSP课设——正弦波发生器_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 正弦波发生器摘要数字信号处理(Digital Signal Processing,简称DSP)是一门涉及许多学科而又广泛应用于许多领域的新兴学科。20世纪60年代以来,随着计算机和信息技术的飞速发展,数字信号处理技术应运而生并得到迅速的发展。数字信号处理是一种通过使用数学技巧执行转换或提取信息,来处理现实信号的方法,这些信号由数字序列表示。数字信号处理器(DSP)是在模拟信号变成数字信号以后进行高速实时处理的专用处理器。DSP 芯片以其独特的结构和快速实现各种数字信号处理算法的突出优点,发展十分迅速。本文中提出的基于DSP技术设计的正弦波信号发生器已被广泛地应用于通信、仪器仪表和工业控制等领

2、域的信号处理系统中。在本文中简要的概括了一种基于TMS320C5402实现正弦信号发生器的设计原理与方法,介绍了所设计的正弦信号发生器硬件电路结构和软件程序流程图。结合DSP硬件特性,通过使用泰勒级数展开法得到设定参数的正弦波形输出,达到设计目的。该信号发生器弥补了通常信号发生器模式固定,波形不可编程的缺点,其具有实时性强,波形精度高,可方便调节频率和幅度、稳定性好等优点。关键字:DSP;TMS320C5402;信号发生器;正弦信号; 目 录1 设计目的及要求11.1 设计目的11.2 设计内容及要求12设计方案及原理22.1总体方案22.2设计原理23系统硬件设计33.1系统硬件框图33.2

3、 TMS320C5402简介43.3 D/A转换部分设计54系统软件设计及调试64.1变频调幅的方法64.2程序设计64.3程序编写84.4 CCS简介144.5运行步骤及结果155 设计心得19参考文献20附录 设计程序211 设计目的及要求1.1 设计目的DSP课程设计是对数字信号处理、DSP原理及应用等课程的较全面练习和训练,是实践教学中的一个重要环节。通过本次课程设计,综合运用数字信号处理、DSP技术课程以及其他有关先修课程的理论和生产实际知识去分析和解决具体问题,并使所学知识得到进一步巩固、深化和发展。初步培养学生对工程设计的独立工作能力,掌握电子系统设计的一般方法。通过课程设计完成

4、基本技能的训练,如查阅设计资料和手册、程序的设计、调试等,提高学生分析问题、解决问题的能力。主要是:1. 掌握DSP程序设计的方法以及软件的调试等; 2. 掌握CCS软件的使用;3. 学会用CCS仿真模拟DSP芯片,通过CCS软件平台上应用C54X汇编语言来实现正弦信号发生装置;4. 掌握控制TLC320AIC23的输出信号,使该信号通过滤波放大后输出,并在点阵液晶中大致显示出幅频图的基本方法和步骤。1.2 设计内容及要求本题目DSP通过计算法或者查表的方法,得到正弦信号,然后将数据传递给TLC320AIC23,控制TLC320AIC23的输出信号,该信号通过滤波放大后输出,并在点阵液晶中大致

5、显示出幅频图。1. DSP与TLC320AIC23接口电路的原理图绘制;2. DSP控制TLC320AIC23的程序编写与调试;3. TLC320AIC23进行D/A的转换,实现信号的输出;4. 控制点阵液晶,实现绘图功能,将幅频图显示出来;5. 按要求编写课程设计报告书,正确、完整的阐述设计和实验结果。6. 在报告中绘制程序的流程图,并文字说明。2设计方案及原理2.1总体方案总体思想是:(1)基于DSP的特点,本设计采用TMS320C5402这款DSP芯片作为正弦信号发生器的核心控制芯片。(2)用泰勒级数展开法实现正弦波信号。(3)利用点阵的绘图功能将正弦波的波形显示出来。2.2设计原理泰勒

6、级数展开法是一种有效的方法,与查表法和查表结合插值法相比,该方法需要的存储单元很少,而且精度更高。我们知道一个角度为x的正弦和余弦函数,都可以展开为泰勒级数,且其前五项可以看为: (1) (2)程序的设计思想是这样的,正弦波的波形可以看为由无数点组成,这些点与轴的每一个角度值相对应,那么我们可以利用DSP处理器处理大量重复计算的优势来计算,轴每一点对应的y轴的值(在x轴取360个点来进行逼近),由于程序的编制采用小数形式,其弧度大于1的正弦值得不到,这就对正弦波的产生造成了障碍。可由于正弦波的特殊的对称形式给程序的编制找到了出口。的弧度为0.7854<1,即 之间的任意正弦、余弦值可以利

7、用汇编程序得到N又可以利用公式:得到之间的正弦值。而之间的正弦曲线与之间的正弦曲线通过这条轴左右对称,那么就可以得到的正弦值,而的正弦曲线的相反数通过这条轴与左右对称。这样的正弦值也得到了。一个周期内完整的正弦波就得到了。正弦波产生的流程图如下:得到正弦值得到余弦值sin2=2sincos得到的值得到的值得到的值得到的值循环输出数据 图2.1 正弦波产生的流程图3系统硬件设计3.1系统硬件框图该正弦信号发生器的硬件结构框图如图3.1所示,主要由TMS320C5402芯片,DA转换器,独立键盘等几部分组成。TMS320C5402电源模块时钟模块仿真接口D/A转换器独立键盘复位电路图3.1 DSP

8、系统硬件框图3.2 TMS320C5402简介本次设计中采用的是TI公司性价比良好的TMS320C5402芯片,这款芯片它采用修正的增强型哈佛结构,程序和数据分开存放,内部具有8组高度并行总线,一组程序总线、3组数据总线和4组地址总线,从而保证完成并行指令操作。40位算术逻辑单元ALU以及17位×17位并行乘法器与40位专用加法器相连,可用于非流水线式单周期乘法/累加运算。双地址生成器,包括8个辅助寄存器和2个辅助寄存器算术运算单元RARU,使得周期定点指令的执行时间达到100MIPS。片上集成有192K存储空间:64K字程序空间、64K数据空间、64K字I/O空间,它具有23条外部

9、程序地址线,可寻址1M字的外部程序空间,因此增设了额外的存储映射程序技术扩展寄存器XPC,以及6条扩展程序空间寻址指令,整个程序空间分成16页。同时可寻址64K外部数据空间、64K外部I/O空间。RAM包括两种类型,一是只可以一次寻址的SARAM,二是可以两次寻址的DARAM。此外,还有数据存储器0页映射的25个特殊功能寄存器。同时,该芯片还有高度专业化的指令系统,具有功耗小、高度并行等优点。此外,其支持C语言和汇编语言混合编程,高效的流水线操作和灵活的寻址方式使其适合高速实时信号处理。3.3 D/A转换部分设计 McBSP(Multi-channel Buffered Serial)即多通道

10、缓冲串口,包括一个数据通道和一个控制通道。数据通道通过DX引脚发送数据、DR引脚接收数据。控制通道完成的任务包括内部时钟的产生、帧同步信号的产生、对这些信号的控制以及多通路的选择等。此外还负责产生中断信号送往CPU,产生同步事件信号通知DMA控制器。控制信息则是通过控制通道以时钟和帧同步信号的形式传送。数模转换芯片采用TLC320AD50C其是TI公司出品的一块将AD和DA转换功能集成在一起的接口芯片,采用-技术在低系统成本下实现高精度的AD和DA转换。该芯片由一对16 bit同步串行转换通道组成,在AD之后有一个抽取滤波器,在DA之前有一个插值滤波器。TLC320AD50C可以与TMS320

11、C5402 DSP的McBSP无缝串行连接进行数据采集、存储和处理。SCLK输出时钟,MS主从模式选择(H为高电平,为主机模式),DIN串行输入,DOUT串行输出,FS帧同步信号输出,对应DSP的各相应引脚。McBSP和DA芯片的硬件电路连接如图3.2所示。图3.2 McBSP和D/A芯片的硬件连接图 4系统软件设计及调试4.1变频调幅的方法 (1)16位定时模块 C5402 DSP芯片片内定时器是一个软件可编程的计数器,它包括以下3个16位存储器映射寄存器:定时寄存器TIM,定时器周期寄存器PRD和定时控制寄存器TCR。片内定时器中,4位的预定标计数器PSC和16位定时计数器TIM组成一个2

12、0位的计数器,定时器每个CPU时钟周期减1,每次计数器减到0将产生定时器中断(TINT),同时PSC和TIM重新载入预设的值。定时器中断TINT的速率可由式(3)计算。 (3)(2) 变频调幅实现方法调幅的实现相对简单,只需在所有采样值前乘以一个调幅因子A1就可得到相应的正弦波幅值A。而调频的实现必须依赖于C5402芯片内的16位定时器。DSP芯片不断向DA芯片送出采样值,然后经模数转换后可在示波器上观察到连续的正弦波形。先预设要产生的正弦信号频率为f,根据正弦波生成原理可知,向DA送出采样值的间隔,即向DA送值的周期T1=TN(N为采样点数),那么向DA送值的频率为f1=N×f,即

13、向DA送值的频率是期待产生的正弦波信号频率的N倍。 因此,为了能够调节产生正弦信号的频率,实际上改变向DA芯片送值的频率即可。而改变向DA芯片送值的频率就得用到C5402芯片内的16位定时器。根据式(3)将需要的频率值换算成PRD内的初值和TDDR的初值,并将该初值分别置入PRD和TDDR。4.2程序设计软件系统采用模块化结构设计,主要包括DSP主程序,中断程序和键盘驱动程序。DSP系统的主程序流程图如图4.1所示。先对系统进行检测、配置McBSP端口等,开启中断调用键盘驱动程序读取键值并处理,进入中断后根据相应的键值设置相应的信号参数,并通过DA转换,产生不同幅度、频率的正弦波。调用键盘驱动

14、程序开始键值读取及处理系统初始化配置MCBSP端口开中断复位监测中断处理图4.1 主程序流程图中断程序流程图如图4.2所示。首先根据键盘的按键值选择已设置好的正弦波的幅度与频率,然后按具体步骤执行便可以得到所需正弦波。中断1的入口地址关中断根据不同的按键值设置相应的信号参数计算090度计算91179度度计算180359度度大送给DAC循环输出返回中断调用子程序sin和cos图4.2 中断程序流程在CCS开发环境下编程,通过仿真器将程序下载到DSP芯片中,选择不同的按键产生相应的中断,即可在示波器中观察到相应的正弦波形。所产生的波形具有精度高,幅值稳定的特点,同时具有较强的实时性和灵活性。4.3

15、程序编写1、正弦波的实现计算一个角度的正弦值利用泰勒级数的展开式,可计算一个角度x的正弦值,并采用子程序的调用方式。在调用前先在数据存储器d_xs单元中存放x的弧度值,计算结果存放在d_sinx单元中。实现计算一个角度的正弦值的程序片段如下:sinx: .def d_xs,d_sinx .datatable_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",4d_xs .usect

16、"sin_vars",1d_squr_xs .usect "sin_vars",1d_temp_s .usect "sin_vars",1d_sinx .usect "sin_vars",1d_l_s .usect "sin_vars",1 .text SSBX FRCT STM #d_coef_s,AR5 ;move coeffs table_s RPT #3 MVPD #table_s,*AR5+ STM #d_coef_s,AR3 STM #d_xs,AR2 STM #d_l_s,AR4

17、ST #7FFFH,d_l_s SQUR *AR2+,A ;A=x2 ST A,*AR2 ;(AR2)=x2 |LD *AR4,B ;B=1 MASR *AR2+,*AR3+,B,A ;A=1-x2/72,T=x2 MPYA A ;A=T*A=x2(1-x2/72) STH A,*AR2 ;(d_temp)=x2(1-x2/72) MASR *AR2-,*AR3+,B,A ;A=1-x2/42(1-x2/72);T=x2(1-x2/72) MPYA *AR2+ ;B=x2(1-x2/42(1-x2/72) ST B,*AR2 ;(d_temp)=x2(1-x2/42(1-x2/72) |LD

18、*AR4,B ;B=1 MASR *AR2-,*AR3+,B,A ;A=1-x2/20(1-x2/42(1-x2/72) MPYA *AR2+ ;B=x2(1-x2/20(1-x2/42(1-x2/72) ST B,*AR2 ;(d_temp)=B |LD *AR4,B ;B=1 MASR *AR2-,*AR3,B,A ;A=1-x2/6(1-x2/20(1-x2/42(1-x2/72) MPYA d_xs ;B=x(1-x2/6(1-x2/20(1-x2/42(1-x2/72) STH B,d_sinx ;sin(theta) RET计算一个角度的余弦值利用余弦函数展开的泰勒级数的前五项计算

19、一个角度的余弦值,可采用子程序的调用方式来实现。调用前先将x弧度值放在数据存储器d_xc单元中,计算结果存放在d_cosx单元中。实现计算一个角度的余弦值的程序片段如下:cosx: .def d_xc,d_cosxd_coef_c .usect "coef_c",4 .datatable_c .word 0249H ;C1=1/(7*8) .word 0444H ;C2=1/(5*6) .word 0AABH ;C3=1/(3*4) .word 4000H ;C4=1/2d_xc .usect "cos_vars",1d_squr_xc .usect &

20、quot;cos_vars",1d_temp_c .usect "cos_vars",1d_cosx .usect "cos_vars",1c_l_c .usect "cos_vars",1 .text SSBX FRCT STM #d_coef_c,AR5 ;move coeffs table_c RPT #3 MVPD #table_c,*AR5+ STM #d_coef_c,AR3 STM #d_xc,AR2 STM #c_l_c,AR4 ST #7FFFH,c_l_c SQUR *AR2+,A ;A=x2 ST A,

21、*AR2 ;(AR2)=x2 |LD *AR4,B ;B=1 MASR *AR2+,*AR3+,B,A ;A=1-x2/56,T=x2 MPYA A ;A=T*A=x2(1-x2/56) STH A,*AR2 ;(d_temp)=x2(1-x2/56) MASR *AR2-,*AR3+,B,A ;A=1-x2/30(1-x2/56);T=x2(1-x2/56) MPYA *AR2+ ;B=x2(1-x2/30(1-x2/56) ST B,*AR2 ;(d_temp)=x2(1-x2/30(1-x2/56) |LD *AR4,B ;B=1 MASR *AR2-,*AR3+,B,A ;A=1-x2

22、/12(1-x2/30(1-x2/56) SFTA A,-1,A ;-1/2 NEG A MPYA *AR2+ ;B=-x2/2(1-x2/12(1-x2/30(1-x2/56) MAR *AR2+ RETD ADD *AR4,16,B ;B=-x2/2(1-x2/12(1-x2/30(1-x2/56) STH B,*AR2 ;cos(theta) RET正弦波的实现利用计算一个角度的正弦值和余弦值程序可实现正弦波。其实现步骤如下:第一步:利用sin_start和cos_start子程序,计算(间隔为)的正弦和余弦值;第二步:利用sin(2x)=2sin(x)cos(x)公式,计算的正弦值(间

23、隔为);第三步:通过复制,获得的正弦值;第四步:将的正弦值重复从PA口输出,便可得到正弦波。产生正弦波的程序片段如下:.mmregs .def start .def d_xs,d_sinx,d_xc,d_cosx,sinx,cosxsin_x: .usect "sin_x",360STACK: .usect "STACK",10Hk_theta .set 286 ;theta=pi/360(0.5deg)start: .text STM #STACK+10H,SP STM k_theta,AR0 STM 0,AR1 STM #sin_x,AR6 STM

24、#90,BRC RPTB loop1-1 LDM AR1,A LD #d_xs,DP STL A,d_xs STL A,d_xc CALL sinx ;d_sinx=sin(x) CALL cosx ;d_cosx=cos(x) LD #d_sinx,DP LD d_sinx,16,A ;A=sin(x) MPYA d_cosx ;B=sin(x)*cos(x) STH B,1,*AR6+ ;AR6-2*sin(x) MAR *AR1+0loop1: STM #sin_x+89, AR7 ;sin91(deg.)-sin179(deg.) STM #88,BRC RPTB loop2-1 LD

25、 *AR7-,A STL A,*AR6+loop2: STM #179,BRC ;sin180(deg.)-sin359(deg.) STM #sin_x,AR7 RPTB loop3-1 LD *AR7+,A NEG A STL A,*AR6+loop3: STM #sin_x,AR6 ;generate sin wave STM #1,AR0 STM #360,BK B loop3*.cmd文件描述输入文件和输出文件,说明系统中有哪些可用存储器、程序段、堆栈及复位向量和中断向量等安排在什么地方。其中MEMORY段就是用来规定目标存储器的模型,通过这条指令,可以定义系统中所包含的各种形式的存

26、储器,以及它们占据的地址范围;SECTIONS段说明如何将输入段组合成输出段以及在可执行文件中定义输出段、规定输出段在存储器中的位置等。产生正弦波链接命令文件的程序片段如下:MEMORY PAGE 0: EPROM: org=0E000H, len=1000H VECS: org=0FF80H, len=0080H PAGE 1: SPRAM: org=0060H, len=0020H DARAM1: org=0080H, len=0010H DARAM2: org=0090H, len=0010H DARAM3: org=0200H, len=0200H SECTIONS .text :&g

27、t; EPROM PAGE 0 .data :> EPROM PAGE 0 STACK :> SPRAM PAGE 1 sin_vars :> DARAM1 PAGE 1 coef_s :> DARAM1 PAGE 1 cos_vars :> DARAM2 PAGE 1 coef_c :> DARAM2 PAGE 1 sin_x : align(512) > DARAM3 PAGE 1 .vectors :> VECS PAGE 0在实际应用中,正弦波是通过D/A口输出的。选择每个正弦周期中的样点数、改变每个样点之间的延迟,就能够产生不同频率的波

28、形,也可以利用软件改变波形的幅度以及起始相位。4.4 CCS简介本实验是基于CCS开发环境的。CCS是TI公司推出的为开发TMS320系列DSP软件的集成开发环境,是目前使用最为广泛的DSP开发软件之一。它提供了环境配置、源文件编译、编译连接、程序调试、跟踪分析等环节,并把软、硬件开发工具集成在一起,使程序的编写、汇编、程序的软硬件仿真和调试等开发工作在统一的环境中进行,从而加速软件开发进程。CCS有两种工作模式:(1)硬件在线编程模式:可以实时运行在DSP芯片上,与硬件开发板相结合在线编程和调试应用程序;(2)软件仿真器模式:可以脱离DSP芯片,在PC机上模拟DSP的指令集和工作机制,主要用

29、于前期算法实现和调试。本次设计采取硬件在线编程模式。如图4.3所示图4.3 DSP试验箱4.5运行步骤及结果1 运行步骤本次课程设计采用CCS中的C5000。第一步,软件中芯片的选择,如图所示,选择C5416 XDS510 Emulator。图4.4 set up CCS界面 第二步,仿真器C5416 XDS510 Emulator的设置图4.5 仿真器XDS510的设置第三步,设置完成后,退出set up C5000后可自动打开CCS5000,选择Project下的new,新建工程,如图4.5所示;将DspregDefine.h文件添加到工程sinlcd_54下的Include文件中,rts

30、.lib文件添加到Libraries文件中,将程序的命令链接文件(.CMD),中断向量表(VECTORS.ASM)添加到Source文件下,如图4.6所示。 图4.6 新建工程图4.7 添加文件到工程第四步 对编写完成的程序进行编译,结果如图4.8所示图4.8 编译成功第五步 汇编无误后就可将程序下载到实验箱中,点击如图所示命令运.out文件,再点击run即可在实验箱中得到结果。图4.9下载程序到实验箱2仿真结果及分析图4.10仿真结果在CCS集成环境中实现正弦波能够起到防止干扰的作用,同时也大大地减小了波形的线性失真。同时我们也能从中看出CCS能够精确地对各个角度进行计算得出相应的正弦值,幅

31、度和频率易于调节,波形也较为稳定,抗干扰能力较强。最重要的是这种设计方案简单可行,新颖实用,具有很高的实践和推广价值。分析:通过不断的发现错误、改正错误和调试,最终得到了所希望的图象,即正弦波信号。5 设计心得为期两周的DSP课程设计已进入尾声了,在这两周的时间里,我认认真真地复习了DSP的相关理论知识。由于基础知识学得不是很扎实,正好利用课程设计这个机会,对没有掌握好的知识进行一个补习。在刚开始的时候,我首先从最简单的程序开始着手,首先看懂程序是什么意思,在尝试在这个基础上对程序进行修改 ,看程序是否出错,或者说实验的结果会有什么样的改变。用这种方法是自己尽快的熟悉这个系统的编程的方式。本次

32、课程设计中遇到一些课堂中从未有过的问题,通过网络查找和同学交流,大大促进了设计进程。并在过程中进一步提高自身的创作、创新水平,扎实基础,扩展所学。并且此次课程设计,基于课程理论知识和网上资料,使我对数字信号处理课程有了更深一步的了解和掌握,对利用CCS软件编程的数字信号处理方法有了进一步的了解。在理论课的基础上进行实验实习,是对本门课程的深入学习和掌握,在以后的工作学习中,数字信号的处理都是采用计算机仿真的方法进行测试,因此,掌握基于计算机的数字信号处理方法对以后的工作和学习有很大的帮助。这样一个课程设计对我们的发展有着极大的帮助!由于基础知识不够扎实,在本次课程设计的过程中,我经常遇到各种难

33、题,比如说程序看不懂,调试时显示结果与预期不一致等等。而每当我遇到困难的时候,老师总会给予我耐心的教导,帮助我发现问题,纠正错误;同学也会很热情的帮助我修改和完善设计方案。在这样一个良好的环境下,我顺利地完成了本次DSP课程设计,让我发现了自己所学知识的盲点和漏洞,提升了我的动手能力,通过实验我基本了解了DSP应用系统开发方法和设计过程,掌握了汇编源程序的编辑、汇编和链接过程,熟悉了CCS集成开发环境,CCS的安装及设置,CCS集成开发环境,CCS的基本使用,调试应用程序。我成功通过CCS软件应用C54X汇编语言实现了正弦信号发生装置,这次实验使我能够更真实地体会到DSP的功能和用途。特在此对

34、给予我帮助的老师和同学们表示衷心的感谢!参考文献 1 邹彦. DSP原理及应用M. 北京:电子工业出版社,2005,1. 2 戴明桢.TMS320C54xDSP结构.原理及应用M.北京航空航天大学出版 3 胡圣尧. DSP原理及应用M.东南大学出版社,2008.7. 4 清源科技.TMS320C54xDSP应用程序设计教程M.机械工业出版社,2004,1 5 清源科技.TMS320C54x硬件开发教程M.机械工业出版社,2003,1.附录 设计程序主程序清单:.title "sin.asm" ;为汇编文件取名为“sin.asm”.mmregs ;定义存储器映像寄存器.def

35、 _c_int00.ref sinx,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 .set 286 ;theta=pi/360(0.5deg)PA0 .set 0_c_int00 .text ;定义文本程序代码段STM #STACK+10,SP ;设置堆栈指针STM k_theta,AR0 ;AR0->K_theta(incre

36、ment)STM 0,AR1 ;(AR1)=X(rad)STM #sin_x,AR6 ;AR6- - >sin(x)STM #90,BRC ;form sin0(deg.)sin90(deg);重复执行块语句(下条语句开始至loop1-1 )91次RPTB loop1-1 LDM AR1,ALD #d_xs,DP ;DPd_xsSTL A,d_xs ;(A)低16位d_xsSTL A,d_xc ;(A)低16位d_xcCALL sinx ;调用sinx程序CALL cosx ;调用conx程序LD #d_sinx,DP ;DPß d_sinxLD d_sinx,16,A ;A=

37、sin(x)MPYA d_cosx ;B= sin(x)*cos(x)STH B,1,*AR6+ ;AR6- - >2*sin(x)*cos(x) MAR *AR1+0 ;修改辅助寄存器AR1loop1: STM #sin_x+89,AR7 ;sin91(deg.)- -sin179(deg.) STM #88,BRC ;重复执行下条指令至loop2-1 RPTB loop2-1 ;处90次 LD *AR7-,A ;(AR7) A,然后AR7减去1 STL A,*AR6+ ;(A) 低16位AR6loop2: STM #179,BRC ;sin180(deg.)- -sin359(deg

38、.);(BRC)=179,重复执行180次 STM #sin_x,AR7 ;AR7指向sin_x首地址 RPTB loop3-1 ; LD *AR7+,A ;(AR7) A,然后AR7加1 NEG A ;累加器变负 STL A,*AR6+ ;A低16位AR6loop3: STM #sin_x,AR6 ;generate sin wave AR6指向sin_x STM #1,AR0 ;ARß 01 STM #360,BK ;BKß360loop4: PORTW *AR6+0%,PA0 ;PA0=*AR6+0%,向PA0输出数据 B loop4 ;sinx: .def d_xs

39、,d_sinx ;定义标号d_xs,d_sinx .data ;定义数据代码段table_s .word 01c7h ;c1=1/(8*9) .word 030bh ;c1=1/(6*7) .word 0666h ;c1=1/(4*5) .word 1556h ;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&quo

40、t;,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 ;定义代码开始段 SSBX FRCT ;设置FRCT=1以解决冗余符号位 STM #d_coef_s,AR5 ;AR5指向d_coef_s首地址

41、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中的数值求其平方 ST A,*AR2 ;(A)左移16位AR2 |LD *AR4,B ;(AR4)左移16位B MASR *AR2+,*AR3+,B,A ;从累加器A中减去(AR2)*(A

42、R3) MPYA A ;操作数与累加器A中高位相乘 STH A,*AR2 ;(A)高16位AR2 MASR *AR2-,*AR3+,B,A ;从累加器A中减去(AR2)*(AR3) MPYA *AR2+ ;AR2指向的数与累加器A的高16位相乘 ST B,*AR2 ;(B)左移16位AR2 |LD *AR4,B ;(AR4)左移16位B MASR *AR2-,*AR3+,B,A ;从累加器A中减去(AR2)*(AR3) MPYA *AR2+ ;与累加器A中高16位相乘 ST B,*AR2 ;(B)左移16位AR2 |LD *AR4,B ;(AR4)左移16位B MASR *AR2-,*AR3+,B,A ;从累加器A中减去(AR2)*(AR3) MPYA d_xs ;d_xs指向的操作数与累加器A中高16位相乘 STH B,d_sinx ;(B)高16位d_sinx RET ;返回cosx: .def d_xc,d_cosx ;定义标号d_xc,d_cosxd_coef_c .usect "coef_c",4 ;为coef_c保留4个存储空间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论