📄 fir5.asm
字号:
*************************************************
*系数对称的FIR滤波器设计 *
*N=8,h(n)=h(N-1-n) *
*y(n)=h0*[x(n)+x(n-7)]+h1*[x(n-1)+x(n-6)] *
* +h2*[x(n-2)+x(n-5)]+h3*[x(n-3)+x(n-4)] *
*************************************************
.title "fir5.asm"
.mmregs
.def start
.bss y,1
x_new .usect "DATA1",4
x_old .usect "DATA2",4
size .set 4
PA0 .set 0
PA1 .set 1
.data
COEF .word 1*32768/10,2*32768/10 ;系数对称,只给出N/2=4个
.word 3*32768/10,4*32768/10
.text
start: LD #x_new,DP
SSBX FRCT
STM #x_new,AR2 ;AR2指向新缓冲区第一个单元
STM #x_old+(size-1),AR3 ;AR3指向老缓冲区最后一个单元
STM #size,BK ;循环缓冲区长度=size
STM #-1,AR0 ;仿效*ARn-%
PORTR PA1,@x_new ;输入x(n)
FIR: ADD *AR2+0%,*AR3+0%,A ;AH=x(n)+x(n-7)(第一次)
RPTZ B,#(size-1) ;B=0,下条指令执行size次
FIRS *AR2+0%,*AR3+0%,COEF ;B=B+AH*h0,AH=x(n-1)+x(n-6)...
STH B,@y ;保存结果
PORTW @y,PA0 ;输出结果
MAR *+AR2(2)% ;修正AR2,指向新缓冲区最新的数据
MAR *AR3+% ;修正AR3,指向老缓冲区的最老的数据库
MVDD *AR2,*AR3+0% ;新缓冲区向老缓冲区传送一个数
BD FIR
PORTR PA1,*AR2 ;输入新数据到新缓冲区
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -