📄 fir0.asm
字号:
.mmregs
.global start
.def start,_c_int00
INDEX .set 1
KS .set 256 ;输入样本数据个数
N .set 17 ;FIR滤波器阶数
COFF_FIR .sect "COFF_FIR" ;FIR滤波器系数
.word 0
.word 158
.word 264
.word -290
.word -1406
.word -951
.word 3187
.word 9287
.word 12272
.word 9287
.word 3187
.word -951
.word -1406
.word -290
.word 260
.word 158
.word 0
.data
INPUT .copy "firin.inc" ;输入数据在数据区0x2400
OUTPUT .space 1024 ;输出数据在数据区0x2500
;COFFTAB .usect "FIR_COFF",N
DATABUF .usect "FIR_BFR",N
BOS .usect "STACK",0Fh
TOS .usect "STACK",1
.text
;.asg AR0,INDEX_P
.asg AR4,DATA_P ;输入数据x(n)循环缓冲区指针
.asg AR6,INBUF_P ;模拟输入数据指针
.asg AR7,OUTBUF_P ;FIR滤波器输出数据指针
_c_int00
b start
nop
nop
start: SSBX FRCT ;小数乘法编程时,设置FRCT(小数方式)位
;STM #INDEX,INDEX_P
STM #DATABUF,DATA_P ;数据缓冲区清零
RPTZ A,#N-1
STL A,*DATA_P+
FIR_TASK:
STM #DATABUF,DATA_P
STM #INPUT,INBUF_P
STM #OUTPUT,OUTBUF_P
STM #KS-1,BRC
RPTB LOOP-1
LD *INBUF_P+,A ;装载输入数据
FIR_FILTER: ;FIR滤波运算
STL A,*DATA_P ;输入样本值x(n)
STM #DATABUF+N-1,DATA_P ;数据缓冲区指针指向x[n-(N-1)]
RPTZ A, #N-1
MACD *DATA_P-,COFF_FIR,A
STH A,*OUTBUF_P+
MAR *DATA_P+
LOOP:
EEND B EEND
.end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -