⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fir1.asm

📁 在5402上用线性缓冲区和直接寻址方法实现FIR滤波器 ccs开发环境
💻 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	"fir1.asm"
	.mmregs			    ;定义寄存器名称及对应地址
	.def	start		;定义程序入口
				        ;分配数据存储区
L	.set	10
	.ref	SinTable
	.bss	y,1		    ;y
XN	.usect	"XN",1		;x(n)
XNM1	.usect	"XN",1	;x(n-1)
XNM2	.usect	"XN",1	;x(n-2)
XNM3	.usect	"XN",1	;x(n-3)
XNM4	.usect	"XN",1	;x(n-4)
H0	.usect	"H0",1		;h0
H1	.usect	"H0",1		;h1
H2	.usect	"H0",1		;h2
H3	.usect	"H0",1		;h3
H4	.usect	"H0",1		;h4

beforefir	.usect	"beforefir",L
afterfir	.usect	"afterfir",L


*PA0	.set	0000H		;数据输出端口
*PA1	.set	0001H		;数据输入端口
				;参数表
	.data
table:	.word	1*32768/10	;h0=0.1	   ;注:除以10是为了
	.word	-3*32768/10	    ;h1=-0.3   ;把参数变成纯小数
	.word	5*32768/10	    ;h2=0.5	   ;乘以32768表示把
	.word	-3*32768/10 	;h3=-0.3   ;小数点移到最高位后面
	.word	1*32768/10	    ;h4=0.1
	.text
start:	SSBX	FRCT		;小数乘法
				            ;把参数表复制到数据存储区的H0-H4
	STM	#H0,AR1		        ;H0指针赋给AR1
	RPT	#4		            ;下一条指令重复5次
	MVPD	#table,*AR1+	;逐项复制参数表,相当于执行下列操作:
				            ;PAR=Table,*AR=*PAR,AR=AR+1,PAR=PAR+1
	STM	#XN+1,AR1	        ;把x(1)--x(n-4)赋初值0
	RPT	#3
	ST	#0,*AR1+
	STM	#XN+4,AR3	        ;AR3=#XNM4
	STM	#H0+4,AR4	        ;AR4=#H4
	STM	#y,AR1
	LD	#beforefir,DP
	STM	#beforefir,AR1
	RPT	#(L-1)
	MVPD	#SinTable,*AR1+
	LD	#XN,DP		        ;使数据页指向XN
*	PORTR	PA1,@XN		    ;从端口PA1读入数据x(n)
	STM	#beforefir,AR5
	STM	#afterfir,AR6
	MVDK	*AR5+,@XN
FIR1:	LD	@XNM4,T		    ;x(n-4)--->T
	MPY	@H4,A				;h4*x(n-4)---->A
	LTD	@XNM3				;x(n-3)--->T
			        		;x(n-3)--->x(n-4)
	MAC	@H3,A				;A+h3*x(n-3)--->A							
	LTD	@XNM2				;x(n-2)--->T
							;x(n-2)--->x(n-3)
	MAC	@H2,A				;A+h2*x(n-2)--->A
	LTD	@XNM1				;x(n-1)--->T
							;x(n-1)--->x(n-2)
	MAC	@H1,A				;A+h1*x(n-1)--->A
	LTD	@XN					;x(n)--->T
							;x(n)--->x(n-1)
	MAC	@H0,A				;A+h0*x(n)--->A
	STH	A,@y				;保存y(n)
	MVKD	@y,*AR6+
*	PORTW	@y,PA0			;输出y(n)
	BD	FIR1
	MVDK	*AR5+,@XN
*	PORTR	PA1,@XN		;再一次从端口PA1读入数据x(n)
	.end

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -