📄 iir1.asm
字号:
*************************************
*用单操作数指令实现二阶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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -