iir1.asm
来自「这里面有很多dsp应用程序源码」· 汇编 代码 · 共 56 行
ASM
56 行
*************************************
*用单操作数指令实现二阶IIR滤波器 *
*反馈通道:x0=w(n)=x(n)+A1*x1+A2*x2 *
*前向通道:y(n)=B0*x0+B1*x1+B2*x2 *
*************************************
.title "IIR1.asm"
.mmregs
.def start
x0 .usect "x",1
x1 .usect "x",1
x2 .usect "x",1
B2 .usect "COEF",1
B1 .usect "COEF",1
B0 .usect "COEF",1
A2 .usect "COEF",1
A1 .usect "COEF",1
PA0 .set 0
PA1 .set 1
.data
table .word 0 ;x(n-1)
.word 0 ;x(n-2)
.word 1*32768/10 ;B2=0.1
.word 2*32768/10 ;B1=0.2
.word 3*32768/10 ;B0=0.3
.word 5*32768/10 ;A2=0.5
.word -4*32768/10 ;A1=-0.4
.text
start: LD #x0,DP
SSBX FRCT
STM #x1,AR1 ;传送初始化数据x(n-1),x(n-2)
RPT #1
MVPD #table,*AR1+
STM #B2,AR1 ;传送系数B2,B1,B0,A2,A1
RPT #4
MVPD #table+2,*AR1+
IIR1: PORTR PA1,@x0 ;输入数据x(n)
LD @x0,16,A ;计算反馈通道,A=x0
LD @x1,T ;T=x1
MAC @A1,A ;A=A+T*A1
LD @x2,T ;T=A2
MAC @A2,A ;A=A+T*A2
STH A,@x0
MPY @B2,A ;计算前向通道
LTD @x1
MAC @B1,A
LTD @x0
MAC @B0,A
STH A,@x0 ;暂存y(n)
BD IIR1 ;循环
PORTW @x0,PA0 ;输出结果y(n)
.end
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?