📄 fir2.asm
字号:
**********************************************************
* 用线性缓冲区和间接寻址方法实现FIR滤波器 *
*N=5,y(n)=h0*x(n)+h1*x(n-1)+h2*x(n-2)+h3*x(n-3)+h4*x(n-4)*
**********************************************************
.title "fir2.asm"
.mmregs ;定义寄存器名称及对应地址
.def start ;定义程序入口
;分配数据存储区
.bss y,1 ;y
x .usect "x",5 ;x(n)...x(n-4)
h .usect "h",5 ;h(n)...h(n-4)
PA0 .set 0000H ;数据输出端口
PA1 .set 0001H ;数据输入端口
;参数表
.data
table: .word 2*32768/10 ;h0=0.2
.word -3*32768/10 ;h1=-0.3
.word 4*32768/10 ;h2=0.4
.word -3*32768/10 ;h3=-0.3
.word 2*32768/10 ;h4=0.2
.text
start: STM #h,AR2 ;把参数表复制到数据存储区
RPT #4
MVPD table,*AR2+ ;逐项复制参数表
;把x(1)--x(n-4)赋初值0
STM #x+1,AR1
RPT #3
ST #0,*AR1+
STM #x+4,AR1 ;AR1-->x(n-4)
STM #h+4,AR2 ;AR2-->h(n-4)
STM #4,AR0 ;指针复位值4-->AR0
SSBX FRCT ;小数乘法
LD #x,DP
PORTR PA1,@x ;输入x(n)
fir2: LD *AR1-,T ;T=x(n-4)
MPY *AR2-,A ;A=T*h(n-4)
LTD *AR1- ;T=x(n-3),x(n-4)=x(n-3)
MAC *AR2-,A ;A=A+T*h(n-3)
LTD *AR1- ;T=x(n-2),x(n-3)=x(n-2)
MAC *AR2-,A ;A=A+T*h(n-2)
LTD *AR1- ;T=x(n-1),x(n-2)=x(n-1)
MAC *AR2-,A ;A=A+T*h(n-1)
LTD *AR1 ;T=x(n),x(n-1)=x(n)
MAC *AR2+0,A ;A=A+h(n)*x(n),AR2复原指向h4
STH A,@y ;保存结果
PORTW @y,PA0 ;输出结果
BD fir2
PORTR PA1,*AR1+0 ;读下一个输入数据
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -