📄 iir1.asm
字号:
.title "IIR.ASM"
.mmregs
.def start
DX .usect "DX" ,3
DY .usect "DY" ,3
DB .usect "DB" ,3
DA .usect "DA" ,3
PA0 .set 0
PA1 .set 1
.data
table: .word 0 ;x(n-2)
.word 0 ;x(n-1)
.word 0 ;y(n-2)
.word 0 ;y(n-1)
.word 1*32768/10 ;b2
.word 2*32768/10 ;b1
.word 3*32768/10 ;b0
.word 5*32768/10 ;a2
.word -4*32768/10 ;a1
.text
start: SSBX FRCT ; 设置小数乘法
STM #DX,AR1 ; AR1指向DX
RPT #1 ;传送初始化数据x(n-2),x(n-1)
MVPD #table,*AR1+;
STM #DY,AR1 ;AR1指向DY
RPT #1 ;传送初始化数据y(n-2),y(n-1)
MVPD #table+2,*AR1+;
STM #DB,AR1 ;AR1指向DY
RPT #2 ;传送系数b2,b1,b0
MVPD #table+4,*AR1+;
STM #DA,AR1 ;AR1指向DA
RPT #1 ;传送系数a2,a1
MVPD #table+7,*AR1+;
STM #DX+2,AR2 ;设定DX段指针AR2
STM #DY+1,AR3 ;设定DX段指针AR3
ST #DB+2,AR4 ;设定DX段指针AR4
STM #DA+1,AR5 ;设定DX段指针AR5
STM #3,BK ; 设置缓冲区长度
STM #-1,AR2 ;设置变址寻址步长
IIR: PORTR PA1,*AR2 ;输入数据X(n)
MPY *AR2+0%,AR4+0%,A ; 计算前向通道A=b0*x(n)
MAC *AR2+0%,AR4+0%,A ;A=b0*x(n)
MAC *AR2,AR4+0%,A ;A=b0*x(n)+b1*x(n-1)
MAC *AR3+0%,AR5+0%,A ;
MAC *AR3+0%,AR5+0%,A;
MAR *AR5+0% ;修正AR5
STH A,*AR3 ;保存y(n)
BD IIR ;循环
PORTW *AR3,PA0 ;输出y(n)
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -