DSP汇编程序设计举例

上传人:门**** 文档编号:243149819 上传时间:2024-09-16 格式:PPT 页数:58 大小:829KB
返回 下载 相关 举报
DSP汇编程序设计举例_第1页
第1页 / 共58页
DSP汇编程序设计举例_第2页
第2页 / 共58页
DSP汇编程序设计举例_第3页
第3页 / 共58页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,DSP,技术与应用,学时:,32,(含,8,学时实验),1,第,6,章,TMS320C54XXDSP,汇编程序设计举例,2,例7-3,(段定义及数据传送举例),1.,实现数组,a20=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,x20=1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,的初始化,,将两数组置于数据存储器中,0100H,开始的连续地址空间中,(0100H-0127H),;,2.,将数据存储器中的,x20,复制到数组,y20,(0128H-013BH),;,3.,将数据存储器中的,a20,写入到程序存储器,PROM,(2000H-2013H),;,4.,程序存储器,PROM,中,20,个数据存入数据存储器,DATA,(0200H-0213H),。,3,.mmregs,.def _c_int00,.data,TBL:.word:0,1,2,3,4,5,6,7,8,9,10,11,12,.word 13,14,15,16,1 7,18,19,.word,1,1,1,1,1,1,1,1,1,1,.word,1,1,1,1,1,1,1,1,1,1,PROM: .usect ,PROM,20,.bss,a,20,.bss,x,20,.bss,y,20,DATA: .usect,DATA,20,汇编源程序:,4,_c_int00,b start,nop,nop,start:STM #a,AR1;a20=0,1,2,3,4,5,6,7,8,9,10,;11,12,13,14,15,16,17,18,19,RPT #39 ;x20=1,1,1,1,1,1,1,1,1,1,MVPD TBL,*AR1+,;1,1,1,1,1,1,1,1,1,1,;,完成任务,1,STM #x,AR2;,将数据存储器中的数组,x20,复制到数组,y20,STM #y,AR3 ;,y,20=1,1,1,1,1,1,1,1,1,1,RPT #19 ;1,1,1,1,1,1,1,1,1,1,MVDD *AR2+,*AR3+,;,完成任务,2,.text,5,STM #a,AR1 ;,数据存储器中,a20,写入程序存储器,LD #PROM,A ;,PROM,段,STM #19,AR3,LOOP1:,WRITA *AR1+,;,完成任务,3,ADD #1,A,A,BANZ LOOP1,*AR3-,LD #PROM-1,A,;,程序存储器,PROM,中,20,个数据存入数据,STM#DATA,AR1,;,存储器,DATA,段,ST #19,BRC,RPTB LOOP2,ADD #1,A,A,LOOP2:,READA *AR1+,;,该指令为,单字指令,(,完成任务,4),WAIT: NOP,B WAIT,.end,6,链接命令文件,:,MEMORY,PAGE 0:RAM: origin=1000h,length=800h,RAM1: origin=2000h,length=300h,PAGE 1:DARAM1: origin=0100h,length=100h,DARAM2: origin=0200h,length=100h,SECTIONS,.data,:RAM PAGE 0,.text,:RAM PAGE 0,PROM,:RAM1 PAGE 0,.bss,:DARAM1 PAGE 1,DATA,:DARAM2 PAGE 1,7,定点,DSP中数的定标有,Q,和,S,两种表示方法(如下表所示),,16位的二进制中有,一个符号位,、,15-Q个整数位,.,Q个小数位,。,DSP,中小数的表示,一般情况下以,Q0,格式表示整数以,Q15,格式表示小数。,两个,Q15,格式的,小数相乘结果为,Q30,格式小数,出现符号位冗余,解决方法是将,FRCT,置,1,系统自动将相乘结果左移,1,位,(,即,x2),精度允许时,只,保存高,16,位,Q15,定标:,8,例,7-4,使用,C54,汇编语言编程计算并,观察,计算结果,:,z1=x1+y1;,z2=x1-y1;,z3=x1*y1;,z4=x2*y2.,其中,,x1=20,y1=54,x2=0.5,y2=-0.5837,例7-4,(,整数、小数运算举例,),9,汇编源程序:,.title “suanshu.asm”,.mmregs,.def start,_c_int00,.b,s,s x1,1,;,地址,0400h,.b,s,s x2,1,;,地址,0401h,.b,s,s y1,1,;,地址,0402h,.b,s,s y2,1,;,地址,0403h,.b,s,s z1,1,;,地址,0404h,.b,s,s z2,1,;,地址,0405h,.b,s,s z3_h,1,;,地址,0406h,.b,s,s z3_l,1,;,地址,0407h,.b,s,s z4,1,;,地址,0408h,v1 .set 014H,v2 .set 036H,v3 .set 04000H,;,x2= 0.5,v4 .set 0b548H,;,y2=- 0.5837,.text,_c_int00,b start,nop,nop,start:,LD #x1,DP,;,(DP=?),ST #v1,x1,ST #v2,y1,LD x1,A,ADD y1,A,STL A,z1,;,(,单元地址,?),NOP,LD x1,A,SUB y1,A,STL A,z2,;,(,单元地址,?),NOP,RSBX FRCT,LD x1,T,MPY y1,A,STH A,z3_h,;,(,单元地址,?),STL A,z3_l,;,(,单元地址,?),NOP,ST #v3,x2,ST #v4,y2,SSBX FRCT,LD x2,16,A,MPYA y2,STH,B,z4,;,(,单元地址,?),NOP,end: B end,.end,例7-4,(,数据运算举例,),10,链接命令文件,:,suanshu.obj,-m suanshu.map,-o suanshu.out,MEMORY,PAGE 0: ROM1: origin=0080h,length=1000h,ROM2: origin=0060h,length=10h,PAGE 1: OTHER: origin=0400h,length=40h,SECTIONS,.text : ROM1 PAGE 0,.data : ROM1 PAGE 0,.,bss,: OTHER PAGE 1,.stack : OTHER PAGE 1,11,例7-5,(,小数乘法举例,),汇编源程序:,.title “chef.asm”,.mmregs,.def start,_c_int00,.b,s,s x,4,.b,s,s a,4,.b,s,s y,1,.data,table:,.word 1*32768/10,.word 2*32768/10,.word -3*32768/10,.word 4*32768/10,.word 8*32768/10,.word 6*32768/10,.word -4*32768/10,.word -2*32768/10,.text,_c_int00,b start,nop,nop,start:,SSBX FRCT,STM #0,SWWSR,STM #x,AR1,RPT #7,MVPD table,*AR1+,STM #x,AR2,STM #a,AR3,STM #y,AR4,RPTZ A,#3,MAC *AR2+,*AR3+,A,STH A,*AR4,done: B done,.end,12,链接命令文件,:,MEMORY,PAGE 0:RAM: origin=1000h,length=800h,RAM1: origin=2000h,length=300h,PAGE 1:DARAM1: origin=0100h,length=100h,DARAM2: origin=0200h,length=100h,SECTIONS,.data :RAM PAGE 0,.text :RAM PAGE 0,PROM :RAM1 PAGE 0,.bss :DARAM1 PAGE 1,DATA :DARAM2 PAGE 1,13,例7-6,(,带符号,除法且,商为小数,),汇编源程序:,.title “shuf.asm”,.mmregs,.def start, _c_int00,.bss num,1,.bss den,1,.bss quot,1,.data,table,.word 4*32768/10,;,分子,.word -8*32768/10,;,分母,.text,_c_int00,b start,nop,nop,start:,STM #num,AR1,;,分子,RPT #1,MVPD table,*AR1+,STM #den,AR1,;,分母,LD *AR1-,16,A,MPYA *AR1+,ABS A,;,分母绝对值,STH A,*AR1-,LD *AR1,16,A,ABS A,;,分子绝对值,STH A,*AR1,LD *AR1+,A,RPT #14,;(15bit,除法,),SUBC *AR1,A,XC 1,BLT,NEG A,STL A,*(quot),.end,14,.,.mmregs,.bss,x, 4,.bss,y, 2,.data,a.word 1, 2, 3, 4,.text,STM #a, AR2,STM #x, AR3,LD #0, A,LD *AR2+,,,T,MAC *AR3+,,,A,LD *AR2+,,,T,MAC *AR3+,,,A,LD *AR2+,,,T,MAC *AR3+,,,A,LD *AR2,,,T,MAC *AR3,,,A,STL A,,,y,STH A,,,y+1,.,算法一:,举例,1,:,乘加运算,15,链接命令文件:,MEMORY,PAGE 0:RAM: origin=1000h,length=,10,00h,PAGE 1:DARAM: origin=,20,00h,length=1,0,00h,SECTIONS,.text,:RAM,PAGE 0,.bss,:DARAM PAGE 1,.data,:,DA,RAM,PAGE,1,16,.,.mmregs,.bss,x, 4,.bss,y, 2,.data,a.word 1, 2, 3, 4,.text,STM #a, AR2,STM #x, AR3,LD #0, A,STM #3,,,BRC,RPTB ss-1,LD *AR2+,,,T,MAC *AR3+,,,A,ss: STL A,,,y,STH A,,,y+1,.,算法二:,举例,1,:,乘加运算,17,.,.mmregs,.bss,a, 4,.bss,x, 4,.bss,y, 2,.data,table.word 1, 2, 3, 4,.text,STM #a, AR1,RPT #3,MVPD,table,*AR1+,LD #0,,,A,STM #a, AR2,STM #x, AR3,STM #3,,,BRC,RPTB ss-1,LD *AR2+,,,T,MPY *AR3+,,,A,ss:LD #a, DP,STL A,,,y,STH A,,,y+1,.,算法三:,举例,1,:,乘加运算,18,链接命令文件:,MEMORY,PAGE 0:RAM: origin=1000h,length=,10,00h,PAGE 1:DARAM: origin=,20,00h,length=1,0,00h,SECTIONS,.data :RAM PAGE 0,.text :RAM PAGE 0,.bss :DARAM PAGE 1,19,.,.mmregs,.bss,a, 4,.bss,x, 4,.bss,y, 2,.data,table.word 1, 2, 3, 4,.word 8, 7, 6, 5,.text,STM #a, AR1,RPT #7,MVPD,table,*AR1+,STM #a, AR2,STM #x, AR3,RPTZ A, #3,MAC *AR2+,* AR3+ ,A,LD #a, DP,STL A,,,y,STH A,,,y+1,.,算法四:,举例,1,:,乘加运算,20,.title “DIV,.mmregs,.def _c_int00,DAT0 .set01H,DAT1 .set02H,DAT2 .set03H,DAT3 .set04H,.data,buff .space 100h*16,.text,_c_int00:,B start,举例,2,:,除法运算,21,start: LD #020h,DP,;,置数据页指针,SSBX INTM,;,禁止中断,DIV: ST #0008h,DAT0,ST #0002h,DAT1,RSBX SXM,*,无符号除法操作,: DAT0 DAT1 ;,结果:,DAT2,:商;,DAT3,:余数,LD DAT0,A,RPT #15,SUBC DAT1,A,STL A,DAT2,STH A,DAT3,.end,22,.mmregs,.bss a, 4,.bss x, 4,.bss y, 1,.def _c_int00,.data,table .word 1, 5, 3, 4,.word 8, 6, 7, 9,.sect vectors,rst B _c_int00,NOP,NOP,.text,_c_int00 STM #a, AR1,RPT #7,MVPD table,*AR1+,CALL MAX,end: B end,MAX:,STM #a, AR1,STM #x, AR2,STM #2, AR3,LD *AR1+,,,T,MPY *AR2+,,,A,loop:,LD *AR1+,,,T,MPY *AR2+,,,B,MAX A,BANZ,loop,*AR3-,STL A,,,y,RET,.end,找出乘积项中的最大值,举例,3,:,23,链接命令文件:,MEMORY,PAGE 0:RAM: origin=1000h,length=,5,00h,RAM1: origin=1800h,length=100h,PAGE 1:DARAM: origin=,20,00h,length=1,0,00h,SECTIONS,.data :RAM PAGE 0,.text :RAM PAGE 0,vectors,:RAM,1,PAGE 0,.bss :DARAM PAGE 1,24,FIR,滤波器设计,7.5.1,线性缓冲,区法,又称为延迟线法。对于,N,阶,FIR,滤波器在数据区开辟一个,N,单元的线性缓冲区存放,N,个样本;每次滤波从最老样本开始,每个样本参与运算后下移一单元并在顶部结束读入新样本。,其特点是,依次下移覆盖,/,底部淘汰,/,顶部更新。,设,N,阶,FIR,滤波器的,系数,(,单位脉冲冲击响应,),为,:h(0),h(1), .h(N-1),x(n,),表示滤波器在,n,时刻的输入,则,n,时刻的输,出,y(n,),为,:,线性缓冲区示意图,(N=6),系数表,x(n-1),x(n-2),x(n-(N-2),x(n-(N-1),1,次,y(n,),计算结束,ARx,指向顶部读入新样本,覆盖更新数据,延迟算法由,LTD,指令完成,25,*,采用线性缓冲区法编写的,FIR,数字滤波器程,序*,.title “fir.asm”,.mmregs,.def start,.bss y,1,x .usect “x”,6,h .usect “h”,6,PA0 .set 0,PA1 .set 1,.data,Table:,.word 2*32768/10,.word -3*32768/10,.word 4*32768/10,.word -3*32768/10,.word 2*32768/10,.word 4*32768/10,.text,Start: STM #h,AR2,RPT #5,MVPD table,*AR2+,STM #x+5,AR1,;AR1,指向,x(n-5),STM #h+5,AR2,;AR2,指向,h(5),STM #5,AR0,SSBX,FRCT,LD #x,DP,PORTR PA1,x,FIR:,LD *AR1-,T,;x(n-5)-T,LD #0, A,MPY *AR2-,A,;h5*x(n-5)-A,LTD,*AR1-,;x(n-4) - T, x(n-4) -(n-5),MAC *AR2-,A,LTD,*AR1-,;x(n-3) - T, x(n-3) -(n-4),MAC *AR2-,A,LTD,*AR1-,;x(n-2) - T, x(n-2) -(n-3),MAC *AR2-,A,LTD,*AR1-,;x(n-1) - T, x(n-1) -(n-2),MAC *AR2-,A,LTD,*AR1,;,x(n,) - T,x(n,) -(n-1),MAC *AR2+0, A,STH A, y,;save,y(n,),Portw y, PA0,BD FIR,PORTR PA1, *AR1+0,;,x(n+1)-,顶部,.end,26,MEMORY, PAGE 0: RAM: origin = 1000h,length = 100h,RAM1: origin = 1200h,length = 500h,PAGE 1: DARAM1: origin = 0100h,length = 100h,DARAM2: origin = 0200h,length = 100h,SECTIONS, .data : RAM PAGE 0,.text : RAM1 PAGE 0,.,bss,: DARAM1 PAGE 1,x : DARAM2 PAGE 1,h : DARAM2 PAGE 1,链接命令文件:,27,FIR,滤波器设计,7.5.2,循环缓冲区法,又称为滑动窗法。对于,N,阶,FIR,滤波器在数据区开辟一个,N,单元的循环缓冲区存放,N,个样本;每次滤波从更新最老样本开始,在循环寻址作用下于最老样本结束读入新样本。,其特点是,用最新样本覆盖最老样本,/,其余数据无需移动。,x(n-1),x(n-2),x(n-(N-2),x(n-(N-1),1,次,y(n,),计算结束,ARx,指向最老样本被最新样本覆盖,更新数据,设,N,阶,FIR,滤波器的,系数,(,单位脉冲冲击响应,),为,:h(0),h(1), .h(N-1),x(n,),表示滤波器在,n,时刻的输入,则,n,时刻的输,出,y(n,),为,:,28,*,采用循环缓冲区法编写的,FIR,数字滤波器程,序*,.,mmregs,.globalstart,.defstart, _c_int00,KS,.set256,;,输入的样本数,N.set17,;FIR,滤波器阶数,COEF_FIR,.sect“COEF_FIR”,;FIR,滤波器系,数表,.word 0,158,264,-290,-1406,-951,3187,9287,12272,.word 9287,3187,-951,-1406,-290,264,158,0,.data,INPUT,.copy “firin.inc”,;,输入数据在数据,区,0x2400-24FF,OUTPUT.space 1024,;,输出数据在数据,区,0x2500-25FF,COEFTAB,.usect “FIR_COEF”,N,;17,个系数在数据区,0x2600,DATABUF,.usect “FIR_BFR”,N,;17,个样本在数据区,0x2611,BOS.usect “STACK”,0Fh,TOS.usect “STACK”,1,.text,.asg AR4, DATA_P,;,样本数据缓冲区指针,.asg AR5, COEF_P,;,滤波系数缓冲区指针,.asg AR6, INBUF_P ;,输入数据指针,.asg AR7, OUTBUF_P ;,输出数据指针,汇编源程序,:,29,_c_int00: Bstart,start: SSBXFRCT,;,小数乘法,,FRCT=1,STM,#COEFTAB,,,COEF_P,;,滤波系数指针,-AR5,RPT#N-1,;FIR,系数从程序区搬移到数据区,MVPD,COEF_FIR,,*,COEF_P+,STM#-1,AR0,;,地址步进,-1,STM,#DATABUF,DATA_P,;,样本数据指针,-AR4,RPTZ A,#N-1,;,数据缓冲区清,0,STLA,*DATA_P+,STM,#(DATABUF+N-1),DATA_P,;,数据缓冲区指针指向底部,STM,#(COEFTAB+N-1),COEF_P,;,系数缓冲区指针指向底部,STM,#INPUT,INBUF_P,;,输入数据指针,-AR6,STM,#OUTPUT,OUTBUF_P,;,输出数据指针,-AR7,STM#KS-1,BRC,;,块重复操作次数,(256),RPTBD LOOP-1,STM#N,BK,;FIR,循环,缓冲区大小,(17),LD *,INBUF_P,+,A,;,装载输入数据,STLA,*DATA_P+0%,;,用最新样本值替代最旧样本值,RPTZ,A,N-1,;,重复,乘加,操作,(17),MAC,*DATA_P+0%,*COEF_P+0%,A,;,滤波运算,STH,A,*OUTBUF_P+,;,滤波输出,LOOP: B LOOP,.end,30,fir.obj,-o fir.out,-m fir.map,MEMORY, PAGE 0: ROM(RIX) : origin = 0080h,length = 100h,ROM1(RIX) : origin = 180h,length = 20h,PAGE 1: INTRAM1(RW) : origin = 2400h,length = 200h,INTRAM2(RW) : origin = 2600h,length = 100h,INTRAM3(RW) : origin = 2700h,length = 100h,B2B(RW) : origin = 0070h,length = 10h,SECTIONS, .text : ROM PAGE 0,COEF_FIR : ROM1 PAGE 0,.data : INTRAM1 PAGE 1,FIR_COEF : INTRAM2 PAGE 1,FIR_BFR : INTRAM2 PAGE 1,STACK : B2B PAGE 1,链接命令文件,:,31,当样本数据为单位冲击脉冲时滤波输出:,32,当样本数据为,1000Hz,方波时滤波输出:,33,采用线性缓存区与间接寻址方法,设计一个,6,级,FIR,滤波器。,1.,设滤波器系数为:,0.1,-0.3,,,0.2,,,0.2,-0.3,,,0.1,;,2.,设输入样本数据已存放在,.data,段中:,7fffH,0,0,0,0,0,;,3.,参考例程写出,汇编程序代码;,4.,按下列要求写出,链接命令文件:,程序存储器分为两个区域,首地址分别为:,0x100H,0x200H,,将滤波器系数,/,样本数据,(,.data,段,),和正文,(,.text,段,),分别映射到这两个区域中;,数据存储器也分为两个区域,首地址分别为:,0x500H,0x800H,将其他数据段分别映射其中;,5.,试在,CCS,开发环境下,建立工程、编译、链接、调试、运行并查看程序执行结果。,实验,3,:,FIR,滤波器设计与,实现,-,线性缓存区法,一、实验任务,二、实验要求,34,参考程序:,.title “fir.asm”,.mmregs,.def,_c_int00,.bss y,1,0,x.usect “x”,6,h.usect “h”,6,.data,Tabx,:,.word,7fffH,.word,0,.word,0,.word,0,.word,0,.word,0,Tab,h,: .word,1,*32768/10,.word,-3,*32768/10,.word,2,*32768/10,.word,2,*32768/10,.word,-3,*32768/10,.word,1,*32768/10,.text,_c_int00,:,STM,#,x,AR2,RPT,#,11,MVPD,T,ab,x,*AR2+,STM #,h,+5,AR,1,STM #,x,+5,AR,2,STM #,y,AR,3,STM #5,AR0,SSBX,FRCT,FIR:,LD *AR,2,-,T,LD #0, A,MPY *AR,1,-,A,LTD *AR,2,-,MAC *AR,1,-,A,LTD *AR,2,-,MAC *AR,1,-,A,LTD *AR,2,-,MAC *AR,1,-,A,LTD *AR,2,-,MAC *AR,1,-,A,LTD *AR,2,ST #0,*AR2+0,MAC *AR,1,+0, A,STH A,*AR,3,+,B,FIR,.end,35,MEMORY, PAGE 0: RAM: origin = 100h,length = 100h,RAM1: origin = 200h,length = 200h,PAGE 1: DARAM1: origin = 0500h,length = 200h,DARAM2: origin = 0800h,length = 100h,SECTIONS, .data : RAM PAGE 0,.text : RAM 1 PAGE 0,.,bss,: DARAM1 PAGE 1,x : DARAM2 PAGE 1,h : DARAM2 PAGE 1,链接命令文件:,36,37,38,.titleFIR,.global_c_int00,.mmregs,DACOUT.set01h,ADCIN.set 02h,DAC1Addr.set 0f005h,ADC1Addr.set 0f008h,.sect.vectors,rst:B_c_int00,NOP,NOP,.data,.space200h*8,fir_table.sect“coff_fir”,;201,阶低通滤波器的冲激相应系数(,Hamming,窗),;,通带:,1/20T,衰减,1/8T,衰减,40dB,实,验,4,:,FIR,滤波器设计与,实现,-,循环缓存区法,39,.word -1 ,-3 ,-6 ,-8 ,-9 ,-10 ,-10 ,-9 ,-7 ,-4 , 0 , 3 , 7 , 11 , 14 , 15 , 16 , 14,.word11 , 6 ,-1 ,-8 ,-15 ,-22 ,-27 ,-30 ,-31 ,-28 ,-22 ,-12 , 0 , 13 , 26 , 38 , 47,.word 53 , 53 , 47 , 36 , 20 ,-1 ,-23 ,-45 ,-66 ,-81 ,-89 ,-89 ,-80 ,-61 ,-34 , 0,.word36 , 72 , 104 , 128 , 141 , 141 , 125 , 95 , 52 ,-1 ,-58 ,-115 ,-165 ,-203,.word-224 ,-223 ,-198 ,-151 ,-84 , 0 , 91 , 182 , 263 , 326 , 361 , 361 , 324 , 249,.word138 ,-1 ,-157 ,-317 ,-465 ,-585 ,-661 ,-678 ,-625 ,-495 ,-286 , 0 , 351 , 755,.word 1192 , 1639 , 2074 , 2470 , 2807 , 3062 , 3222 , 3276 , 3222 , 3062 , 2807,.word2470 , 2074 , 1639 , 1192 , 755 , 351 , 0 ,-286 ,-495 ,-625 ,-678 ,-661 ,-585,.word-465 ,-317 ,-157 ,-1 , 138 , 249 , 324 , 361 , 361 , 326 , 263 , 182 , 91 , 0,.word-84 ,-151 ,-198 ,-223 ,-224 ,-203 ,-165 ,-115 ,-58 ,-1 , 52 , 95 , 125 , 141,.word141 , 128 , 104 , 72 , 36 , 0 ,-34 ,-61 ,-80 ,-89 ,-89 ,-81 ,-66 ,-45 ,-23 ,-1,.word20 , 36 , 47 , 53 , 53 , 47 , 38 , 26 , 13 , 0 ,-12 ,-22 ,-28 ,-31 ,-30 ,-27,.word-22 ,-15 ,-8 ,-1 , 6 , 11 , 14 , 16 , 15 , 14 , 11 , 7 , 3 , 0 ,-4 ,-7 ,-9 ,-10,.word-10 ,-9 ,-8 ,-6 ,-3 ,-1,.space 55*16,data_buff.usectbuff“ , 201,40,.text,_c_int00,LD #020h,DP;,置数据页指针,STM#3000h,SP,SSBXINTM,RSBXSXM,stm#0001h,2Bh ;,设置软件等待时间,stm#00a8h,PMST;,改变中断向量映射到,0x0080,NOP,NOP,stm #201,BK;,循环寻址缓冲区大小,stm#fir_table, AR3;FIR,系数区地址指针,stm#data_buff,AR4;,数据缓冲区地址指针,stm #1,AR0,41,loop: portrADC1Addr, ADCIN;,从第一,ADC,通道读数,ldADCIN, A,stlA, *AR4+%;,存入缓冲区,rptzA, #200,mac*AR4+0%, *AR3+0%,A;,双寻址乘加运算,nop,nop,nop,sftaA,#-15,and#0ffh,A,stlA,DACOUT,portwDACOUT, DAC1Addr;,结果从第一,DAC,通道输出,bloop,.end,42,MEMORY,PAGE 0:VECS:origin = 0x0080,length = 0x80,PROG:origin = 0x2000,length = 0x1000,PAGE 1:DATA:origin = 0x1000,length = 0x1000,STACK:origin = 0x3000, length = 0x1000,SECTIONS,.vectors:VECS PAGE 0,.text:PROG PAGE 0,.data:DATA PAGE 1,.stack:STACK PAGE 1,.bss:DATA PAGE 1,coff_fir:DATA PAGE 1,buff:DATA PAGE 1,43,用泰勒级数展开式计算一个角度的正弦值,sinx=x-x3/3,!+x5/5!-x7/7!+x9/9!,=x(1-x2/2x3(1-x2/4x5(1-x2/6x7(1-x2/8x9),程序中设,x,值为,45(/4),放在,sin_vars,段的,d_x,单元;,程序执行程序结果为,5A81H,,,放在,sin_vars,段的,d_sinx,单元;,实,验,5,:,正弦波信号发生器设计,AR2,AR3,AR4,44,.title,sinx.asm,.,mmregs,.def_c_int00,.ref,sin_start,d_x,d_sinx,STACK.,usect,STACK,10,_c_int00:,STM#STACK+10,SP,LD#d_x,DP,ST#6487H,d_x,;x=6487H=45,度,CALLsin_start,end:Bend,sin_start:,.defsin_start,d_coeff,.,usect,coeff,4,.data,table:.word01c7H,;c1=1/(8*9)*32768=01c7H,.word030bH,;c2=1/(6*7)*32768=030bH,.word0666H,;c3=1/(4*5)*32768=0666H,.word1556H,;c4=1/(2*3)*32768=1556H,d_x.,usect,sin_vars,1,d_squr_x,.,usect,sin,_vars,1,d_temp.,usect,sin_vars,1,d_sinx,.,usect,sin_vars,1,c_1.,usect,sin_vars,1,45,.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,;c_l=#7fffH=1,SQUR*AR2+,A,;A=x2,STA,*AR2,;(AR2)=x2,d_squr_x,|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),STHA,*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),STB,*AR2,;(d_temp)=x2(1-x2/42(1-x2/72),|LD*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),STB,*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_x,;B=x(1-x2/6(1-x2/20(1-x2/42(1-x2/72),STH,B,d_sinx,;sin(theta),RET,.end,sinx,=x-x2/3!+x5/5!-x7/7!+x9/9!,=x(1-x2/2x3(1-x2/4x5(1-x2/6x7(1-x2/8x9),AR2,AR3,AR4,46,MEMORY ,PAGE 0:,EPROM: org=0E00H,len,=01000H,VECS: org=0FF80H,len,=0080H,PAGE 1:,SPRAM:org=0500H,len,=0020H,DARAM:org=0080H,len,=0010H,SECTIONS ,.vectors: VECS PAGE 0,.text: EPROM PAGE 0,.data: EPROM PAGE 0,STACK: SPRAM PAGE 1,sin_vars,: DARAM PAGE 1,coeff,: DARAM PAGE 1,47,用泰勒级数展开式计算一个角度的余弦值,cosx,=1-x2/2!+x4/4!-x6/6!+x8/8!,=1-x2/2(1-x2/3x4(1-x2/5x6(1-x2/7x8),执行程序结果:,48,.,mmregs,.def_c_int00,.ref,cos_start,d_x,d_cosx,STACK.,usect,STACK,10,_c_int00:STM#STACK+10,SP,LD#d_x,DP,ST#6487H,d_x,;x=6487H=45,度,CALL,cos_start,end:Bend,cos_start,:,.def,cos_start,d_coeff,.,usect,coeff,4,.data,table:.word0249H,;c1=1/(7*8)*32768=0249H,.word0444H,;c2=1/(5*6)*32768=0444H,.word0aabH,;c3=1/(3*4)*32768=0aabH,.word4000H,;c4=1/(1*2)*32768=4000H,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,49,.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=x2,STA,*AR2,;(AR2)=x2,|LD*AR4,B,;B=1,MASR*AR2+,*AR3+,B,A,;A=1-x2/56,T=x2,MPYAA,;A=T*A=x2(1-x2/56),STHA,*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),STB,*AR2,;(d_temp)=x2(1-x2/30(1-x2/56),|LD*AR4,B,;B=1,MASR*AR2-,*AR3+,B,A,;A=1-x2/12(1-x2/30(1-x2/56),SFTAA,-1,A,;1/2,NEGA,;-1/2,MPYA*AR2+,;B=-x2/2(1-x2/12(1-x2/30(1-x2/56),MAR*AR2+,RETD,ADD*AR4,16,B,;B=1-x2(1-x2/12(1-x2/30(1-x2/56),STHB,*AR2,;,cos(theta,),RET,.end,50,产生正弦波程序:,先以,sin.asm,和,cos.asm,程序,计算,045,(间隔为,0.5,)的,正弦和余弦值,再利用,Sin(2x)=2sin(x)cos(x),求出,090,的正弦值(间隔为,1,),然后通过复制,获得,0359,的正弦值。重复向,PA0,口,输出,便可得到正弦波。,51,.title,sinxwave.asm,.,mmregs,.def _c_int00,.ref,d_xs,d_sinx,d_xc,d_cosx,sinx,cosx,sin_x: .,usect,sin_x,360,STACK .,usect,STACK,10H,k_theta .set,286,;theta=pi/360(0.5deg),PA0 .set 0,_c_int00:,.text,STM#STACK+10H,SP,STMk_theta,AR0,;AR0-k_theta(increment),STM0,AR1,;AR1=,x(rad,.),STM#sin_x,AR6,;AR6-sin_x,STM#90,BRC,;from sin0(deg.)-sin90(deg.),RPTBloop1-1,LDMAR1,A,LD#,d_xs,DP,CALL,sinx,;,d_sinx,=sin(x),CALL,cosx,;,d_cosx,=,cos(x,),52,LD#,d_sinx,DP,LD d_sinx,16,A,;A=sin(x),MPYA ,d_cosx,;B=sin(x)*,cos(x,),STHB,1
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!