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

📄 filterconv.asm

📁 Low-pass signal filtering by convolution
💻 ASM
字号:
; Program to filter signal; Written in Pinnacle; Input data rate 200Hz, 3bytes; Sinc filter Fc=8Hz, kernel=199, 2bytes; Output data rate 20Hz, 3bytes from 20 MULT-ADD units	SSW EQU   2FH 	test = 2fh.4         signIn = 2FH.3    	signM = 2FH.2 	signF = 2FH.1 	sign = 2Fh.0 	 					in = 30H ;,31, 32	count1 = 33h	count2 = 34h	count3 = 35h	summ = 36h;37;38;39;3A;3B		f1 = 4eh	f2 = 4fh		C1 = 53h	;Filter counters	C2 = 54h	C3 = 55h	C4 = 56h	C5 = 57h	C6 = 58h	C7 = 59h	C8 = 5ah	C9 = 5bh	C10 = 5ch		C11 = 5dh	;Filter counters	C12 = 5eh	C13 = 5fh	C14 = 60h	C15 = 61h	C16 = 62h	C17 = 63h	C18 = 64h	C19 = 65h	C20 = 66h		SUM = 7dh ; 7e 7f	SUM1	EQU   80H ;81, 82, 83, 84, 85	SUM2	EQU   86H ;87, 88, 89, 8a, 8b	SUM3	EQU   8cH ;8d, 8e, 8f, 90, 91	SUM4	EQU   92H ;93, 94, 95, 96, 97	SUM5	EQU   98H ;99, 9a, 9b, 9c, 9d	SUM6	EQU   9eH ;9f, a0, a1, a2, a3	SUM7	EQU  0a4H ;a5, a6, a7, a8, a9	SUM8	EQU  0aaH ;ab, ac, ad, ae, af	SUM9	EQU  0b0H ;b1, b2, b3, b4, b5	SUM10	EQU  0b6H ;b7, b8, b9, ba, bb	SUM11	EQU  0bch ;bd, be, bf, c0, c1	SUM12	EQU  0c2H ;c3, c4, c5, c6, c7	SUM13	EQU  0c8H ;c9, ca, cb, cc, cd	SUM14	EQU  0ceH ;cf, d0, d1, d2, d3	SUM15	EQU  0d4H ;d5, d6, d7, d8, d9	SUM16	EQU  0daH ;db, dc, dd, de, df	SUM17	EQU  0e0H ;e1, e2, e3, e4, e5	SUM18	EQU  0e6H ;e7, e8, e9, ea, eb	SUM19	EQU  0ecH ;ed, ee, ef, f0, f1	SUM20	EQU  0f2H ;f3, f4, f5, f6, f7			M = 199		;Filter lengh  ORG 0030H    main:	mov SUM+1, #0	mov SUM, #0MA:				mov IE, #0	mov P2, #0FFh	mov P0, #0FFh	mov P1, #07Fh	;Clr ADC	MOV P3, #0FFH	      DJNZ SUM+1,MA      DJNZ SUM,MA            mov R0, #0ma1:        mov @R0, #0	;Clear IRAM      djnz R0, ma1            mov SP, #07h      wait:	  	jb P1.0, wait	;wait for data ready	CALL XXXX	;mythical subroutine to get input data  (in, in+1, in+2)  	acall Conv  	sjmp wait  	wait1:		jb P1.1, wait1  ;wait for data out sincronisation	call YYYY	;mythical subroutine to send filtered data out (SUM, SUM+1, SUM+2)					;prepare new Convolutionrr0:	mov A, C1	jnz rr1	mov R1, #SUM1	acall Shift	;shift right SUM1	mov R1, #SUM1+1	acall Move	;mov to SUM	mov R1, #SUM1	acall Clear	mov C1, #M	ajmp rr21	rr1:	mov A, C2	jnz rr2	mov R1, #SUM2	acall Shift	;shift right SUM2	mov R1, #SUM2+1	acall Move	;mov to SUM	mov R1, #SUM2	acall Clear	mov C2, #M	ajmp rr21	rr2:	mov A, C3	jnz rr3	mov R1, #SUM3	acall Shift	;shift right SUM3	mov R1, #SUM3+1	acall Move	;mov to SUM	mov R1, #SUM3	acall Clear	mov C3, #M	ajmp rr21	rr3:	mov A, C4	jnz rr4	mov R1, #SUM4	acall Shift	;shift right SUM4	mov R1, #SUM4+1	acall Move	;mov to SUM	mov R1, #SUM4	acall Clear	mov C4, #M	ajmp rr21	rr4:	mov A, C5	jnz rr5	mov R1, #SUM5	acall Shift	;shift right SUM5	mov R1, #SUM5+1	acall Move	;mov to SUM	mov R1, #SUM5	acall Clear	mov C5, #M	ajmp rr21	rr5:	mov A, C6	jnz rr6	mov R1, #SUM6	acall Shift	;shift right SUM6	mov R1, #SUM6+1	acall Move	;mov to SUM	mov R1, #SUM6	acall Clear	mov C6, #M	ajmp rr21	rr6:	mov A, C7	jnz rr7	mov R1, #SUM7	acall Shift	;shift right SUM7	mov R1, #SUM7+1	acall Move	;mov to SUM	mov R1, #SUM7	acall Clear	mov C7, #M	ajmp rr21	rr7:	mov A, C8	jnz rr8	mov R1, #SUM8	acall Shift	;shift right SUM8	mov R1, #SUM8+1	acall Move	;mov to SUM	mov R1, #SUM8	acall Clear	mov C8, #M	ajmp rr21	rr8:	mov A, C9	jnz rr9	mov R1, #SUM9	acall Shift	;shift right SUM9	mov R1, #SUM9+1	acall Move	;mov to SUM	mov R1, #SUM9	acall Clear	mov C9, #M	ajmp rr21	rr9:	mov A, C10	jnz rr10	mov R1, #SUM10	acall Shift	;shift right SUM10	mov R1, #SUM10+1	acall Move	;mov to SUM	mov R1, #SUM10	acall Clear	mov C10, #M	ajmp rr21	rr10:	mov A, C11	jnz rr11	mov R1, #SUM11	acall Shift	;shift right SUM11	mov R1, #SUM11+1	acall Move	;mov to SUM	mov R1, #SUM11	acall Clear	mov C11, #M	ajmp rr21	rr11:	mov A, C12	jnz rr12	mov R1, #SUM12	acall Shift	;shift right SUM12	mov R1, #SUM12+1	acall Move	;mov to SUM	mov R1, #SUM12	acall Clear	mov C12, #M	ajmp rr21	rr12:	mov A, C13	jnz rr13	mov R1, #SUM13	acall Shift	;shift right SUM13	mov R1, #SUM13+1	acall Move	;mov to SUM	mov R1, #SUM13	acall Clear	mov C13, #M	ajmp rr21	rr13:	mov A, C14	jnz rr14	mov R1, #SUM14	acall Shift	;shift right SUM14	mov R1, #SUM14+1	acall Move	;mov to SUM	mov R1, #SUM14	acall Clear	mov C14, #M	ajmp rr21	rr14:	mov A, C15	jnz rr15	mov R1, #SUM15	acall Shift	;shift right SUM15	mov R1, #SUM15+1	acall Move	;mov to SUM	mov R1, #SUM15	acall Clear	mov C15, #M	ajmp rr21	rr15:	mov A, C16	jnz rr16	mov R1, #SUM16	acall Shift	;shift right SUM16	mov R1, #SUM16+1	acall Move	;mov to SUM	mov R1, #SUM16	acall Clear	mov C16, #M	ajmp rr21	rr16:	mov A, C17	jnz rr17	mov R1, #SUM17	acall Shift	;shift right SUM17	mov R1, #SUM17+1	acall Move	;mov to SUM	mov R1, #SUM17	acall Clear	mov C17, #M	ajmp rr21	rr17:	mov A, C18	jnz rr18	mov R1, #SUM18	acall Shift	;shift right SUM18	mov R1, #SUM18+1	acall Move	;mov to SUM	mov R1, #SUM18	acall Clear	mov C18, #M	ajmp rr21	rr18:	mov A, C19	jnz rr19	mov R1, #SUM19	acall Shift	;shift right SUM19	mov R1, #SUM19+1	acall Move	;mov to SUM	mov R1, #SUM19	acall Clear	mov C19, #M	ajmp rr21	rr19:	mov A, C20	jnz rr21	mov R1, #SUM20	acall Shift	;shift right SUM20	mov R1, #SUM20+1	acall Move	;mov to SUM	mov R1, #SUM20	acall Clear	mov C20, #Mrr21:	jmp wait1	Shift:	mov count2, #2	mov B, R1sh2:	mov count1, #4sh1:	mov A, @R1	;SUMn	rrc A	mov @R1, A	inc R1	djnz count1, sh1	mov R1, B	djnz count2, sh2	retMove:		mov A, @R1	mov SUM, A	inc R1	mov A, @R1	mov SUM+1, A	inc R1	mov A, @R1	mov SUM+2, A	retClear:	mov count1, #6cc1:	mov @R1, #0	inc R1	djnz count1, cc1	ret	Conv:	mov A, in	mov C, Acc.7	mov signIn, C	;store Data sign	jnC c0	clr C		;make positive	mov A, in+2	subb A, #1	cpl A	mov in+2, A	mov A, in+1	subb A, #0	cpl A	mov in+1, A	mov A, in	subb A, #0	cpl A	mov in, Ac0:		;SUM1	mov A, C1	jz c1	mov R0, #SUM1+5	acall MultAdd	dec C1c1:		;SUM2	mov A, C2	jz c2	mov R0, #SUM2+5	acall MultAdd	dec C2c2:		;SUM3	mov A, C3	jz c3	mov R0, #SUM3+5	acall MultAdd	dec C3c3:		;SUM4	mov A, C4	jz c4	mov R0, #SUM4+5	acall MultAdd	dec C4c4:		;SUM5	mov A, C5	jz c5	mov R0, #SUM5+5	acall MultAdd	dec C5c5:		;SUM6	mov A, C6	jz c6	mov R0, #SUM6+5	acall MultAdd	dec C6c6:		;SUM7	mov A, C7	jz c7	mov R0, #SUM7+5	acall MultAdd	dec C7c7:		;SUM8	mov A, C8	jz c8	mov R0, #SUM8+5	acall MultAdd	dec C8c8:		;SUM9	mov A, C9	jz c9	mov R0, #SUM9+5	acall MultAdd	dec C9c9:		;SUM10	mov A, C10	jz c10	mov R0, #SUM10+5	acall MultAdd	dec C10c10:		;SUM11	mov A, C11	jz c11	mov R0, #SUM11+5	acall MultAdd	dec C11c11:		;SUM12	mov A, C12	jz c12	mov R0, #SUM12+5	acall MultAdd	dec C12c12:		;SUM13	mov A, C13	jz c13	mov R0, #SUM13+5	acall MultAdd	dec C13c13:		;SUM14	mov A, C14	jz c14	mov R0, #SUM14+5	acall MultAdd	dec C14c14:		;SUM15	mov A, C15	jz c15	mov R0, #SUM15+5	acall MultAdd	dec C15c15:		;SUM16	mov A, C16	jz c16	mov R0, #SUM16+5	acall MultAdd	dec C16c16:		;SUM17	mov A, C17	jz c17	mov R0, #SUM17+5	acall MultAdd	dec C17c17:		;SUM18	mov A, C18	jz c18	mov R0, #SUM18+5	acall MultAdd	dec C18c18:		;SUM19	mov A, C19	jz c19	mov R0, #SUM19+5	acall MultAdd	dec C19c19:		;SUM20	mov A, C20	jz c20	mov R0, #SUM20+5	acall MultAdd	dec C20c20:	ret	MultAdd:	mov DPTR, #filter	;get filter	clr C	rlc A	mov DPL, A	jnC m1	inc DPHm1:	mov A, #1	movc A, @A+DPTR	mov f1, A	mov C, Acc.7	mov A, #2	movc A, @A+DPTR	mov f2, A	  	mov signF, C	;store Filter sign  	jnC g1  	mov A, f2	;make positive	clr C	subb A, #1	cpl A	mov f2, A	mov A, f1	subb A, #0	cpl A	mov f1, Ag1:		mov C, signF	;xrl signF, signIn	Product sign		anl C, /signIn		mov sign, C		mov C, signIn		anl C, /signF		orl C, sign		mov sign, C  	mov A, in+2	;multiply		  	mov B,f2  	mul AB  	mov summ+5, A  	mov summ+4, B  		mov A, in+1  		mov B,f2  		mul AB  		add A, summ+4  		mov summ+4, A  		mov A, B  		addc A, #0  		mov summ+3, A  			mov A, in	  		mov B,f2	  		mul AB	  		add A, summ+3	  		mov summ+3, A	  		mov A, B	  		addc A, #0	  		mov summ+2, A	  						mov A, in+2				mov B,f1			  	mul AB			  	add A, summ+4			  	mov summ+4, A			  	mov A, B			  	addc A, summ+3			  	mov summ+3, A			  	mov A, summ+2			  	addc A, #0			  	mov summ+2, A			  	mov A, #0			  	addc A, #0			  	mov summ+1, A 			  		mov A, in+1			  		mov B,f1			  		mul AB			  		add A, summ+3			  		mov summ+3, A			  		mov A, B			  		addc A, summ+2			  		mov summ+2, A			  		mov A, summ+1			  		addc A, #0			  		mov summ+1, A			  			mov A, in				  		mov B,f1				  		mul AB				  		add A, summ+2				  		mov summ+2, A				  		mov A, B						addc A, summ+1				  		mov summ+1, A				  		mov summ, #0					jnb sign, s1	;restore sign					mov A, summ+5					cpl A					add A, #1					mov summ+5, A					mov A, summ+4					cpl A					addc A, #0					mov summ+4, A					mov A, summ+3					cpl A					addc A, #0					mov summ+3, A					mov A, summ+2					cpl A					addc A, #0					mov summ+2, A					mov A, summ+1					cpl A					addc A, #0					mov summ+1, A					mov A, summ					cpl A					addc A, #0					mov summ, A				s1:				;ADD					mov A, @R0					add A, summ+5					mov @R0, A					dec R0					mov A, @R0					addc A, summ+4					mov @R0, A					dec R0					mov A, @R0					addc A, summ+3					mov @R0, A					dec R0					mov A, @R0					addc A, summ+2					mov @R0, A					dec R0					mov A, @R0					addc A, summ+1					mov @R0, A					dec R0					mov A, @R0					addc A, summ					mov @R0, Aret			;filter 200Hz	filter: DB 00h	DW 00h,0fff0h,0ffdfh,0ffd0h,0ffc3h,0ffb9h,0ffb2h,0ffb0h,0ffb3h,0ffbbh,0ffc9h,0ffdbh,0fff3h,0eh,02ch,04bh,068h,083h	DW 097h,0a4h,0a6h,09dh,088h,065h,037h,00h,0ffc1h,0ff7eh,0ff3ch,0ff00h,0feceh,0feach,0fe9eh,0fea7h,0fecah,0ff06h	DW 0ff5bh,0ffc5h,03eh,0c1h,0145h,01c1h,022bh,0279h,02a4h,02a4h,0276h,0218h,018bh,0d6h,00h,0ff15h,0fe23h,0fd3ah	DW 0fc6bh,0fbc7h,0fb5dh,0fb3ah,0fb66h,0fbe7h,0fcbbh,0fddbh,0ff3dh,0cch,0275h,041bh,05a2h,06eeh,07e2h,0865h,0863h	DW 07d0h,06a6h,04ebh,02abh,00h,0fd0ah,0f9f3h,0f6eah,0f424h,0f1d7h,0f037h,0ef75h,0efbch,0f12ch,0f3d9h,0f7cbh,0fcf9h	DW 034ch,0aa1h,012c3h,01b72h,02466h,02d50h,035dfh,03dc2h,044adh,04a5ch,04e96h,05130h,05211h,05130h,04e96h,04a5ch	DW 044adh,03dc2h,035dfh,02d50h,02466h,01b72h,012c3h,0aa1h,034ch,0fcf9h,0f7cbh,0f3d9h,0f12ch,0efbch,0ef75h,0f037h	DW 0f1d7h,0f424h,0f6eah,0f9f3h,0fd0ah,00h,02abh,04ebh,06a6h,07d0h,0863h,0865h,07e2h,06eeh,05a2h,041bh,0275h,0cch	DW 0ff3dh,0fddbh,0fcbbh,0fbe7h,0fb66h,0fb3ah,0fb5dh,0fbc7h,0fc6bh,0fd3ah,0fe23h,0ff15h,00h,0d6h,018bh,0218h,0276h	DW 02a4h,02a4h,0279h,022bh,01c1h,0145h,0c1h,03eh,0ffc5h,0ff5bh,0ff06h,0fecah,0fea7h,0fe9eh,0feach,0feceh,0ff00h	DW 0ff3ch,0ff7eh,0ffc1h,00h,037h,065h,088h,09dh,0a6h,0a4h,097h,083h,068h,04bh,02ch,0eh,0fff3h,0ffdbh,0ffc9h,0ffbbh	DW 0ffb3h,0ffb0h,0ffb2h,0ffb9h,0ffc3h,0ffd0h,0ffdfh,0fff0h,00hend

⌨️ 快捷键说明

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