📄 fir3.asm
字号:
;=============================================================
; fir3.asm
;用线性缓冲区实现FIR滤波器
;有了前面的基础,本例一次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 "fir3.asm"
.mmregs ;定义寄存器名称及对应地址
.def CodeStart ;定义程序入口
;分配数据存储区
x .usect "x",6 ;y,x(n)...x(n-4)
;PA0 .set 0002H ;数据输出端口
;PA1 .set 0008H ;数据输入端口
indata .usect "buffer",1
outdata .usect "buffer",1
;参数表
.data
COEF: .word 1*32768/10 ;h4
.word -4*32768/10 ;h3
.word 3*32768/10 ;h2
.word -4*32768/10 ;h1
.word 1*32768/10 ;h0
;==================================================
;程序区
;==================================================
.text
CodeStart: SSBX FRCT ;小数乘法
;把x(1)-x(n-4)赋初值0
STM #x+2,AR1
RPT #3
ST #0,*AR1+
STM #x+5,AR1 ;x(n-4)---AR1
STM #4,AR0 ;AR0的复位值
STM #indata,AR3
STM #outdata,AR4
LD #x+1,DP
; PORTR PA1,@x+1 ;输入x(n)
FIR3: RPTZ A,#4 ;累加器A清0,共迭代5次
MACD *AR1-,COEF,A ;乘法累加并移位
STH A,*AR1 ;暂存y(n)
MVDK *AR1+,outdata
;PORTW *AR1+,PA0 ;输出y(n)
nop
BD FIR3 ;循环
;PORTR PA1,*AR1+0 ;输入新的数据x(n)
MVKD indata,*AR1+0
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -